我得到了以下 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/