UNIX环境高级编程学习笔记_文件I/O

Unix文件操作

一. open和openat的区别

函数原型:

int open(const char *path, int oflag, .....);
int openat(int fd, const char *path, int oflag, ..............);

两者区别
openat参数 fd 可指定相对路径来打开文件
openat有利于解决TOCTTOU问题

二. lseek函数可生成文件空洞

即lseek函数的指针大于文件长度时,将会生成 0/ 填充的文件。

三. fcntl函数改变已打开文件属性

函数原型:

int fcntl(int *fd*, int *cmd*, .../ * int arg * /);

fd 为文件描述符,表进程中的文件描述标志
cmd 对打开文件执行的命令
arg 和参数cmd有关,详见《UNIX高级环境编程》P65-66

注:Unix中命令行使用 ’ > ’ 表输出到文件;使用 ’ < ’ 表输入文件代替标准输入。

习题总结

  1. 关于软件缓冲和硬件缓存的区别
    软件缓冲是指用队列或者其他数据结构实现对数据的暂时存储,以实现收发端的一致。而硬件缓存是为解决不同硬件速度不匹配问题而使用的硬件功能。
  2. fcntldup2函数中的应用
    dup2函数的实现方式(两步):
close(fd2)  //关闭fd2文件
fcntl(fd, F_DUPFD, fd2)  //复制fd描述符至fd2,fcntl涉及的描述符的位置要**大于等于**fd2的值。
“大于等于”,是因为fd2可能已经被使用,此时只能找更大的描述符。

参考资料:
[1]. UNIX高级环境编程课后习题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值