如果我使用puts
,我可以標準輸出重定向預期:爲什麼stdout重定向在put函數中工作但不能寫入?
#include <stdio.h>
int main() {
char *s = "hello world";
puts(s);
return 0;
}
重定向它:
$ gcc -Wall use_puts.c
$ ./a.out
hello world
$ ./a.out > /dev/null
但是,如果我用write
寫到標準輸出,shell重定向不起作用:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main() {
char *s = "hello world\n";
write(0, s, strlen(s));
return 0;
}
重定向它:
$ gcc -Wall use_puts.c
$ ./a.out
hello world
$ ./a.out > /dev/null
hello world
這是爲什麼?在這種情況下,如何將寫入重定向到stdout?
如果你在Linux下並且用'puts()'版本使用'strace ./.a.out',你會發現'puts()'調用帶有文件描述符1而不是0的'write()'。 –