1.6.5 Linux 操作文件描述符
什么是文件描述符
在之前文章中有讲到。
文件描述符
用于描述一个进程打开的一个文件,存储于PCB
中。可以理解为它是一个与进程相关联的标识,用于定位当前进程打开的一个文件。文件关闭后文件描述符
将回收。
复制文件描述符
dup
、dup2
#include <unistd.h>
// duplicate a file descriptor
// oldfd:
// old file descriptor
// return value:
// new file descriptor, or -1 for error
int dup(int oldfd);
// duplicate a file descriptor
// oldfd:
// old file descriptor
// newfd:
// new file descriptor
// return value:
// newfd, or -1 for error
// If newfd is occupied, it will close the file first.
// It is same to reopen a same file in same flags.
int dup2(int oldfd, int newfd);
// $ man 2 dup
获取文件状态标记
fcntl
:fcntl
有五大功能,由cmd
参数决定,这里介绍的获取与修改文件状态标记
属于其中一种。这里仅介绍这一种。
#include <unistd.h>
#include <fcntl.h>
// manipulate file descriptor: get file descriptor flags
// fd:
// file descriptor
// cmd:
// F_GETFD: get file descriptor flags
// return value:
// return file descriptor flags
int fcntl(int fd, int cmd);
// $ man 2 fcntl
修改文件状态标记
fcntl
#include <unistd.h>
#include <fcntl.h>
// manipulate file descriptor: set file descriptor flags
// fd:
// file descriptor
// cmd:
// F_SETFD: get file descriptor flags
// flags:
// must and exactly one:
// O_RDONLY for read only,
// O_WRONLY for write only,
// O_RDWR for read and write
// optional and limitless:
// O_APPEND for append mode,
// O_NONBLOCK for non-block,
// O_CREATE for creatable.
int fcntl(int fd, int cmd, int flags);
// $ man 2 fcntl