C read()函数如何从STDERR读取?

标签 c bash input pipe stderr

我得到了以下 C 代码:

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

int main(int argc, char **argv){
        char buf[10];
        read(2,buf,4);
}

据我所知,read()函数现在将从文件描述符2(即Stderr)中读取。当我使用以下命令编译并执行它时:

gcc -o test test.c

在终端中,它提示我像使用 Stdin 一样键入输入。这是为什么?我如何在 bash 中使用管道将 stderr 发送到文件? 提前致谢。

最佳答案

因为当您直接从命令行运行程序时,它的 stdin 和 stderr 都连接到同一个文件(您的终端)它具有读取权限 。所以它只是从终端读取,但不一定是它的 stderr。当您重定向其 stderr 时,一切都会失败。

这是我的测试。

ibug@linux:~ $ cat t.c
#include <stdio.h>
#include <unistd.h>

int main(void){
        char b[10];
        printf("%ld\n", read(2, b, 10));
        return 0;
}
ibug@linux:~ $ gcc t.c
ibug@linux:~ $ ./a.out
abcdefg
8
ibug@linux:~ $ ./a.out 2>/dev/null
-1
ibug@linux:~ $ ./a.out 2>/dev/zero
-1
ibug@linux:~ $

关于C read()函数如何从STDERR读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48443136/

相关文章:

bash - 如何使用 stdout 和 stderr io-redirection 从程序中获取理智的错误/警告消息输出?

iOS录制音频错误

c# - 从用户输入中读取一个整数

linux - Bash 脚本阻止所有 Apple 设备

bash - 编写类似于 scp 的 bash 补全脚本

javascript - 如何在 html 的 javascript 中制作 "/"命令

C 在数组中查找第二大数

c - 使用C替换具有更高性能的最佳方法是什么?

c++ - 如何生成一个好的随机种子传递给 srand()?

c - 用 C 语言演奏弦乐