如何在C中最近创建的文件夹和文件中获得读取权限?

时间:2008-11-21 10:22:50

标签: c file-permissions

我已经创建了一个文件夹,在我打开该文件夹内的文件之后就写了一个文件。 碰巧之后我尝试打开文件,但我没有权限,因此我必须手动更改它。

/* str1 has tha name of the folder */
/* str the bytes I want to write in the file inside the folder*/
...

   mkdir(str1,0777);    
   if (filefd < 0) { 

      strncpy(auxstr, str, MAX_MSG + 1);
      strcat(str1,"\\");
      strcat(str1, auxstr);
      filefd = open (str1, O_RDWR | O_CREAT | O_TRUNC);

      nbytes -= (strlen(str) + 1);
      memcpy(auxstr, &str[strlen(str)+1], nbytes); 
      memcpy(str, auxstr, nbytes);

   }

   /*write to the file */
   if ((nwritten = write(filefd, str, nbytes)) != nbytes) {
       printf ("can't write on file\n");
       break;
   }

为了拥有打开创建文件的权限,我应该更改什么?

非常感谢,


:■

with = 0_CREATE I STILL存在无权读取文件的问题。 我必须手动设置它们


我已经打开了0_CREAT

open(str1,O_RDWR | O_CREAT | O_TRUNC);

4 个答案:

答案 0 :(得分:5)

您忘记了open()的第三个参数。

open()O_CREAT的第三个参数正是新创建的文件所具有的权限。

参考文献:

答案 1 :(得分:3)

CesarB试图告诉你的是你需要提供权限作为第三个参数:

filefd = open (str1, O_RDWR | O_CREAT | O_TRUNC, 0777);

请使用“添加评论”进行回复,而不是为自己的问题创建新回复。

答案 2 :(得分:3)

安全问题

该问题在目录上使用0777权限 - 不要!在正常的事件过程中,您不应该创建具有0777权限的目录。您可以考虑使用01777,就像您在/tmp上找到的那样;粗略地说,这确保从目录中删除文件的人有权修改文件。但是,您不应该授予每个人从目录中删除任何文件的权限。声称umask设置会保护你,虽然可能是正确的,但仍然不是打扰那些不知道如何安全地设置它的人的生活的好借口。使用0755或0775但不是0777。

答案之一使用许可,0777在文件上! - 不要的说法是类似于目录的说法,与添加的告诫说,在创建文件时,大多数人都没有创建可执行文件(链接器编写器将是这个一般规则的一个例外),无论生成的文件是否可执行,允许任何人修改程序仍然是一个令人震惊的坏主意。使用0644或0664;使用0666的原因很少,使用0777的原因更少。

答案 3 :(得分:0)

问题是您使用了错误的路径分隔符 - 您尝试使用反斜杠'\\'来分隔组件。这是Windows的路径分隔符。由于您似乎使用的是基于* nix的操作系统,因此应使用正斜杠'/'作为路径分隔符。事实上,即使在Windows上你也应该使用正斜杠,因为它更便携 - Windows会自动将正斜杠转换为反斜杠。

因此,您尝试在当前目录中创建名为“foo \ bar”的文件,并且由于您没有权限在当前目录中创建文件,因此可能会失败。