Linux下C语言教程-李慧芹老师-第十三章
目录
I/O操作
输入输出是一切实现的基础。
标准IO:
stdio
系统调用IO(文件IO):
sysio
优先使用标准IO,兼容性更好,还有合并系统调用的优势。
标准IO
1 |
|
文件IO/系统调用IO
文件描述符(fd
)是在文件IO中贯穿始终的类型。
文件描述符的概念
是一个整型数,是一个指针数组的下标。
优先使用当前可用范围内最小的。
文件IO操作相关函数:
open
close
read
write
lsee
可以使用./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语言教程-李慧芹老师-第十三章/