【问题标题】:Difference in permission between "C" and "extern C"“C”和“extern C”之间的权限差异
【发布时间】: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/configopen

标签: c++ c qt


【解决方案1】:

使用“extern C”关键字时,应该权限没有区别。这只是防止编译器破坏函数的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2014-07-31
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多