open函数
用于打开或创建文件,在打开或者创建文件的属性及用户权限等各种参数
#inlude<fcntl.h>
int open(const char *path,int flags,mode t_mode);
若成功放回文件描述符,出错就返回-1
参数值 | 含义 |
---|---|
path | 被打开的文件名(可包括路径名如"dev/ttyS0") |
flags | 文件打开方式 |
O_RDONLY | 以只读方式打开文件 |
O_WRONLY | 以只写方式打开文件 |
O_RDWR | 以读写方式打开文件 |
O_CREAT | 如果改文件不存在,就创建一个新的文件,并用第三个参数为其设置权限 |
O_EXCL | 如果使用O_CREAT时文件存在,则返回错误消息。这一参数可测试文件是否存在。此时open是原子操作,防止多个进程同时创建同一个文件 |
O_NOCTTY | 使用本参数时,若文件为终端,那么该终端不会成为调用open()的那个进程的控制终端 |
O_TRUNC | 若文件已经存在,那么会删除文件中的全部原有数据,并且设置文件大小为0 |
O_APPEND | 以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾,即将写入的数据添加到文件的末尾 |
O_NONBLOCK: | 如果pathname指的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I/O操作设置非阻塞方式。 |
O_SYNC | 使每次write都等到物理I/O操作完成。 |
O_RSYNC | read 等待所有写入同一区域的写操作完成后再进行在open()函数中,falgs参数可以通过“ |
perms被打开文件的存取权限,可以用两种方法表示,可以用一组宏定义:S_I(R/W/X)(USR/GRP/OTH),其中R/W/X表示读写执行权限,
USR/GRP/OTH分别表示文件的所有者/文件所属组/其他用户,如S_IRUUR|S_IWUUR|S_IXUUR,(-rex------),也可用八进制800表示同样的权限
t_mode对应的是使用文件的权限
write和read函数
write函数
write函数队文件写入数据
#include<unistd.h>
ssize_t write(int file_des,const void *buf,size_t);
- file_des:文件描述符,标识要读取得文件,如果为0,则从标准输入读取数据。类似于scanf函数得功能
- *buf:缓冲区,用来存储读入得数据
- nbytes:要读取的字符数
放回值:成功放回已写的字节数;出错放回-1
read函数
read函数从文件读取数据
#include<unistd.h>
ssize_read(int file_des,void *buf,size_t nbytes);
- file_des:文件描述符,标识了要写入的目标文件
列如file_des的值为1,就向标准输出写数据,也就是在显示屏上显示数据,如果为2,则向标准错误写数据 - *buf待写入的文件,是一个字符串指针
- nbytes:要写入的字符数
- 放回值:成功放回读到的字节数,若已到文件结尾返回0,出错返回-1
creat函数
creat函数用于创建一个文件
#include<unistd.h>
int creat(const char * path,mode_t mode);
返回值:若成功,返回以只写方式打开的文件描述符;若出错,则为-1
close函数
用来关闭一个被打开的文件
#include<unisd.h>
int close(int fd);
返回值:若成功返回0,若出错返回-1.参数fd是需关闭文件描述符。
当一个进程终止时,他所有的打开文件都由内核自动关闭
rename函数
用户修改文件名称
#include<stdio.h>
int rename(const char*oldpath,const char*newpath);
放回值:若成功返回0,出错返回-1
参数oldpath时文件的原路径;newpath时文件的新路径
remove函数
删除文件
#include<stdio.h>
int remove(const char * pathname);
dup和dup2函数
#include<unistd.h>
int dup(int file_des);
#include<unistd.h>
int dup2(int file_des,int file_des2);
dup和dup2都用于复制一个现有的文件描述符,成功返回新的文件描述符,出错返回-1
主要两个区别:
- dup一定返回当前可用的最小文件描述符
- dup2指定参数file_des2为新的文件描述符,当file_des打开时,先将其关闭,若file_des和file_des2相等,返回file_des2而不关闭它