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);

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

相关推荐
国际云,接待5 小时前
华为云 EVS 性能诊断:用 CES、ECS QoS 与 fio 定位 IOPS 和吞吐瓶颈
服务器
xx~t5 小时前
嵌入式学习——ARM1
linux·arm开发·嵌入式硬件·arm
xx~t5 小时前
嵌入式——ARM1(详细篇)
linux·arm开发·嵌入式硬件·arm
我要见SA姐16 小时前
告别 Copilot?Codex 本地化部署指南
运维·数据库·机器学习·oracle·回归
Elastic 中国社区官方博客7 小时前
列式存储并不等同于列式数据库。Columnar 模式为 Elasticsearch 带来了什么
大数据·运维·数据库·elasticsearch·搜索引擎
fengkai45457 小时前
八、Docker详解4-5
运维·docker
智恒百亿8 小时前
RTX 5090 八卡服务器 vs RTX PRO 6000 整机:AI 推理、微调与渲染选型部署指南
运维·服务器·rtx5090
ManageEngineITSM8 小时前
DevOps和ITIL是什么关系?是替代还是互补一文讲清
java·服务器·资产管理·变更管理
DYWorker0018 小时前
Linux驱动子系统:DMA-Buf —— Consumer和Provider(008)
linux·驱动开发
雯宝9 小时前
Linux 内核函数集
linux