【发布时间】:2018-04-26 15:55:31
【问题描述】:
我正在尝试在 C++ 函数中使用 C 中的函数。
这个函数的一部分涉及到使用 fopen:
FILE * fd = NULL;
fd = fopen("/sys/platform/dacc/config","w");
if(!fd){
perror("Platform configuration failed:");
return -1;
}
fwrite(conf,1,4096,fd);
fclose(fd);
return 0;
我有一些代码在 C 中执行此操作,它按我想要的方式工作。我想使用 Qt 将此操作连接到一个按钮,在此处询问有关它的问题后,我能够使用“extern C”调用该函数以将其包含到我的 c++ 代码中。
现在我在 C++ 中运行了相同的代码,但我无法再打开有问题的文件。相反,我现在得到 fopen 返回的 null,并且 perror 给出了消息
Platform configuration failed: Permission Denied
这让我很困惑,因为我的 C 测试代码是从没有任何提升的终端运行的,所以我没有权限应该是任何问题。
运行 C 代码的程序可用的权限与包括 C 代码在内的 C++ 程序可用的权限有区别吗?
【问题讨论】:
-
不,没有。相关权限基于您的用户帐户,这在两种情况下都应该是相同的,并且可能是 SELinux 之类的东西,我希望做同样的事情。
-
不,没有区别。 Perl、Java、Python、PHP、Haskell、...
-
不,我怀疑这与 C 与 C++ 有什么关系(除了代码中的错误)。
-
我希望
/sys中的某些内容只能由 root 写入。您是否以 root 身份运行 C++ 应用程序? -
在
strace下运行程序,看看失败的系统调用是否真的是/sys/platform/dacc/config的open。