嵌入式Linux学习笔记:文件IO

嵌入式技术

1372人已加入

描述

在linux中一切都叫文件,比如普通文件,设备文件,管道。在应用层,可以用一套文件IO读写文件,其实就是一套能够操作文件的系统调用。文件IO又称为不带缓存的IO,因为文件IO可以直接系统调用陷进内核去执行相应的代码和数据。与之差不多的还有标准IO。基本有:打开、读取、写入、关闭,分别是: open()、read()、write()、close().值得一提的是,文件IO都是基于文件描述符来操作的。

文件描述符

文件描述符是类似文件的唯一ID的整数。每个(程序)进程都包含3个默认的文件:标准输入(STDIN),标准输出(STDOUT),标准错误(STDERR)。分别对应的文件描述符:0、1、2.默认情况下,标准输入连接键盘,标准输出和标准错误连接终端。如果打开了两个文件,那么这两个文件的文件描述符就在2基础上顺序增加。总之,一个文件描述符对应一个文件。

一、打开文件

在对文件进行读写操作之前,必须先打开一个文件,得到这个文件的文件描述符。按照flags标志打开pathname的文件,如果是新建一个文件则需要用到mode,返回这个文件的文件描述符。打开失败返回-1,并设置errno。

指针

1.open的flags参数

必须选定O_RDONLY(只读)、O_WRONLY(只写)、O_RDWR(读写)中的一个,互斥 。

除此之外还有以下flags可以与上述flags 用 | 一起用:

O_APPEND : 在每次读写,文件位置指针都被置于文件末尾,保留文件原有内容基础上读写

O_CREAT : 如果pathname不存在时,由内核自动创建。文件存在时候,通常和O_EXCL连用防止竞争创建文件,用此参数时候一定要用上mode参数。

O_EXCL :与O_CREAT连用

O_TRUNC : 只对可写普通文件有效,当普通文件存在时候,把文件内容清空。对于FIFO或者终端设备,该参数被忽略

剩下的一个flags具体用到的时候再来总结。

2.open的mode参数

当使用O_CREAT的时候需要设置文件的权限,比如777。但是(mode& ~umask)才是最终的权限。

umask是系统掩码,用umask可以看到

二、读文件

read()系统调用从fd所指的文件里读取至多count个字节到buf中,返回成功读取的字节数。

特别需要注意的是:open之后文件位置指针指向文件开头,read完之后文件位置指针会移动,如果下一步需要写操作时候,一定要注意这个文件位置指针的位置已经被移动了!

指针

1.read的返回值

返回0 . 标志EOF,文件位置指针已经在文件末尾,没有可读入的数据。

返回-1,可以查看errno的值进一步确定何种调用错误

三、写文件

write()系统调用将buf的数据写入到fd指向的文件中,写入count个,返回成功写入的字节数,并更新文件位置指针。调用错误时设置errno

如果是字符设备,那么文件位置指针总是从开头写

指针

四、关闭文件

不使用文件后都要关闭文件

指针

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分