文件基本IO操作

it2024-10-31  9

文件基本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——文件字节单位

最新回复(0)