#include <fcntl.h>
int open(const char *pathname, int oflag, ...../*mode_t mode*/); //成功返回文件描述符,出错返回-1
oflag(可多选) :
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读、写
mode :
O_APPEND 每次写时都追加到文件尾端
O_CREAT 文件不存在则创建
O_EXCL 如果同是指定O_CREAT,文件存在则出错
O_TRUNC 如果文件存在,且只写或读写打开,长度截短为0
O_NOCTTY 如是pathname终端设备,则不将该设备分配为此进程的控制终端
int creat(const char *pathname, mode_t mode); // 成功则返回只写文件描述符,出错-1
等效于 open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);
#include <unistd.h>
int close(int filedes); //成功0,出错-1
当进程终止时,内核自动关闭它所有打开的文件
off_t lseek(int filedes, off_t offset, int whence); //成功返回新文件偏移量,出错-1
offset 与 whence有关
whence :
SEEK_SET 偏移文件开始处offset个字节
SEEK_CUR 偏移文件当前处offset(正负)个字节
SEEK_END 偏移文件未处offset(正负)个字节
ssize_t read(int filedes, void *buf, size_t nbytes); //成功返回读到的字节数,已到文件结尾返回0,出错-1
ssize write(int filedes, const void *buf, size_t nbytes); //成功返回已写字节数,出错-1
原子操作
ssize_t pread(int filedes, void *buf, size_t nbytes); //成功返回读到的字节数,已到文件结尾返回0,出错-1
相当于先调用lseek和read
ssize pwrite(int filedes, const void *buf, size_t nbytes); //成功返回已写字节数,出错-1
相当于先调用lseek和write
int dup(int oldfd); //成功返回新的文件描述符,出错-1
int dup2(int oldfd, int newfd); //成功返回新的文件描述符,出错-1
例子 :
#define STDOUT 1
int main(void)
{
//打开一个文件,操作者具有读写权限 如果文件不存在就创建
//创建STDOUT的描述符备份
//重定向fd1到STDOUT
//重定向之后要关闭nul
//写入数据
//还原
}
//结果就是msg写到了文件中而不是STDOUT
737

被折叠的 条评论
为什么被折叠?



