我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux之操作文件的系统调用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux之操作文件的系统调用

目录
  • 1.打开文件
    • 参数介绍
  • 2. 读文yXLlS
    • 3. 写文件
      • 4.关闭
        • 分析题
          • 练习题
            • 系统调用和库函数的区别

              需要引入的头文件:

              
              #inlcude<unistd.h>
              

              1.打开文件

              打开一个已存在的文件

              
              int open(const char *pathname, int flags);
              

              新建一个文件并创建权限

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

              参数介绍

              pathname:将要打开的文件路径和名称

              flags:打开标志

              标志介绍:

              
              The  argument  flags  must  include  one of the following access modes:
              O_RDONLY, O_WRONLY, or O_RDWR.  These request opening  the  file  read-
              only, write-only, or read/write, respectively.
              

              O_RDONLY 只读打开

              O_RDWR 读写打开

              O_CREAT 文件不存在则创建

              O_APPEND 文件末尾追加

              O_TRUNC 清空文件,重新写入 mode

              
              The following symbolic constants are provided for mode:
              
              S_IRWXU  00700 user (file owner) has read,  write,  and  execute permission
                                     
              
              S_IRUSR  00400 user has read permission
              
              S_IWUSR  00200 user has write permission
              
              S_IXUSR  00100 user has execute permission
              
              S_IRWXG  00070 group has read, write, and execute permission
              
              S_IRGRP  00040 group has read permission
              
              S_IWGRP  00020 group has write permission
              
              S_IXGRP  00010 group has execute permission
              
              S_IRWXO  00007 others have read, write, and execute permission
              
              S_IROTH  00004 others have read permission
              
              S_IWOTH  00002 others have write permission
              
              S_IXOTH  00001 others have execute permission
              

              返回值:文件描述符

              2. 读文件

              
              ssize_t read(int fd, void *buf, size_t count);
              

              参数介绍

              fd:对应打开的文件描述符buf : 存放数据的空间count: 计划一次从文件中读多少字节数据返回值: 实际读到的字节数

              3. 写文件

              
              ssize_t write(int fd, const void *buf, size_t count);

              参数介绍:

              fd :对应打开的文件描述符buf:存放待写入的数据count:计划一次向文件中写入多少数据

              4.关闭

              
              int close(int fd);

              fd :对应的文件描述符

              分析题

              如果父进程先打开一个文件,fork 后子进程是否可以共享使用?

              文件内容

              在这里插入图片描述

              代码

              
              #include<stdio.h>
              #include<unistd.h>
              #include<assert.h>
              #include<fcntl.h>
              #include<stdlib.h>
              
              int main()
              {
                  char buff[128] = {0};
              
                  int fd = open("myfile.txt", O_RDONLY);
              
                  pid_t pid = fork();
                  assert(pid != -1);
              
                  if (pid == 0)
                  {
                      read(fd, buff, 1);
                      printf("child buff = %s\n", buff);
              
                      sleep(1);
                      read(fd, buff, 1);
                      printf("child buff = %s\n", buff);
              
                  }
                  else
                  {
                      read(fd, buff, 1);
                      printf("parent buff = %s\n", buff);
              
                      sleep(1);
                      read(fd, buff, 1);
                      printf("parent buff = %s\n", buff);
                  }
              
                  close(fd);
              
                  exit(0);
              }
              
              

              运行结果:

              在这里插入图片描述

              结论

              由于 fork 创建的子进程的 PCB 是拷贝父进程的,子进程的 PCB 中的文件表指向打开文件的指针只是拷贝了父进程 PCB 中的值,所以父子进程共享父进程 fork 之前打开的所有文件描述符。

              在这里插入图片描述

              练习题

              完成对一个文件的复制(类似命令:cp)

              原文件内容为:

              在这里插入图片描述

              代码:

              
              #include<stdio.h>
              #include<unistd.h>
              #include<fcntl.h>
              #include<stdlib.h>
              #include<assert.h>
              
              int main(void)
              {
                  char buff[128] = {0};
              
                  int fdr = open("myfile.txt", O_RDONLY);
                  assert(fdr != -1);
              
                  int fdw = open("newfile.txt", O_WRONLY | O_CREAT, 0600);
                  assert(fdw != -1);
              
                  int n = 0;
                  while (n = read(fdr, buff, 128) > 0)
                  {
                      write(fdw, buff, n);
                  }
              
                  close(fdr);
                  close(fdw);
                  
                  exit(0);
              }
              
              

              运行示例:

              可以看到newfile.txt创建成功

              在这里插入图片描述

              系统调用和库函数的区别

              区别: 系统调用的实现在内核中,属于内核空间,库函数的实现在函数库中,属于用户空间。

              系统调用执行过程:

              在这里插入图片描述

              到此这篇关于linux之操作文件的系统调用的文章就介绍到这了,更多相关Linux文件系统调用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

              免责声明:

              ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

              ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

              Linux之操作文件的系统调用

              下载Word文档到电脑,方便收藏和打印~

              下载Word文档

              猜你喜欢

              Linux之操作文件的系统调用

              目录1.打开文件参数介绍2. 读文yXLlS件3. 写文件4.关闭分析题练习题系统调用和库函数的区别需要引入的头文件:#inlcude<unistd.h>1.打开文件 打开一个已存在的文件int open(const char
              2022-06-04

              Linux操作文件系统怎么调用

              本篇内容介绍了“Linux操作文件系统怎么调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需要引入的头文件:#inlcude
              2023-06-21

              Linux操作文件的底层系统怎么调用

              这篇文章主要介绍了Linux操作文件的底层系统怎么调用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux操作文件的底层系统怎么调用文章都会有所收获,下面我们一起来看看吧。linux操作系统奉行一切皆文件的
              2023-07-05

              Linux操作文件的底层系统如何调用

              这篇文章主要介绍“Linux操作文件的底层系统如何调用”,在日常操作中,相信很多人在Linux操作文件的底层系统如何调用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux操作文件的底层系统如何调用”的疑
              2023-07-06

              Linux 文件系统的操作实现

              此读书笔记比较主要记录文件系统的相关操作。 磁盘与目录的容量磁盘的整体数据是在superblock块中,但是每个个别文件的容量则在inode当中记载,常用来显示磁盘使用量的两个命令 df: 列出文件系统的整体磁盘使用量 du: 评估文件系统
              2022-06-04

              详谈Node.js之操作文件系统

              1. 同步方法与异步方法 在Node.js中,使用fs模块来实现所有有关文件及目录的创建、写入及删除操作。,在fs模块中,所有对文件及目录的操作都可以使用同步与异步这两种方法。这两者区别是:同步方法立即返回操作结果,在使用同步方法执行的操作
              2022-06-04

              文件系统大揭秘:操作系统中文件的奇妙之旅

              文件系统是操作系统的重要组成部分,负责管理和组织存储在计算机上的数据。本文将揭秘文件系统的工作原理,帮助您了解文件的奇妙之旅。
              文件系统大揭秘:操作系统中文件的奇妙之旅
              2024-02-11

              操作系统中的文件操作:揭秘文件系统的奥秘

              文件操作:揭开操作系统中文件系统的秘密
              操作系统中的文件操作:揭秘文件系统的奥秘
              2024-02-29

              Linux操作系统下隐藏文件的方法

              这篇文章主要讲解了“Linux操作系统下隐藏文件的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux操作系统下隐藏文件的方法”吧!一. 概述 目前通用的隐藏文件方法还是hooksy
              2023-06-17

              Linux操作系统文件系统的安装和卸载方法

              这篇文章主要介绍“Linux操作系统文件系统的安装和卸载方法”,在日常操作中,相信很多人在Linux操作系统文件系统的安装和卸载方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux操作系统文件系统的安
              2023-06-17

              Linux运维之json文件操作

              python脚本中读取配置文件通常将配置文件放在json格式的文件中,然后做后续的处理,那么在linux服务器上编辑和读取json文件有什么技巧呢?来看一下吧,
              Linux运维之json文件操作
              2024-04-23

              文件系统之谜:揭秘操作系统对文件管理的幕后故事

              文件系统是操作系统中最重要的组成部分之一,它负责管理储存设备上的数据,以便应用程序能够访问和使用它们。在本文中,我们将揭秘操作系统对文件管理的幕后故事,了解文件系统是如何工作的,以及它是如何影响应用程序性能的。
              文件系统之谜:揭秘操作系统对文件管理的幕后故事
              2024-02-11

              揭秘操作系统的文件操作:简化文件管理

              文件操作在操作系统中的核心作用
              揭秘操作系统的文件操作:简化文件管理
              2024-02-29

              Linux文件系统的目录和操作有哪些

              这篇文章主要讲解了“Linux文件系统的目录和操作有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux文件系统的目录和操作有哪些”吧!内存使用部分目录说明/binbin是Binar
              2023-06-29

              编程热搜

              目录