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

有两种方式,区别就是带不带最后的参数mode,这个理解为权限的意思。
那什么时候用哪个呢?今天我就遇到了这个问题。其实很简单的一件事情,如果你使用这个函数去创建本来不存在的文件,那么你最好是带上mode,如果你只是打开文件,简单的读写,与文件的存在与否没有关系的话,第一种是可以满足需求的。
那么问题来了,如果我是想创建文件,但是我没有带mode,那么它创建的文件的权限默认是什么样的呢?
看下我今天遇到的错误。先看下我写的简单示例源码。
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- const char filepath[]="路径/data.txt";
-
-
- int main(void)
- {
- int fd;
- fd = open(filepath,O_CREAT | O_RDWR | O_APPEND);
- int tag = write(fd,"123",3);
- close(fd);
- return 0;
-
- }
当我编译的时候是没有报错的,运行可执行文件也没有报错

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

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

执行可以执行,写倒是没有写进去,why?
我还发现一个问题,当我想要删掉时,会提示我。

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

发现了什么,data.txt是T权限。T权限是什么鬼?
网上搜了一大圈,没有我满意的,只知道是特殊权限。大佬可以评论指导一下。
修改后,加上权限。
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- const char filepath[]="/home/lhx/lhx/LinuxC/data.txt";
-
-
- int main(void)
- {
- int fd;
- fd = open(filepath,O_CREAT | O_RDWR | O_APPEND,0777);
- int tag = write(fd,"123",3);
- close(fd);
- return 0;
-
- }
解决。

这个问题没有得到解决,我后面会重新补上的。而且这篇文章好像有点跑题。dbq...
总之,大家写程序的时候还是尽量要符合规定,不然对吧。哈哈哈。