Linux系统编程-文件IO(一)

这篇博客介绍了Linux系统编程中的文件I/O,包括open、read、write、lseek和close五个核心函数的使用,详细阐述了文件描述符的概念和作用,以及各个函数的功能、参数和返回值。
摘要由CSDN通过智能技术生成

最近在在实验楼上学Linux,做点笔记。上面的课程对于学习linux还不错,有兴趣可以看看。
文件IO:
Linux提供给了用户程序一些接口,用来调用执行相关的功能。大多数Linux文件I\O只需要用到5个函数:open,read,write,lseek和close
文件描述符:
文件描述符是一个非负整数。当打开一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。当写一个文件时,用open或create返回的文件描述符标识该文件,将其作为参数传送给read或write。
整数0、1、2被代换成符号常数:

STDIN_FILENO(标准输入,默认是键盘)
STDOUT_FILENO(标准输出,默认是屏幕)
STDERR_FILENO(标准错误输出,默认是屏幕)

这些常数都定义在头文件<unistd.h>中,文件描述符的范围是0~OPEN_MAX
1. open
需要包含的头文件:<sys/types.h>,<sys/stat.h>,<fcntl.h>
函数原型:int open(const str *pathname, int oflag, […, mode_t mode])
功能:打开文件 返回值:成功则返回文件描述符,出错返回-1
参数:
pathname:打开或创建文件的绝对路径
oflag:可用来说明此函数的多个选择项
oflag 参数由O_RDONLY(只读打开)、O_WRONLY(只写打开)、O_RDWR(读写打开)中的一个和下列一个或多个常数组成
O_APPEND: 追加到文件尾
O_CREAT: 若文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode,用其说明新闻件的访问权限
O_EXCL: 如果同时指定O_CREAT,而该文件又是存在的,报错;也可以测试一个文件是否存在,不存在则创建。
O_TRUNC: 如果次文件存在,而且为读写或只写成功打开,则将其长度截短为0
O_SYNC: 使每次write都等到物理I\O操作完成
mode:创建新文件的时候用来设置其权限设置
例子:

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>

    int main()
    {
        if(open("./test.txt", O_RDONLY | O_CREAT | O_EXCL, 0777) == -1)
        {
            printf("it already exists!");
            exit(-1);
        }
        else
        {
            printf("creat successfully!");
        }
        return 0;
    }  

2. read
需要包含的头文件:<unistd.h>
函数原型:
ssize_t read(int fd, void *bf, size_t count)
功能:
从打开的文件中读取数据。
返回值:
实际读到的字节数;如果读到了文件尾,返回0,出错的话返回-1;ssize_t是系统头文件中用typedef定义的数据类型,相当于signed int。
参数:
fd:要读取的文件的描述符
buf:得到的数据在内存中的位置的首地址
count:期望本次能读取到的最大字节数
3. write
需要包含的头文件:<unistd.h>
函数原型:
ssize_t write(int fd, const void *buf, size_t count)
功能:向打开的文件写数据
返回值:写入成功后返回写入的字节数,出错返回-1
参数:
fd:要写入的文件的描述符
buf:要写入文件的数据在内存中存放位置的首地址
count:期望写入的数据的最大字节数

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

    int main()
    {
        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;
    }
  1. close
    需要包含的头文件:
    unistd.h
    函数原型:
    int close(int filedes)
    功能:
    关闭一个打开的文件
    参数:
    需要关闭的文件描述符
  2. lseek
    需要包含的头文件:<sys/types.h> <unistd.h>
    函数原型:
    off_t lseek(int filesdes, off_t offset, int whence)
    功能:
    设置文件内存读写位置
    返回值:
    成功的话返回新的文件位移,出错返回-1
    off_t是系统头文件定义的数据类型,相当于signed int
    参数:
    filesdes:要写入的文件的描述符
    whence是SEEK_SET, 那么该文件的位移量设置为据文件开始处offset个字节
    whence是SEEK_CUR, 那么该文件的位移量设置为当前值加offset。offset可为正或负
    whence是SEEK_END, 那么该文件的位移量设置为文件长度加offset。offset可为正或负
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值