nfs 挂载上奇怪的系统调用语义
strange system call semantics on nfs mount
我正在为 C @open SuSE leap 42.2 x64 中的 open() 函数编写一个小测试程序。
不幸的是,正在创建的文件获得了 -rwxrwxrwx 权限,尽管我在执行 umask(0);
后将 0644 交给了 open() 函数
谁能告诉我,我做错了什么?
(我从一本打开的书中得到了示例代码(link)。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char** argv) {
/* Zugriffsrechte 644 */
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH;
const char *new_file;
int file_descriptor;
/* Alle Zugriffsrechte der Einschraenkungsmaske erlauben */
umask(0);
/* Argument 2 der cmd line auswerten */
if (argv[1] == NULL) {
fprintf(stderr, "usage: %s datei_zum_oeffnen\n", *argv);
return EXIT_FAILURE;
}
new_file = argv[1];
file_descriptor = open(new_file, O_WRONLY|O_EXCL|O_CREAT, 0644);
/* or var mode instead of (0644) */
if (file_descriptor == -1) {
perror("Fehler bei open ");
return EXIT_FAILURE;
}
return (EXIT_SUCCESS);
}
无论哪种方式 - 传递 0644 或变量 "mode" 作为 open() 的第三个参数都没有按预期工作,并且执行程序(作为普通用户)和传递文件名时的结果是: -rwxrwxrwx 而且:文件属于 root:root 而不是执行用户?!
我需要更改什么?
已解决。
使用 NetBeans 8.2 编译失败。
NetBeans 创建的文件夹和文件属于 root - 在我的主目录中创建相同的 .c 文件并在那里编译它完美无缺。
已添加:
NetBeans 不是 运行 root。
创建我的 workspace 的文件夹是一个 NTFS 驱动器,在引导期间以用户访问权限安装 - 但整个驱动器属于 root第一名。我 99% 确信这就是导致我对 NetBeans 创建具有错误权限的文件夹和文件的错误假设的原因。
我正在为 C @open SuSE leap 42.2 x64 中的 open() 函数编写一个小测试程序。
不幸的是,正在创建的文件获得了 -rwxrwxrwx 权限,尽管我在执行 umask(0);
后将 0644 交给了 open() 函数谁能告诉我,我做错了什么? (我从一本打开的书中得到了示例代码(link)。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char** argv) {
/* Zugriffsrechte 644 */
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH;
const char *new_file;
int file_descriptor;
/* Alle Zugriffsrechte der Einschraenkungsmaske erlauben */
umask(0);
/* Argument 2 der cmd line auswerten */
if (argv[1] == NULL) {
fprintf(stderr, "usage: %s datei_zum_oeffnen\n", *argv);
return EXIT_FAILURE;
}
new_file = argv[1];
file_descriptor = open(new_file, O_WRONLY|O_EXCL|O_CREAT, 0644);
/* or var mode instead of (0644) */
if (file_descriptor == -1) {
perror("Fehler bei open ");
return EXIT_FAILURE;
}
return (EXIT_SUCCESS);
}
无论哪种方式 - 传递 0644 或变量 "mode" 作为 open() 的第三个参数都没有按预期工作,并且执行程序(作为普通用户)和传递文件名时的结果是: -rwxrwxrwx 而且:文件属于 root:root 而不是执行用户?!
我需要更改什么?
已解决。
使用 NetBeans 8.2 编译失败。 NetBeans 创建的文件夹和文件属于 root - 在我的主目录中创建相同的 .c 文件并在那里编译它完美无缺。
已添加: NetBeans 不是 运行 root。 创建我的 workspace 的文件夹是一个 NTFS 驱动器,在引导期间以用户访问权限安装 - 但整个驱动器属于 root第一名。我 99% 确信这就是导致我对 NetBeans 创建具有错误权限的文件夹和文件的错误假设的原因。