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

标签 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 系统。可能是什么导致了这个问题?

最佳答案

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

关于c - 使用 setfsuid() 创建文件时出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14201773/

相关文章:

c++ - 使用 QProcess 仅根据需要 zcat 行数?

python - 获取文件复制到文件夹的时间(Python)

c - 如何在C中的不同行中将字符串写入文件

permissions - 分层组权限理论/资源?

c - 提交解决方案后Codechef网站中出现段错误

c - 如何回调到 exe 中的函数?

c - 网络字节序遍历结构体(Big Endian) --- C语言

windows-7 - Windows 7 是否仍然通过注册表分配事件日志权限?

android - 将多个帐户所有者添加到单个 Google Play 开发者帐户

Linux下的编译问题