栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文件I/O简介

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

        文件I/O“四大金刚”:open、read、write、lseek。

        文件描述符:调用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);

        需要包含的头文件:、、

        返回值:成功返回文件描述符,失败返回-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);

        需要包含的头文件:

参数

fildes

buf

nbyte

说明

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

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

要读取的字节数

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

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

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

写入文件:

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

        需要包含的头文件:

参数

fildes

buf

nbyte

说明

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

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

要写入的字节数

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

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

读写位置重定位: 

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

        需要包含的头文件:

参数

fildes

offset

whence

说明

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

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

重定位的起始位置

可选参数

/

/

SEEK_SET:文件开头

SEEK_CUR:当前读写位置

SEEK_END:文件末尾

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/945303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号