• 文件IO,open函数,O_CREAT的失误——默认权限,Linux文件的特殊权限T。


    0. 前言

            哎呀,说着加快更新频率的,结果。推荐一个电影吧《憨豆先生的大灾难》。


    1. open函数

            看下说明。

            有两种方式,区别就是带不带最后的参数mode,这个理解为权限的意思。

            那什么时候用哪个呢?今天我就遇到了这个问题。其实很简单的一件事情,如果你使用这个函数去创建本来不存在的文件,那么你最好是带上mode,如果你只是打开文件,简单的读写,与文件的存在与否没有关系的话,第一种是可以满足需求的。

            那么问题来了,如果我是想创建文件,但是我没有带mode,那么它创建的文件的权限默认是什么样的呢?

            看下我今天遇到的错误。先看下我写的简单示例源码。

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. const char filepath[]="路径/data.txt";
    9. int main(void)
    10. {
    11. int fd;
    12. fd = open(filepath,O_CREAT | O_RDWR | O_APPEND);
    13. int tag = write(fd,"123",3);
    14. close(fd);
    15. return 0;
    16. }

      当我编译的时候是没有报错的,运行可执行文件也没有报错

             但是当我使用cat指令时出现权限不够的问题。

             我就有点纳闷了,执行倒是可以执行,Linux的cat却不行。加上sudo是OK的。还有,当我多次执行可执行文件的时候,论说应该多次写操作,对吧。但是,却没有写成功。

             执行可以执行,写倒是没有写进去,why?

             我还发现一个问题,当我想要删掉时,会提示我。


            所以,这就出现了O_CREAT创建文件的默认权限的问题。看下权限。

             发现了什么,data.txt是T权限。T权限是什么鬼?

            网上搜了一大圈,没有我满意的,只知道是特殊权限。大佬可以评论指导一下。


            修改后,加上权限。

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. const char filepath[]="/home/lhx/lhx/LinuxC/data.txt";
    9. int main(void)
    10. {
    11. int fd;
    12. fd = open(filepath,O_CREAT | O_RDWR | O_APPEND,0777);
    13. int tag = write(fd,"123",3);
    14. close(fd);
    15. return 0;
    16. }

            解决。


    2. 总结

            这个问题没有得到解决,我后面会重新补上的。而且这篇文章好像有点跑题。dbq...

            总之,大家写程序的时候还是尽量要符合规定,不然对吧。哈哈哈。

  • 相关阅读:
    8月19日PMP出成绩时间,公布了!
    按照正规的软件开发流程,项目原型评审是全程对着页面评审吗
    能被整除的数
    oracle学习22-ora-01691和修改密码过期时间
    vue3对vuex的使用(对比vue2)
    2019中原银行java实习面试
    SpringCloud——OpenFeign(简介、快速入门、手写Feign)
    C# 第七章『I/O数据流』◆第4节:数据流—FileStream 类
    银河麒麟x86版、银河麒麟arm版操作系统编译zlmediakit
    开发 Chrome 扩展 之 Hello World 心血来潮
  • 原文地址:https://blog.csdn.net/weixin_43920383/article/details/127541116