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

Ubuntu下read()系统调用使用疑问:两个测试场景问题解析

read()系统调用常见问题解析

测试代码

#include <unistd.h>
#include <stdio.h>
int main() {
    int b=10;
    char buff [b];

    int n= read(0,buff,b);

    write(1,buff,n);

    printf("%d \n",n);
}

问题1:输入"AA"后read()返回值为3而非2

输入"AA"后返回值是3,是因为你输入完两个A后按下了回车键——这个回车键会被转换成换行符\n,所以read()实际读取到的是三个字符:'A'、'A'、'\n',总字节数就是3,和返回值一致。

默认情况下标准输入是行缓冲模式,只有输入换行符时,输入内容才会被提交给read()处理,换行符会被算入读取的字节数里。

问题2:输入11个"A"后的异常输出与shell错误

关于"AAAAAAAAAA10"的由来

read()最多读取10字节,只会取前10个'A'存入buff。write()直接把buff里的10个'A'输出到标准输出,紧接着printf("%d \n",n)会输出10和换行符。因为buff里没有字符串终止符(\0),write()按字节数输出不会自动补终止符,所以write的10个'A'和printf的10会连续输出,看起来就是AAAAAAAAAA10。

关于"A: command not found"的原因

你输入了11个'A',read()只取了前10个,第11个'A'会留在输入缓冲区里。当程序运行结束后,shell会接管输入缓冲区,把剩下的这个'A'当成要执行的命令,所以出现了A: command not found的错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:03:26