![2f7ed0f84df2087c1521a7b6d5b1916d.gif](https://i-blog.csdnimg.cn/blog_migrate/fc0b942b5fc56b57ba7f961c6cd1eb6a.gif)
ID:嵌入式情报局
作者:情报小哥
1文件操作实战
上篇文章跟大家介绍了Linux系统调用的文件操作API函数,其实跟C语言中的文件读取操作差不多,所以今天小哥就利用那些API在Linux操作系统下面进行一些实战演示。
2文件操作演示
1、创建并写一个文件
解读一下
该程序中需要使用到3个函数open、write和close,一般对于他们的使用都会使用到相应的头文件,可以使用上一节介绍的"man 2 函数名"来进行查找。
比如使用open函数一般需要包含如下头文件,同时相关的参数也会在下面给出解释 :
其中open函数的第二个参数表示打开的标志,常用的如下:
O_RDONLY:只读方式打开
O_WRONLY:只写方式打开
O_RDWR:可读可写方式打开
O_APPEND :表示追加方式打开,在文件末尾继续写入
O_CREAT :表示如果指定文件不存在,则创建这个文件
O_NONBLOCK :如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式。
其中open函数的第三个参数表示文件访问的初始值,在第二参数为create的时候有效,且与当前进程的用户掩码umask共同决定,常用的如下:
S_IRUSR /S_IREAD : 00400权限,代表该文件所有者具有可读取的权限。
S_IWUSR /S_IWRITE : 00200 权限,代表该文件所有者具有可写入的权限。
S_IXUSR /S_IEXEC : 00100 权限,代表该文件所有者具有可执行的权限。
实验现象
上面的程序通过创建并打开文件,写入字符串并关闭。
进一步查看所创建的文件,得到正确结果。
2、读取文件内容
解读一下
上面代码以只读方式打开文件,并且读取里面的数据放到Buff里面打印输出,应该比较简单。
实验现象
实验现象如下,并且成功打印了之前写入到文本中的数据。
3、文件定位
解读一下
当最开始打开文件时,默认文件读写指针是指向第一个字节处,其后续的写入或者读取数据都是在该文件指针处开始进行操作。
通过调用lseek函数我们可以重新定位文件读写指针,从而实现在文件的任意位置追加数据内容等。
下面是lseek系统调用的解析:
参数fd : 要操作的文件描述符
参数offset : 相对于whence(基准)的偏移量(可正可负)
参数whence : 分别为SEEK_SET(文件开头)、SEEK_CUR(文件指针当前位置)、SEEK_END(文件末尾)
返回值:文件读写指针距文件开头的字节大小,出错,返回-1
实验现象
上面的实验通过使用SEEK_END文件末尾并且偏移0来使用,那么最终返回文件指针相对文件开始字节个数,从而达到计算文件长度的目的,其输出结果如下图所示:
3最后
这里小哥就介绍了Linux系统调用文件操作几个非常重要的API,还有其他API比如access进行访问权限的访问等等,大家可以通过查找相关手册学习了解,或者下次使用到了具体查阅系统手册,今天就到这里了,下期见!
我是情报小哥,一个90后嵌入式自学玩家!
![5e8c2802068901af4a2691f06cf04369.gif](https://i-blog.csdnimg.cn/blog_migrate/ce446d356ddc55a8e1735f815d10b072.gif)
长按前往图中包含的公众号关注