3.2 文件描述符
- UNIX shell使文件描述符0与进程的标准输入相结合,文件描述符 1与标准输出
相结合,文件描述符2与标准出错输出相结合。这是 UNIX shell以及很多应用程序使用的惯例,而与内核无关 - ** 在P O S I X . 1应用程序中,幻数 0、 1、 2应被代换成符号常数 S T D I N _ F I L E N O、 S T D O U T _F I L E N O和S T D E R R _ F I L E N O。这些常数都定义在头文件< u n i s t d . h >中。**
- 文件描述符的范围是 0 ~ O P E N _ M A X (见表2 - 7 )。早期的U N I X版本采用的上限值是 1 9 (允许每个进程打开2 0个文件),现在很多系统则将其增加至6 3
3.3 open函数
#include <sys/types.h>
#include <sys/stat.h>
#include <fnctl.h>
int open(const char *pathname, int oflag, ...);
3.4 creat函数
此函数等效于:
open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);
3.6 lseek 函数
- 按照系统默认,当打开一个文件时,除非指定O_APPEND选择项,否则该位移量被设置为0。
- 可以调用lseek函数显式地定位一个打开文件。
-
#include <sys/types.h> #include <unistd.h> off_t lseek(int filedes, off_t offset, int whence);
- 若whence是SEEK_SET,则将该文件的位移量设置为距文件开始处 offset 个字节;
- 若whence是SEEK_CUR,则将该文件的位移量设置为其当前值加offset, offset可为正或负;
- 若whence是SEEK_END,则将该文件的位移量设置为文件长度加offset, offset可为正或负;
- 若lseek成功执行,则返回新的文件位移量
3.7 read函数
null
3.10 文件共享
3.12 dup和dup2函数
没弄懂
3.13 fcntl函数
#include <sys/types.h>
#include <uinistd.h>
#include <fcntl.h>
int fcntl(int filedes, int cmd, ...);
- 复制一个吸纳村的描述符(cmd = F_DUPFD)
- 获得/设置文件描述符标记(cmd = F_GETFD或F_SETFD)
- 获得/设置文件状态标志(cmd = F_GETFL或F_SETFL)
- 获得/设置异步I/O有权(cmd = F_GETOWN或F_SETOWN)
- 获得/设置记录锁(cmd = F_GETLK, F_SETLK或F_SETLKW)
- O_ACCMODE用于取出flag中的低两位,这两位用来说明文件状态标志中的write read