我已经创建了一个文件夹,在我打开该文件夹内的文件之后就写了一个文件。 碰巧之后我尝试打开文件,但我没有权限,因此我必须手动更改它。
/* 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);
答案 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”的文件,并且由于您没有权限在当前目录中创建文件,因此可能会失败。