open系列是 POSIX 定义的,是UNIX系统里的system call,只能用在 POSIX 的操作系统上。使用open系列函数需要"#include <fcntl.h>".
基于文件描述符的输入输出函数:
open:打开一个文件,并指定访问该文件的方式,调用成功后返回一个文件描述符。
creat:打开一个文件,如果该文件不存在,则创建它,调用成功后返回一个文件描述符。
close:关闭文件,进程对文件所加的锁全都被释放。
read:从文件描述符对应的文件中读取数据,调用成功后返回读出的字节数。
write:向文件描述符对应的文件中写入数据,调用成功后返回写入的字节数。
ftruncate:把文件描述符对应的文件缩短到指定的长度,调用成功后返回0。
lseek:在文件描述符对应的文件里把文件指针设定到指定的位置,调用成功后返回新指针的位置。
fsync:将所有已写入文件中的数据真正写到磁盘或其他下层设备上,调用成功后返回0。
fstat:返回文件描述符对应的文件的相关信息,把结果保存在struct stat中,调用成功后返回0。
fchown:改变与打开文件相关联的所有者和所有组,调用成功后返回0。
fchmod:把文件描述符对应的文件的权限位改为指定的八进制模式,调用成功后返回0。
flock:用于向文件描述符对应的文件施加建议性锁,调用成功后返回0。
fcntl:既能施加建议性锁也能施加强制性锁,能建立记录锁、读取锁和写入锁,调用成功后返回0。
dup:复制文件描述符,返回没使用的文件描述符中最小的编号。
dup2:由用户指定返回的文件描述符的值,用来重新打开或重定向一个文件描述符。
select:同时从多个文件描述符读取数据或向多个文件描述符写入数据。
文件描述符的优点:兼容POSIX标准,许多系统调用都依赖于它。
文件描述符的缺点:不能移植到UNIX以外的系统上去,也不直观。
1)write
#include <unistd.h>
size_t write(int fildes,const void *buf,size_t nbytes);
参数说明:
fildes:与文件相对应的文件描述符,可通过调用open函数获取
buf:存放将写入文件的数据,可以是字符串,也可是其他数据。其中buf是指向字符串的指针
nbytes:需写进文件的字节数
返回值:
-1:写入失败
0:写入0个字节
x:已写入x个字节
2)read
#include <unistd.h>
size_t read(int fildes,char *buf,size_t nbytes);
参数说明:
fildes:文件描述符
buf:存放从文件中读取的数据
nbytes:希望读取的直接数
返回值:
-1:读取失败
0:读取0个字节
x:已读取x个字节
3)open
参数说明:
path:文件存放路径;
oflags:打开方式。取值如下:
O_RDONLY:以只读方式打开,O_WRONLY:以只写方式打开,O_RDWR:以读写方式打开
oflages参数中还包括下列可选模式的组合(用按位或操作)
O_APPEND:把写入数据追加在文件的末尾
O_TRUNC:把文件长度设为0,丢弃已有的内容
O_CREAT:如果需要,就按参数mode中给出的访问模式创建文件
O_EXCL:已O_CREAT一起使用,确保调用者创建出文件
4)close
#include <unistd.h>
int close(int fildes);
参数:
fildes:文件描述符
返回:
success:0
fail:-1