Linux-文件I/O

来源:互联网 发布:网络挖掘机程式 编辑:程序博客网 时间:2024/05/28 06:06

open()

需要包含的头文件:

<sys/types.h>  <sys/stat.h>  <sys/fcntl.h>

格式:

int open(const str *pathname, int oflag, [..., mode_t mode])

pathname:打开或创建文件的全路径名;
oflag:函数的多个处理方式,详情见下表;
mode_t:用于创建文件时设置文件权限。

oflag参数说明:

O_RDONLY只读模式O_WRONLY只写模式O_RDWR读写模式O_APPEND追加到文件尾O_CREATE文件不存在时创建,有次参数的时候open函数要设置第三个参数,为文件添加权限O_EXCL如果同时指定O_CREATE而该文件又是存在的,报错。也可以测试一个文件是否存在,不存在则报错O_TRUNC如果此文件存在,并且以只读或只写模式打开,则将此文件截断为0O_SYNC使每次write操作都等到物理I/O操作完成

示例:

#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <fnctl.h>#include <sys/stat.h>#define FILE_PATH "./test.txt"int main(void){    int fd;    if((fd = open(FILE_PATH, O_RDWR | O_CREAT | O_EXCL, 0666)) < 0) {        printf("create error\n");        exit(-1);    } else {        printf("create success\n");    }    return 0;}

如果当前目录下存在text.txt,屏幕上就会打印”create error”,否则创建该文件,并打印”create success”。

read

需要包含的头文件:

<unistd.h>

函数原型:

ssize_t read(int fd, viod * buf, size_t count)

功能:从打开的文件中读取数据位置。
返回值:实际读到的字节数;已读到文件尾返回0,出错返回-1,ssize_t是系统头文件中用typedef定义的数据类型,相当于signed int。
参数说明:
fd:要读取的文件的描述符;
buf:得到的数据在内存中的位置的首地址;
count:期望本次能读取到的最大字节数。size_t是系统头文件中用typedef定义的数据类型,相当于unsigned int。

write

需要包含的头文件:

<unistd.h>

函数原型:

ssize_t write(int fd, const void * buf, size_t count)

功能:向打开的文件写数据。
返回值:写入成功返回世界写入的字节数,出错返回-1。(注意:返回-1的常见原因是:磁盘空间已满,超过了一个给定进程的文件长度。)
参数:
fd:要写入文件的文件描述符;
buf:要写入文件的数据在内存中存放位置的首地址;
count:期望写入的数据的最大字节数

read、write使用示例:

#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(void){    char buf[100];    int num=0;    //获取键盘输入    if((num = read(STDIN_FILENO, buf, 10)) == -1) {        printf("read error");        error(-1);    } else {        //将键盘输入又输出到屏幕上        write(STDOUT_FILENO, buf, num);    }    return 0;}

结果:
这里写图片描述

close

需要包含的头文件:

unistd.h

函数原型:

int close(int filedes)

功能:关闭一个打开的文件(注:当一个进程中止的时候,它所以打开的文件都是由内核自动关闭的,很多功能都已使用这一功能却没有显式地调用close。但是作为一个优秀的程序员应该显式地关闭不再使用的文件)。
参数:需要关闭文件的文件描述符。

lseek

需要包含的头文件:

sys/types.h   unistd.h

函数原型:

off_t lseek(int filesdes, off_t offset, int whence)

功能:设置文件内容读写位置。
返回值:成功返回新的文件位移,出错时返回-1;同样的,off_t是系统头文件定义的数据类型,相当于signed int。
参数whence:

whence文件位移量SEEK_SET从文件开始的处offset个字节SEEK_CUR当前值+offset,offset可正可负SEEK_END文件长度+offset,offset可正可负