Linux笔记(12)-文件描述符相关操作

    xiaoxiao2025-05-18  48

    dup和dup2函数:复制文件描述符 1. 文件描述符表(fd的标号),其中0,1,2默认被占用。 2. 复制文件描述符指:复制后产生的两个文件描述符可以操作同一个文件 3. 函数原型: a. int dup(int oldfd); dup会将oldfd复制一份到当前文件描述符表中未被占用的最小的文件描述符上 -- 返回值为复制的文件描述符 b. int dup2(int oldfd, int newfd); dup2指定了复制到的新的文件描述符: -- 当新文件描述符被打开时,dup2会关闭它,然后将old复制给它 -- 当old与new为同一文件描述符,dup2返回为oldfd 4. 文件关闭 复制之后需要关闭两个文件描述符才会真正关闭文件 fcntl函数:改变已经打开文件的属性 1. 函数原型: int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); 2. 函数作用: a. 复制一个文件描述符 b. 获得/设置文件描述符标记 -- F_GETFD/F_SETFD c. 获得/设置文件状态标记 -- F_GETFL/F_SETFL F_GETFL:O_RDONLY, O_WRONLY, O_RDWR, O_EXEC, O_SEARCH, O_APPEND, O_NONBLOCK F_SETFL:O_APPEND<追加写操作>, O_NONBLOCK -- 追加写只能在原文件打开时有写权限才能设置 d. 获得/设置异步I/O所有权 -- F_GETWN/F_SETWN e. 获得/设置记录锁 -- F_GETK/F_SETK/F_SETKW 3. 参数与返回值 fd:文件描述符 cmd:F_GETxx或者F_SETxx arg:如果cmd为GET时,值设置0;如果为SET时,为SET的可选内容参数 追加操作 flag |= O_APPEND 返回值:如果cmd为GET时,返回值为文件的描述信息
    最新回复(0)