Linux下C语言教程-李慧芹老师-第十三章
目录
I/O操作
输入输出是一切实现的基础。
标准IO:
stdio系统调用IO(文件IO):
sysio
优先使用标准IO,兼容性更好,还有合并系统调用的优势。
标准IO
1 | |
文件IO/系统调用IO
文件描述符(fd)是在文件IO中贯穿始终的类型。
文件描述符的概念
是一个整型数,是一个指针数组的下标。
优先使用当前可用范围内最小的。
文件IO操作相关函数:
openclosereadwritelsee
可以使用./open file &来后台运行一个程序。
然后通过ps查看进程号
然后进入/proc/进程号/fd查看文件描述符
前三个是标准输入、输出、错误,后面的是打开的文件描述符
1 | |
例题:通过文件IO处理csv表格
1 | |
思路:逐行处理
可以使用16进制查看工具
文件IO与标准IO的区别
区别:响应速度&吞吐量
文件IO需要频繁进入内核,标准IO通过缓冲区合并系统调用。
响应速度快就文件IO,吞吐量大就标准IO。
[!warning]
二者不可混用
转换方法:fileno, fdopen
IO的效率问题
习题
将mycpy.c程序进行更改,将BUFSIZE的值放大,观察进程消耗的时间,注意性能出现拐点的值以及程序何时段错误。
解答
将BUFSIZE作为命令行参数传入,int bufsize = atoi(argv[3]);
通过脚本进行试验:
1 | |
结果
1 | |
在ulimit -a中,我的系统的stack size是8192,所以BUFSIZE不能超过8192,否则会段错误。与测试结果一致。
文件共享
多个任务共同操作一个文件或者协同完成任务
面试题:写程序删除一个文件的第10行
补充函数:
1 | |
1 | |
原子操作
指不可分割的操作
作用:解决竞争和冲突
如tmpnam函数,产生文件名和创建文件是两步,会有并发问题。
程序中的重定向:dup, dup2
1 | |
同步
同步内核层面的buffer和cache
1 | |
/dev/fd/目录
虚目录:显示当前进程的文件描述符信息
Linux下C语言教程-李慧芹老师-第十三章
http://sinlatansen.github.io/2024/05/16/Linux下C语言教程-李慧芹老师-第十三章/