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

C语言read函数未到EOF却返回0,读取/var/notes文件故障求助

问题根源

你代码中没有引入 <unistd.h> 头文件,这是导致问题的核心原因。
在64位Ubuntu 20.04环境下,read、lseek、getuid 都是系统调用,返回值类型为 ssize_t/off_t(64位有符号整型),如果没有引入对应头文件,C编译器会默认函数返回值为32位int类型,调用约定不匹配导致系统调用返回值被截断、参数传参错误:你在find_user_note末尾调用的lseek实际没有生效,文件指针停留在EOF位置,所以后续print_notes中的read直接返回0,栈上未初始化的note_buffer没有被写入任何数据,输出的就是栈内存的垃圾值。

修复方法

  1. 在代码头部添加头文件引用:
#include <unistd.h>
  1. 可选优化项:
  • 对所有系统调用的返回值做校验,比如read、lseek调用后判断返回值是否符合预期,方便后续排查问题
  • 打印字符串时不要直接用printf(note_buffer),改为printf("%s", note_buffer),避免笔记内容中存在格式化字符(如%s、%x)导致程序崩溃或出现安全隐患

修复后重新编译运行,就能正常读取到笔记内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:24:06