文件基本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_NDELAY
- O_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-——文件权限(用户主,用户组,其他用户)
- x:表示文件是否可以运行,或文件夹是否可以进入
- 2——链接文件个数
- crd——用户名
- crd——用户组名
- 4096——文件字节单位