stdout是
FILE*提供标准输出流的“常量”。因此显然
fprintf(stdout,"x=%dn",x);具有与相同的行为
printf("x=%dn", x);;您使用
stdout的
<stdio.h>类似功能
fprintf,
fputs等等。
STDOUT_FILENO是一个整数文件描述符(实际上是整数1)。您可以将其用于
writesyscall。
两者之间的关系是
STDOUT_FILENO == fileno(stdout)
(除非你喜欢做奇怪的事情后
fclose(stdout);,或许有些
freopen过了一段
fclose(stdin),你应该几乎不这么做!
您通常喜欢这些
FILE*东西,因为它们是经过缓冲的(因此通常表现良好)。有时,您可能需要调用
fflush刷新缓冲区。
您可以为syscall使用文件描述符号,例如write(2)(由
stdio库使用)或poll(2)。但是使用系统调用很麻烦。它可能会给您带来非常好的效率(但是很难编写代码),但是很多时候
stdio库足够好(并且更加可移植)。
(当然,您应该
#include <stdio.h>为stdio函数提供服务,并且
#include <unistd.h>-和一些其他标头-
为syscall
write所支持。stdio函数是通过syscalls实现的,因此
fprintf可以调用
write)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)