文件描述符
1、非负的整数。
2、表示一个打开的文件。
3、由系统调用(open)返回,被内核空间(后续系统调用)引用。
4、内核缺省为每个进程打开三个文件描述符:
•stdin 0 - 标准输入
•stdout 1 - 标准输出
•stderr 2 - 标准出错
open/creat/close
int open (
const char* pathname, // 路径
int flags, // 模式
mode_t mode // 权限(仅创建文件有效)
); // 创建/读写文件时都可用此函数
int creat (
const char* pathname, // 路径
mode_t mode // 权限
); // 常用于创建文件
int open (
const char* pathname, // 路径
int flags // 模式
); // 常用于读写文件
成功返回文件描述符,失败返回-1。
flags为以下值的位或:
O_RDONLY - 只读。\
|
O_WRONLY - 只写。 > 只选一个
|
O_RDWR - 读写。/
O_APPEND - 追加。
O_CREAT - 创建,不存在即创建(已存在即直接打开,
并保留原内容,除非...),
有此位mode参数才有效。
O_EXCL - 排斥,已存在即失败。\
> 只选一个,
O_TRUNC - 清空,已存在即清空 / 配合O_CREAT使用
(有O_WRONLY/O_RDWR)。
int close (
int fd // 文件描述符
);
write
ssize_t write (
int fd, // 文件描述符
const void* buf, // 缓冲区
size_t count // 期望写入的字节数
);
成功返回实际写入的字节数,失败返回-1。
read
ssize_t read (
int fd, // 文件描述符
void* buf, // 缓冲区
size_t count // 期望读取的字节数
);
成功返回实际读取的字节数,失败返回-1
lseek
off_t lseek (
int fd, // 文件描述符
off_t offset, // 偏移量
int whence // 起始位置
);
成功返回当前文件位置,失败返回-1。
whence取值:
SEEK_SET - 从文件头 (文件的第一个字节)。
SEEK_CUR - 从当前位置 (上一次读写的最后一个字节的下一个位置)。
SEEK_END - 从文件尾 (文件的最后一个字节的下一个位置)。
dup/dup2
int dup (int oldfd);
int dup2 (int oldfd, int newfd);
成功返回文件描述符oldfd的副本,失败返回-1。
1、复制一个已打开的文件描述符。
2、返回的一定是当前未被使用的最小文件描述符。
3、dup2可由第二个参数指定描述符的值,若指定描述符已打开,则先关闭之。
4、所返回的文件描述符副本,与源文件描述符,对应同一个文件表。