You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何fprintf触发Segmentation Fault核心转储?改用fputs仍报错

问题原因分析

你的段错误根本原因是**fopen调用失败返回了NULL指针,后续用这个空指针调用fprintf/fputs触发了空指针访问**,具体分两点:

  • 权限不足:/etc/systemd/system/是系统服务配置目录,只有root用户才有写入权限。如果你的程序没以root身份运行,fopen打开该文件会失败,返回NULL。
  • 未检查文件指针有效性:代码里没有判断fp是否为NULL,直接就调用fprintf/fputs,对空指针进行操作必然会引发段错误。
修复方案
  1. 添加文件打开失败的检查逻辑:
    修改代码,在调用fprintf前先判断fp是否有效,避免空指针操作:

    fp = fopen("/etc/systemd/system/watchddog.service", "w");
    if (fp == NULL) {
        perror("fopen failed"); // 打印具体错误信息,方便排查
        return -1; // 或者做其他错误处理
    }
    // 后续的fprintf/fputs操作
    
  2. 以root权限运行程序:
    可以用sudo执行你的程序,确保拥有写入/etc/systemd/system/目录的权限。

另外补充:你的代码里readlink的返回值也没处理,虽然这不是当前段错误的原因,但最好也加上检查,避免后续可能的问题。

内容的提问来源于stack exchange,提问作者user21561764

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:29:55