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

使用read()与write()系统调用时,read()为何始终返回1?

问题排查:read()返回值异常导致write仅输出单个字符

你的代码核心问题是运算符优先级错误,导致n没有正确获取到read()的返回值:

  • C语言中,>的优先级高于=,所以原代码的n=read(STDIN_FILENO, buf, BUFFSIZE) > 0会被解析为:
    n = (read(STDIN_FILENO, buf, BUFFSIZE) > 0)
    
  • 当你输入"hello"时,read()实际返回5(读取到5个字节),但这个值会先和0比较,得到布尔值1(真),最终n被赋值为1,这就是为什么你看到write()只输出第一个字符。

修正后的代码

给read()的赋值表达式加上括号,确保赋值操作先于比较执行:

#include<stdlib.h>
#include<unistd.h>
#include<stdio.h>

int main()
{
    #define BUFFSIZE 4096
    int n;
    char buf[BUFFSIZE];

    while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0) {

        if (write(STDOUT_FILENO, buf, n) != n) {
            printf("write err.\n");
        }
    }
    if (n < 0) {
        printf("read error.\n");
    }
    return 0;
}

修改后运行,输入"hello"会完整输出对应内容,read()的返回值会正确赋值给n,write()也会写入对应长度的字节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:15:11