C 无法在/usr/share中创建目录

C 无法在/usr/share中创建目录,c,linux,permissions,C,Linux,Permissions,我听说在linux的/usr/share/application文件夹中存储程序相关文件是一种传统做法。所以我试着在我的c程序中用一个名为load_interface_files的函数来实现它。我不确定这是否是一种好的做法,我听说过为此类问题创建配置文件 无论如何,下面是我为在/usr/share中创建目录而编写的代码 运行代码后,我看不到错误消息,也看不到创建的目录。但是,当我对我的项目目录路径尝试同样的方法时,它工作得很好。我不确定,但我认为这与root权限有关,以便写入/usr/share

我听说在linux的/usr/share/application文件夹中存储程序相关文件是一种传统做法。所以我试着在我的c程序中用一个名为load_interface_files的函数来实现它。我不确定这是否是一种好的做法,我听说过为此类问题创建配置文件

无论如何,下面是我为在/usr/share中创建目录而编写的代码

运行代码后,我看不到错误消息,也看不到创建的目录。但是,当我对我的项目目录路径尝试同样的方法时,它工作得很好。我不确定,但我认为这与root权限有关,以便写入/usr/share,但我不知道如何解决这个问题

一些调试信息:

$ ls -ld /usr/share
drwxr-xr-x 314 root root 12288 Dec  1 07:39 /usr/share
使用ls-ld/usr/share查看目录上的权限,如果没有-d,您将获得内容及其权限

使用如下代码:

if (mkdir("/usr/share/test", S_IRWXU) != 0) {
    perror("mkdir");
    exit(1); }
测试mkdir调用的成功/失败,打印失败原因,并在失败时退出。很可能,你会看到

mkdir: Permission denied

这意味着您没有对包含目录的写入权限。

在运行big-sur的mac上,我也没有对/usr/share的写入权限,只是为了提供更多数据,所以这肯定是因为您没有写入权限。这应该解释一下:对于drwxr-xr-x 314 root root 12288 Dec 1 07:39/usr/share,除非您是root用户,否则无法更改此目录。但是应用程序如何将其文件传输到usr/share?如果我没弄错的话,我在电脑上看到的大多数应用程序文件在安装时都会在那里找到它们的文件。他们有root权限吗?怎么做?@Vahan一个程序不能轻易地提升它的权限。通常的做法是出错并要求用户使用sudo运行程序。通常,程序的安装程序将具有root priv,以便安装程序及其支持文件。程序本身不会,因为它只需要读取这些文件,/usr/share是每个人都可以读取的。通常,安装程序会弹出一个对话框,询问管理员密码,以便获得根权限。
if (mkdir("/usr/share/test", S_IRWXU) != 0) {
    perror("mkdir");
    exit(1); }
mkdir: Permission denied