为何fprintf触发Segmentation Fault核心转储?改用fputs仍报错
问题原因分析
你的段错误根本原因是**fopen调用失败返回了NULL指针,后续用这个空指针调用fprintf/fputs触发了空指针访问**,具体分两点:
- 权限不足:
/etc/systemd/system/是系统服务配置目录,只有root用户才有写入权限。如果你的程序没以root身份运行,fopen打开该文件会失败,返回NULL。 - 未检查文件指针有效性:代码里没有判断
fp是否为NULL,直接就调用fprintf/fputs,对空指针进行操作必然会引发段错误。
修复方案
添加文件打开失败的检查逻辑:
修改代码,在调用fprintf前先判断fp是否有效,避免空指针操作:fp = fopen("/etc/systemd/system/watchddog.service", "w"); if (fp == NULL) { perror("fopen failed"); // 打印具体错误信息,方便排查 return -1; // 或者做其他错误处理 } // 后续的fprintf/fputs操作以root权限运行程序:
可以用sudo执行你的程序,确保拥有写入/etc/systemd/system/目录的权限。
另外补充:你的代码里readlink的返回值也没处理,虽然这不是当前段错误的原因,但最好也加上检查,避免后续可能的问题。
内容的提问来源于stack exchange,提问作者user21561764
相关产品推荐
相关产品推荐

