【问题标题】:Open file in linux. I don't want to create a write-protected file在linux中打开文件。我不想创建写保护文件
【发布时间】:2014-10-24 08:32:09
【问题描述】:

我在 Linux 中创建文件时遇到问题,它使我的文件受到写保护,我不知道为什么会这样。

void fileOperation::openFileWrite(char x, off_t s)
{
  int fd;
  char c[2] = {x};

  fd = open("/home/stud/txtFile", O_CREAT | O_WRONLY);  //open file
  if(fd == -1)
      cout << "can't open file" << endl;
  else
  {
      lseek(fd, s, SEEK_SET);//seek at first byte
      write(fd, (void*)&c, 2);//write to file
  }
  syncfs(fd);
  ::close(fd);
}

【问题讨论】:

  • 你应该在失败时使用perror...

标签: c++ linux unistd.h


【解决方案1】:

您必须使用设置了写入权限的附加参数(您的默认权限可能会关闭写入权限)

 fd = open("/home/stud/txtFile", O_CREAT | O_WRONLY, 0666);//open file

0666 是一个八进制数,即 6 中的每一个对应三个权限位

6 = rw
7 = rwx

【讨论】:

  • 非常感谢它解决了这个问题。
  • 您必须用@ 符号标记他们的名字才能引起他们的注意,例如:@LocDaiLe
  • @LocDaiLe 如果答案解决了您的问题,请务必将其标记为正确(点击答案旁边的绿色对勾)
【解决方案2】:

您可能有一个限制性的umaskopen 调用只会尝试创建模式为 0666 的文件,但用户的 umask 通常会删除其中许多权限位。

【讨论】:

    猜你喜欢
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    相关资源
    最近更新 更多