本文共 2530 字,大约阅读时间需要 8 分钟。
文件操作主要过程就是open、write、read、close
open()
头文件:#include#include #include 功能:打开和创建文件(建立一个文件描述符,其他的函数可以通过文 件描述符对指定文件进行读取与写入的操作。)
函数原型
int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);
参数详解
1、pathname:打开或创建文件的路径2、flags:打开文件时,可以传入多个参数选项,用于指定怎么打开文件,构成falgs参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR: 读,写打开这三个常量,必须制定一个且只能指定一个O_CREAT: 若文件不存在,则创建它,需要使用mode选项。来指明新文件的访问权限O_APPEND: 追加写,如果文件已经有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容O_TRUNC:若文件存在,则长度被截为0,属性不变 3、mode:前两个参数与上相同,第三个参数是设定该文件的权限,具体参数如下S_IRUSR : 文件所有者有读(r)权限S_IWUSR : 文件所有者有写(w)权限S_IRGRP : 文件所属组有读(r)权限S_IWGRP : 文件所属组有写(w)权限S_IROTH : 文件所属other有读(r)权限S_IWOTH : 文件所属other有写(w)权限
返回值
成功:新打开的文件描述符失败:-1open返回的文件描述符一定是最小的而且没有被使用的
例子
if((filefd = open("./file.txt", O_CREAT|O_RDWR|O_TRUNC, 0666))) == -1)此处0666是代表文件权限,跟第三个参数其他英文意思一样
write()
头文件:#include
函数原型
ssize_t write(int fd,const void*buf,size_t count);参数说明: fd:是文件描述符(write所对应的是写,即就是1) buf:通常是一个字符串,需要写入的字符串 count:是每次写入的字节数
返回值
成功:返回写入的字节数 失败:返回-1并设置errno ps: 写常规文件时,write的返回值通常等于请求写的字节 数count, 而向终端设备或者网络写时则不一定
案例
if( (rv=write(fd, MSG_STR, strlen(MSG_STR))) < 0 )
read()
头文件:#include功能:用于从文件描述符对应的文件读取数据(从打开的设备或文件中读取数据)
函数原型
ssize_t read(int fd,void*buf,size_t count)参数说明:fd: 是文件描述符buf: 为读出数据的缓冲区;count: 为每次读取的字节数(是请求读取的字节数,读上来的数据保 存在缓冲区buf中,同时文件的当前读写位置向后移)
返回值
成功:返回读出的字节数失败:返回-1,并设置errno,如果在调用read 之前到达文件末尾,则这次read返回0
案例
if( (rv=read(fd, buf, sizeof(buf))) < 0 )注意此处 buf需要清空内存memset(buf, 0, sizeof(buf));
close()
头文件:#include功能:关闭一个已经打开的文件
函数原型
int close(int fd)参数说明:fd:是需要关闭的文件描述符
返回值
成功:返回0;失败:返回-1,并设置errno
代码
#include#include #include #include #include #include #include #include #define buf_size 128#define conten "hello word\n"int main(int argc, char **argv[]){ int fd; int rv; char buf[buf_size]; if((fd = open("test.txt", O_RDWR|O_CREAT|O_TRUNC, 0666))<0) { printf("the file open faild is %s\n",strerror(errno)); return -1; } printf("Open file returned file descriptor [%d]\n", fd); if((rv = write(fd, conten, strlen(conten)))<0) { printf("write is faild:%s\n", strerror(errno)); return -1; } printf("write %d bytes into file successful\n", rv); memset(buf , 0, sizeof(buf)); lseek(fd, 0, SEEK_SET); if((rv = read(fd, buf, sizeof(buf)))<0) { printf("read faild is : %s\n", strerror(errno)); return -1; } printf("read byte[%d] successful is: %s\n",rv, buf); close(fd); return 0;}
转载地址:http://idkaz.baihongyu.com/