暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux应用编程之文件操作 - 系统调用篇(下)

嵌入式情报局 2020-10-17
207

关注、星标公众号,直达精彩内容

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后嵌入式自学玩家!



长按前往图中包含的公众号关注

文章转载自嵌入式情报局,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论