Linux 文件 IO vs 标准 IO:缓冲区、目录操作、常用函数汇总

文件IO和标准IO的区别

缓冲区:

1.行缓冲

默认大小1024字节(1K),主要使用在人机交互终端上。

off_t lseek(int fd, off_t offset, int whence);

功能:重新定位文件的读写位置

参数:

fd:文件描述符

offset:偏移量

whence:要偏移的起始位置

SEEK_SET :从文件开头偏移

SEEK_CUR: 从当前读写位置偏移

SEEK_END :从文件末尾偏移

返回值:

成功:返回当前读写位置到文件开头的偏移量

失败:-1

刷新条件:

遇到'\n'刷新

程序结束刷新

使用fflush()强制刷新

缓冲区满时自动刷新

2.全缓冲

默认大小4096字节(4K),文件交互

刷新条件:

程序结束刷新

文件关闭自动刷新

全缓冲区满时自动刷新

使用fflush()强制刷新

3.无缓冲

0k,出错信息输出,标准出错设备

stderr

目录文件

  1. 打开目录文件:opendir()
  2. 读目录文件 :readdir()
  3. 关闭目录文件 : closedir()

opendir

DIR *opendir(const char *name);

**功能:**打开目录文件并获得目录流指针

参数:

name:目录名

返回值:

成功:目录流指针

失败:NULL

closedir

int closedir(DIR *dirp);

int closedir(DIR *dirp);

功能 :关闭目录文件

参数:

dirp:目录流指针

返回值

成功: 0

失败:-1

readdir

struct dirent *readdir(DIR *dirp);

功能:从目录流中读取数据

参数

dirp:目录流指针

返回值:

成功:struct dirent 指针,代表读到的文件信息

失败:NULL

文件末尾:NULL

命令:

mkdir:创建文件夹

touch:创建普通文件

目录遍历:

复制代码
int main(void)
{
DIR *pdir = opendir("/dev");
if (NULL == pdir)
{
printf("opendir error\n");
return -1;
}
while (1)
{
struct dirent *pinfo = readdir(pdir);
if (NULL == pinfo)
{
break;
}
if ('.' == pinfo->d_name[0])
perror
{
continue;
}
printf(" %s : %ld\n", pinfo->d_name, pinfo->d_ino);
}
closedir(pdir);
return 0;
}

其他

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

功能:将格式化后的字符串写入到stream文件流代表的文件中。

int dprintf(int fd, const char *format, ...);

功能:将格式化后的字符串写入到fd所代表的文件中。

*int sprintf(char *str, const char *format, ...);

功能 :将格式化后的字符串写入到字符型数组中

字符串的拼接,格式化

可以将整形数据、浮点型数据等转换成字符串

char *strtok(char *str, const char *delim);

功能 :字符串截取函数

参数

str:要截取的原始字符串

delim:要截断的分隔符

返回值

成功:截取到的子字符串的首地址

失败:NULL(已经到字符串末尾)

出错处理函数:

strerro

char *strerror(int errnum);

功能 :将错误码转换成对应的错误信息字符串

参数

errnum:错误码:errno

返回值:

成功:返回错误码对应的字符串首地址

失败:NULL

perror

void perror(const char *s);

功能:打印自己的出错处理信息和系统系统给出的出错

相关推荐
比兔代理18 分钟前
静态住宅IP在品牌保护中的角色:稳定出口与长期监测
服务器·网络·ip
苍狗T1 小时前
k8s 控制器管理
linux·运维·云原生·容器·kubernetes
Linux运维技术栈1 小时前
筑牢业务信息安全防线:雷池WAF+后端日志溯源的全链路防护体系落地实践
linux·安全·雷池
笨笨饿1 小时前
#121_图传中的H.364编码与MP4的联系
linux·运维·前端·单片机·嵌入式硬件·面试·职场和发展
运维糕手1 小时前
一次 EVS"disk doesn't exist"报错的完整排查:我差点删掉生产Kafka
运维
优化Henry1 小时前
5G站点BBU功能模块集成化与偶发案例
运维·网络·学习·5g·tdd
Tanner_SL1 小时前
Linux笔记之GIT常用命令
linux·git
小尘要自信1 小时前
软件远控失效以后怎么办?玩客云 + One-KVM 实现 BIOS 级远程画面与键鼠控制
服务器·网络·数据库
GeW2 小时前
RHCE通关"捷径":实战经验+应试技巧双管齐下
linux