Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
fchmod()无法在C中正确应用文件权限_C_Linux_Filesystems - Fatal编程技术网

fchmod()无法在C中正确应用文件权限

fchmod()无法在C中正确应用文件权限,c,linux,filesystems,C,Linux,Filesystems,这是我试图对文件应用权限的部分代码 fd=fopen(file_name,"wb"); fchmod(fd,(mode_t)perm); 其中perm是一个整数。例:644或755 我尝试了不使用模式强制转换。当您需要应用文件权限时,您需要使用八进制值!使用整数值时,它无效 试试这个- int perm = 0644; // or use mode_t perm = 0644; fd=fopen(file_name,"wb"); fchmod(fd,perm); 当您需要应用文件权限时,

这是我试图对文件应用权限的部分代码

fd=fopen(file_name,"wb");
fchmod(fd,(mode_t)perm);
其中perm是一个整数。例:644或755
我尝试了不使用模式强制转换。

当您需要应用文件权限时,您需要使用八进制值!使用整数值时,它无效

试试这个-

int perm = 0644; // or use mode_t perm = 0644;

fd=fopen(file_name,"wb"); 
fchmod(fd,perm);

当您需要应用文件权限时,您需要使用八进制值!使用整数值时,它无效

试试这个-

int perm = 0644; // or use mode_t perm = 0644;

fd=fopen(file_name,"wb"); 
fchmod(fd,perm);

当您需要应用文件权限时,您需要使用八进制值!使用整数值时,它无效

试试这个-

int perm = 0644; // or use mode_t perm = 0644;

fd=fopen(file_name,"wb"); 
fchmod(fd,perm);

当您需要应用文件权限时,您需要使用八进制值!使用整数值时,它无效

试试这个-

int perm = 0644; // or use mode_t perm = 0644;

fd=fopen(file_name,"wb"); 
fchmod(fd,perm);

这应该是
0644
0755
。这些都是八进制常数,所以它们才有意义

0644表示对业主的读/写(6);只读组和世界


0755表示对业主的读/写/执行(7);读取/执行到组和世界。

应该是
0644
0755
。这些都是八进制常数,所以它们才有意义

0644表示对业主的读/写(6);只读组和世界


0755表示对业主的读/写/执行(7);读取/执行到组和世界。

应该是
0644
0755
。这些都是八进制常数,所以它们才有意义

0644表示对业主的读/写(6);只读组和世界


0755表示对业主的读/写/执行(7);读取/执行到组和世界。

应该是
0644
0755
。这些都是八进制常数,所以它们才有意义

0644表示对业主的读/写(6);只读组和世界


0755表示对业主的读/写/执行(7);读取/执行到group and world。

除了前面提到的使用八进制常量的问题外,您调用的
fchmod
不正确-原型是:

 int
 fchmod(int fildes, mode_t mode);
        ^^^^^^^^^^
但是您正在为第一个参数传递一个
文件*
(由
fopen
返回)!使用
open
而不是
fopen
,这样您就可以使用
int-fildes
进行播放,或者使用
chmod
作为文件名

这里有两条重要的带回家的信息:

  • 您应该始终启用编译器警告,并注意任何警告。如果您这样做了,那么很明显您没有正确调用
    fchmod

  • fchmod
    这样的调用返回一个状态-您不应该忽略这个!在您的情况下,它很可能是非零的,因为您传递了一个无效的
    fildes
    参数。因此,即使代码是正确的,您仍然可以从非零状态中学到一些东西


  • 除了前面提到的使用八进制常量的问题外,您调用的
    fchmod
    不正确-原型是:

     int
     fchmod(int fildes, mode_t mode);
            ^^^^^^^^^^
    
    但是您正在为第一个参数传递一个
    文件*
    (由
    fopen
    返回)!使用
    open
    而不是
    fopen
    ,这样您就可以使用
    int-fildes
    进行播放,或者使用
    chmod
    作为文件名

    这里有两条重要的带回家的信息:

  • 您应该始终启用编译器警告,并注意任何警告。如果您这样做了,那么很明显您没有正确调用
    fchmod

  • fchmod
    这样的调用返回一个状态-您不应该忽略这个!在您的情况下,它很可能是非零的,因为您传递了一个无效的
    fildes
    参数。因此,即使代码是正确的,您仍然可以从非零状态中学到一些东西


  • 除了前面提到的使用八进制常量的问题外,您调用的
    fchmod
    不正确-原型是:

     int
     fchmod(int fildes, mode_t mode);
            ^^^^^^^^^^
    
    但是您正在为第一个参数传递一个
    文件*
    (由
    fopen
    返回)!使用
    open
    而不是
    fopen
    ,这样您就可以使用
    int-fildes
    进行播放,或者使用
    chmod
    作为文件名

    这里有两条重要的带回家的信息:

  • 您应该始终启用编译器警告,并注意任何警告。如果您这样做了,那么很明显您没有正确调用
    fchmod

  • fchmod
    这样的调用返回一个状态-您不应该忽略这个!在您的情况下,它很可能是非零的,因为您传递了一个无效的
    fildes
    参数。因此,即使代码是正确的,您仍然可以从非零状态中学到一些东西


  • 除了前面提到的使用八进制常量的问题外,您调用的
    fchmod
    不正确-原型是:

     int
     fchmod(int fildes, mode_t mode);
            ^^^^^^^^^^
    
    但是您正在为第一个参数传递一个
    文件*
    (由
    fopen
    返回)!使用
    open
    而不是
    fopen
    ,这样您就可以使用
    int-fildes
    进行播放,或者使用
    chmod
    作为文件名

    这里有两条重要的带回家的信息:

  • 您应该始终启用编译器警告,并注意任何警告。如果您这样做了,那么很明显您没有正确调用
    fchmod

  • fchmod
    这样的调用返回一个状态-您不应该忽略这个!在您的情况下,它很可能是非零的,因为您传递了一个无效的
    fildes
    参数。因此,即使代码是正确的,您仍然可以从非零状态中学到一些东西


  • 你听过你的编译器吗?即使在默认设置下,编译器也应该用类似“
    warning:compatible pointer to integer conversion passing'FILE*”(又称“struct”\u sFILE)的东西警告您