使用setfsuid()创建文件时出现分段错误?

时间:2013-01-07 18:25:11

标签: c file permissions segmentation-fault

我有这个用于创建文件的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系统上。可能导致这个问题的原因是什么?

1 个答案:

答案 0 :(得分:1)

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