0

我有这个创建文件的 c 代码。

#include <stdio.h>
int main(int argc, char *argv[])
{
    FILE *fp;
    fp=fopen("/home/sss/test3.file","w");
    fprintf(fp, "hi hi hi\n" );
    fclose(fp);
    return 0;   
} 

当我在文件 fopen() 调用之前添加 setfsuid() 命令并执行程序时,我遇到了分段错误。

#include <stdio.h>
#incldde <unistd.h>
int main(int argc, char *argv[])
{
    FILE *fp;
    setfsuid(1002);
    fp=fopen("/home/sss/test3.file","w");
    fprintf(fp, "hi hi hi\n" );
    fclose(fp);
    return 0;   
}

setfsuid() 命令需要 root 权限,我在带有服务器操作系统的 linux 系统上。什么可能导致这个问题?

4

1 回答 1

1

您需要检查结果fopen并确保它不是NULL. setfsuid更改UID用于文件系统访问检查的方法。进行此更改后,您可能无权打开该文件进行写入,从而导致fopen返回 NULL。当segfault您尝试使用fprintf. 始终在使用返回值之前检查它们。

于 2013-01-07T18:32:40.777 回答