文件基本I/O操作
1.打开/创建文件(p71)
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int open(const char*pathname
,int flags
);
int open(const char*pathname
,int flags
,mode_t mode
);
int creat(const char*pathname
,mode_t mode
);
flags
:打开方式
mode:创建新文件时,指定权限
打开成功,返回文件描述符,失败返回-1
打开方式flags:
O_RDONLY :只读方式O_WRONLY :只写方式O_RDWR :读写方式O_CREAT :如果指定的文pathname不存在,就创建该文件O_EXCL:与O_CREAT一起使用时,当pathname指定的文件已经存在,则open将执行失败并返回一个错误O_NOCTTY: 如果pathname是终端设备,则不会把该终端设备当成进程控制端O_TRUNC : 如果pathname指定的文件是已经存在的普通文件,并且打开的方式是可写的(如O_RDWR或O_WRONLY),就将文件的长度裁为0,对于FIFO文件或终端设备文件,该方式将被忽略O_APPEND: 以追加的方式打开文件。在每一次调用write写文件之前,文件指针将被自为置到文件未尾,该方式保证对文件的写都是在文件末尾进行追加的O_NONBLOCK : 以不可阻断的方式打开文件。无论有无数据读取或等待,都会立即返回进程,同O_NDELAYO_SYNC : 文件以同步I/O的方式打开,这样每一次对文件的写操作之后,进程都会阻塞直到数据真正写到存储设备上O_NOFOLLOW : 如果pathname是一个符号链接文件,则open将执行失败。这是FreeBSD中的一个功能,后来加入Linux2.1L126中O_DIRECTORY : 如果pathname不是一个目录,则open将执行失败
文件打开方式举例
O_RDONLY 只读方式打开O_RDWR | O_CREAT如果文件存在就以读写方式打开,否则就创建文件O_RDWR | O_CREAT | O_EXCL 如果文件不存在就创建,否则就返回错误O_RDWR | O_CREAT | O_TRUNC 如果文件存在,则以读写方式打开,并将文件清空;否则创建该文件O_WRONLY | O_APPEND 以只写方式打开文件,并且数据以追加的方式每次写入文件未尾O_WRONLY | O_SYNC 以只写方式打开文件,并且每次写文件后等特数据真正写入磁盘后再返回进程
读文件
#include<unistd.h>
ssize_t
read(int fp
,void *buf
,size_t count
);
从文件描述符fp中读取count个字节到buf中
从当前读写指针处开始读取文件数据
成功:返回实际读回的字节数,失败:返回
-1
错误处理 read 返回值: 1.>0实际读到的字节数buf=1024 1. buf 1024 2.<buf 56; 2.=0数据读完(读到文件、管道、socket 末尾–对端关闭) 3.-1异常 1.errnoEINTR 被信号中断重启/quit 2.errno==EAGAIN(EWOULDBLOCK)非阻塞方式读,并且没有数据 3.其他值出现错误。perror exit。
写文件
#include<unistd.h>
ssize_t
write(int fp
,const void *buf
,size_t count
);
将buf中的count个字节的数据写入文件描述符fp的文件中
成功:返回写入数据的字节数,失败:返回
-1
关闭文件
#include<unistd.h>
int close(int fd
);
成功:返回
0,失败:返回
-1
文件操作
文件类型:
1、普通文件 “-” 2、目录文件 “d” 3、设备文件 字符设备文件 “c” ,块设备文件 “b” 4、符号(软)链接文件 “l”,内容是所连接目标文件的路径名。 5、管道文件 “p“,无名管道,命名管道。 6、套接字文件 ”s”,Linux系统间进行网络通信的一种机制。
上述信息介绍:
d——文件类型 rwxrwxrwx-——文件权限(用户主,用户组,其他用户) 2——链接文件个数 crd——用户名 crd——用户组名 4096——文件字节单位