嵌入式Linux应用开发 -- 文件I/O基础

本文介绍了Linux系统中文件输入/输出的基础知识,重点讲解了文件I/O的四个核心函数:open用于打开或创建文件,read用于读取文件内容,write用于写入文件,而lseek则用于重新定位文件读写位置。通过open函数获取文件描述符,并利用该描述符进行后续的读写操作。文章还详细阐述了各个函数的参数、返回值及注意事项,帮助读者理解文件I/O的基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件I/O简介

        文件I/O就是文件读写,Linux下一切皆文件,熟练掌握文件I/O非常有必要。

        文件I/O“四大金刚”:openreadwritelseek

        文件描述符:调用open可获得文件对应的文件描述符fd,调用read/write/lseek都需要用到文件描述符。

函数名

open

read

write

lseek

作用

打开/创建文件

读文件

写文件

重新定位读写位置

 文件I/O原理图

打开/创建文件: 

        int open(const char *pathname, int flags);
        int open(const char *path, int oflags,mode_t mode);

        需要包含的头文件:<sys/types.h>、<sys/stat.h>、<fcntl.h>

        返回值:成功返回文件描述符,失败返回-1

参数

path

oflags

mode

说明

路径名或者文件名,使用绝对路径

配置标志位,可同时用多个标志位

oflags包含O_CREATE时必须配置,用来设定文件的访问权限

可选参数

/

O_RDONLY:只读打开

O_WRONLY:只写打开

O_ROWR:读写打开

O_CREATE:如果文件不存在,创建文件

O_EXCL:搭配O_CREATE使用,检查文件是否存在,存在的话返回错误

S_IRUSR:文件所有者可读

S_IWUSR文件所有者可写

S_IXUSR文件所有者可执行

S_IRWXU文件所有者可++执行

S_IRGRP:文件所有者的同组者可读

S_IWGRP:文件所有者的同组者可写

S_IXGRP:文件所有者的同组者可执行

S_IRWXG:文件所有者的同组者可读++执行

S_IROTH:其他用户可读

S_IWOTH:其他用户可写

S_IXOTH:其他用户可执行

S_IRWXO:其他用户可读++执行

读取文件: 

        ssize_t read(int fildes, void *buf, size_t nbyte);

        需要包含的头文件:<unistd.h>

参数

fildes

buf

nbyte

说明

要读取的文件的文件描述符

指向存放读取到的数据的缓冲区

要读取的字节数

        返回值:成功返回读取的字节数,失败返回-1

        备注1:调用成功返回的读取到的字节数不一定等于nbyte,比如已经读到文件末尾

        备注2:读取普通文件时,默认从文件开头开始读取,每读取一个字节读写位置向后移一个字节

写入文件:

        ssize_t write(int fildes, const void *buf, size_t nbyte);

        需要包含的头文件:<unistd.h>

参数

fildes

buf

nbyte

说明

要写入的文件的文件描述符

指向要写入的数据的缓冲区

要写入的字节数

        返回值:成功返回写入的字节数,失败返回-1

        备注:写入普通文件时,默认从文件开头开始写入,每写入一个字节读写位置向后移一个字节

读写位置重定位: 

        off_t lseek(int fildes, off_t offset, int whence);

        需要包含的头文件:<unistd.h>

参数

fildes

offset

whence

说明

要重定位读写位置的文件的文件描述符

偏移量,字节为单位,正值代表向前偏移,负值代表向后偏移

重定位的起始位置

可选参数

/

/

SEEK_SET:文件开头

SEEK_CUR:当前读写位置

SEEK_END:文件末尾

        返回值:成功返回重定位后的读写位置,失败返回-1

        备注:重定位后的位置 = whence + offset

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值