我有这个创建文件的 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 系统。可能是什么导致了这个问题?
最佳答案
您需要检查fopen
的结果并确保它不是NULL
。 setfsuid
更改用于文件系统访问检查的 UID
。进行此更改后,您可能没有权限打开该文件进行写入,从而导致 fopen
返回 NULL。当您尝试使用 fprintf
写入文件时,这会导致段错误
。 在使用返回值之前始终检查它们。
关于c - 使用 setfsuid() 创建文件时出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14201773/