欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux-文件I/O

程序员文章站 2022-05-24 20:20:02
...

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 如果此文件存在,并且以只读或只写模式打开,则将此文件截断为0
O_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;
}

结果:
Linux-文件I/O

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可正可负
相关标签: io linux