文件I/O |
1.文件描述符<unistd.h |
STDIN_FILENO -- 0 |
STDOUT_FILENO --1 |
STDERR_FILENO -- 2 |
文件描述符变化在 0 — OPEN_MAX -1 |
2函数open和openat |
函数错误返回 -1 ,成功返回 文件描述符 |
将最后一个参数写....ISO C 用这个方法表示余下的参数的数量和类型是可变的。对于open函数,只有当新创建文件时,才使用最后这个参数。 |
oflag参数: |
O_RDONLY // 只读打开 |
O_WRONLY // 只写打开 |
O_RDWR // 读写打开 |
O_EXEC //只执行打开 |
O_SEARCH // 只搜索打开(应用于目录) 个人认为是目录的执行位。此常量在于目录打开时验证他的搜索权限,对目录文件的后继操作就不需要再次检查该目录的搜索权限。 |
上面五个常量只能指定一个,且必须指定一个。下面的为可选: |
O_APPEND,O_CLOEXEC(将FD_CLOEXEC设置为文件描述符标志,若设置此标志,fork时候,关闭此文件描述符。),O_CREATE,O_DIRECTORY(若路径引用的不是目录,则出错。) O_EXC(如果同时指定了O_CREATE,而文件已经存在,则出错。如果不存在,则创建此文件。这使得测试和创建成为原子操作)。 |
O_NOCTTY (如果path引用的是终端文件,则不讲该终端设置为该进程的控制终端) O_NOFOLLOW(如果path引用的是一个符号链接,则出错。) O_NONBLACK(如果符号打开的是FIFO,一个块特殊文件,或一个字特殊文件,则此选项为文件的本次打开和后面的I/O操作设为非阻塞方式)。O_SYNC(使每次等待物理的i/o操作完成,包括由该write操作引起的文件属性更新所需的i/o)。O_TRUNC(文件若存在,而且只写或读写打开,则长度截断为0)。O_TTY_INIT(如果打开一个未打开的终端I/o,设置非标准termios参数值)。 |
O_DSYNC :使得write要等待物理完成,但是如果该写操作并不影响读取刚写入的数据,则不需要等待文件属性被更行 |
O_SYNC和O_DSYNC : 仅当文件属性需要更行以反映文件数据变化(比如更新文件以反映文件中包含了更多的数据)时,O_DSYN标志才影响文件属性。而设置O_SYNC标志后,数据和属性总是同步更新。当文件使用O_DSYNC,在重写其现有部分时,文件属性不会更新。 |
O_SYNC 使每一的文件描述符作为参数进行的read操作等待,直至所有对文件的的同一部分挂起的写操作完成。 |
fopen和open的关系: fd指定为AT_FDCWD,路径名在当前工作目录获取。 |
3函数create |
|
4关闭文件描述符 |
|
3.6函数lseek |
每一个打开文件都有一个与其相关联的“当前文件偏移量”,(当前文件偏移量显示在文件表项中) |
3.7,3.8write 和read |
|
3.10文件共享 |
进程表项文件表项和V节点表项(v节点结构是为了在一个计算机系统上的多文件类型支持的) |
![]() |
![]() |
unix第三章高级环境编程总结
最新推荐文章于 2022-02-25 23:58:25 发布