码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux操作文件的底层系统调用


    目录

    1.概述

    2.open的介绍

    3.write 的介绍

    4.read

    5.close的介绍

    6.文件描述符


    1.概述

    C语言操作文件的几个库函数:fopen,fread,fwrite,fclose; 系统调用:open,read,write,close; 系统调用方法实现在内核中;(陷入内核,切换到内核)

    image-20230915144920796.png

    image-20230915144943386.png



    2.open的介绍

    open重载:两个参数用于打开一个已经存在的文件;三个参数的用于新建一个文件,并设置访问权限;

    pathname:文件和路径和名称;

    flags:文件的打开方式;

    mode:文件的权限,如"0600";

    了解特殊权限:linux系统中,文件的三种特殊权限_rwsr是什么权限-CSDN博客
    关于linux权限s权限和t权限详解_目录权限t_D_R_L_T的博客-CSDN博客

    open的返回值为int,称为文件描述符;

    flags的打开标志,如:

    O_WRONLY:只写打开;

    O_RDONLY:只读打开;

    O_RDWR:读写方式打开;

    O_CREAT:文件不存在则创建;

    O_APPEND:文件末尾追加;

    O_TRUNC:清空文件,重新写入;

    open的返回值是int,称之为"文件描述符";每打开一个文件,我们就会得到一个文件描述符,这个文件描述符是一个整型,通过文件描述符就可以对文件进行读写这样的操作.open失败返回-1,成功返回一个大于等于0的值;  0,1,2是默认打开的;

    0:标准输入
    1:标准输出
    2:标准错误输出


    3.write 的介绍

    fd:对应打开的文件描述符

    buf:写入的文件内容;

    count:要写入多少个字节;

    返回值:ssize_t:实际写入了多少个字节;

    4.read

    fd:对应打开的文件描述符;

    buf:把文件内容读取到一块空间buf中;

    count:期望要读取的字节数; 返回值:

    ssize_t:实际读取了多少个字节;

    5.close的介绍

    关闭文件描述符;

    6.文件描述符

    文件打开以后,内核给文件的一个编号;(>0的整数)

    0:标准输入;

    1:标准输出;

    2:标准错误输出;

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. write(1,"hello",5);
    7. exit(0);
    8. }
    9. //往屏幕(标准输出)写入hello 5个字节
    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. /*
    7. int main()
    8. {
    9. int fd=open("file.txt",O_WRONLY|O_CREAT,0600);//创建新的文件需定义其权限,3个参数
    10. assert(fd!=-1);
    11. printf("fd=%d\n",fd);//自定义文件标识符fd为最小未被占用的一项,系统已占用0 1 2
    12. write(fd,"hello",5);
    13. close(fd);
    14. exit(0);
    15. }
    16. */
    17. int main()
    18. {
    19. int fd=open("file.txt",O_RDONLY);//文件已经存在,不用定义权限
    20. assert(fd!=-1);
    21. char buff[128]={0};
    22. int n=read(fd,buff,127);
    23. printf("n=%d,buff=%s\n",n,buff);
    24. close(fd);
    25. exit(0);
    26. }

    利用读写复制文件

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. int main()
    7. {
    8. int fr=open("file.txt",O_RDONLY);
    9. int fw=open("file2.txt",O_RDWR|O_CREAT,0600);
    10. assert(fr!=-1||fw!=-1);
    11. char buff[8]={0};
    12. int len;
    13. while((len=read(fr,buff,8))>0)
    14. {
    15. write(fw,buff,len);
    16. }
    17. close(fr);
    18. close(fw);
    19. exit(0);
    20. }

  • 相关阅读:
    【LeetCode】【数组】【二分】4. 寻找两个正序数组的中位数 Java实现(四种方案,目前写了两种,还在更新)
    MySQL8实现主从备份
    Vue框架中监测数组变化的方法
    hdu 3549 a flow problem 的多种解法
    稀土工业废水除钙镁的方法
    Highcharts 标示区曲线图;Highcharts 对数图表;Highcharts 时间间隔图表
    14:00面试,14:06就出来了,问的问题有点变态。。。
    获取本地缓存数据修改后,本地缓存中的值也修改问题
    【面试经典150 | 数组】删除有序数组中的重复项
    Linux下整合Apache和WebLogic
  • 原文地址:https://blog.csdn.net/m0_62689947/article/details/134497128
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号