【问题标题】:I cannot figure out how I created this file wrong [closed]我无法弄清楚我是如何错误地创建了这个文件的[关闭]
【发布时间】:2020-09-10 23:40:53
【问题描述】:

我在读取我用 creat 系统调用在 c 中创建的文件时遇到问题。代码如下:

XXXfid = creat ("XXX", 384);
    if (XXXfid<0) {printf("Error with creat"); return 0;}
    
        writeStatus = write (XXXfid, "limp", 4);
    if (writeStatus<0) {printf("error with write"); return 0;}
    lseek(XXXfid, 0, 0);
    
    readStatus = read(XXXfid, buffer, 120);
    if (readStatus<0) {printf("error with read2"); return 0;}

所有其他命令都运行良好,无论我尝试什么(即关闭和重新打开等),我都无法读取文件。我有读写权限,是否需要给所有人读写权限?考虑到我得到的错误是 9- Bad File Descriptor,我不会这么认为。我完全不知所措,任何帮助将不胜感激 我相信八进制表示法我的许可是 600。如果有帮助,这是二进制的 110 000 000,我的 ls -l 确认这是 -rw- --- ---

【问题讨论】:

  • 除了没有creat()调用之外,这不是你之前发布的同一个问题吗?
  • 如果你没有权限,creat()会失败。
  • 请使用八进制权限。很少有程序员能一眼看出384 是什么权限。
  • creat 以只写方式打开文件。
  • 报告错误时,包括errno 和/或strerror(errno) 的输出,可能使用perror()

标签: c linux file system


【解决方案1】:

根据specification

creat(path, mode)

等价于

open(path, O_WRONLY|O_CREAT|O_TRUNC, mode)

请注意,标志包含O_WRONLY,而不是O_RDWR。这意味着您只能写入文件描述符,而不能从中读取。

如果您想读写,请改用open(),并带有适当的标志。

XXXfid = open("XXX", O_RDWR | O_CREAT | O_TRUNC, 0600);

【讨论】:

  • 非常感谢!我现在肯定更多的是杂草,因为我不仅没有被教过我在这里阅读的大部分内容,而且还被明确告知要使用 creat 我能找到的所有内容都完全过时了,但是,嘿,那就是为了教育而欠下数十万美元的债务:)。请原谅抱怨,这绝对是答案,感谢您的耐心和帮助
  • 大多数程序要么读取文件要么写入文件,读取和写入同一个 FD 是不常见的。 creat() 适用于刚刚编写文件并需要先创建文件的程序。
猜你喜欢
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 2020-08-19
  • 2014-04-03
  • 1970-01-01
相关资源
最近更新 更多