APUE Adavance Programming in the UNIX Environment
初看了下中文版,感觉内容少了些,且翻译的也不敢恭维。。。还是老老实实看英文版吧。
头两章是比较初略的介绍 。其中第一章是对全文内容的一个略观。而第二章主要介绍几种标准及其联系与区别。因此打算从第三章开始写。
文件相关的操作大部分可由5个函数描述:open,read,write,lseek,close (现在比较热的分布式文件系统用的最多也是这几个)
int open(const char *pathname, int oflag, ...) 这里oflag分两类,一种是必须要的,如O_RDONLY 、O_WRONLY、O_RDWR (fcntl.h)。另一种是可选的O_APPEND、O_CREAT、O_EXCL(和O_CREAT一同使用,测试文件是否存在用)、O_TRUNC(O_WRONLY、O_RDWR才可起作用)、O_NOCTTY(不把终端设备作为控制终端)、O_NONBLOCK(对FIFO、特殊块文件、特殊字符文件),O_SYNC(O_FSYNC), 另外几个不常见的O_DSYNC、O_RSYNC
open操作返回的是最小的未用的文件描述符。
int creat(const char *pathname, mode_t mode); 等价于open (pathname, O_WRONLY | O_CREAT | O_TRUNC, mode); 现在用的较少
当一进程结束,所有打开的文件会自动被内核关闭 int close(int filedes);
off_t lseek(int filedes, off_t offset, int whence); (unistd.h) 当文件打开时默认偏移值是0
whence有三种选择SEEK_SET、SEEK_CUR、SEEK_END,后两种情况下offset可为负值。
FIFO、SOCKET、PIPE文件不可LSEEK 任何文件如果还没被写就被读回值为1(lseek可以使文件产生一个空洞)
_FILE_OFFSET_BITS可避免使用getconf