LINUX C中stdout和STDOUT_FILENO之间的区别

LINUX C中stdout和STDOUT_FILENO之间的区别,第1张

LINUX C中stdout和STDOUT_FILENO之间的区别

stdout
FILE*
提供标准输出流的“常量”。因此显然
fprintf(stdout,"x=%dn",x);
具有与相同的行为
printf("x=%dn", x);
;您使用
stdout
<stdio.h>
类似功能
fprintf
fputs
等等。

STDOUT_FILENO
是一个整数文件描述符(实际上是整数1)。您可以将其用于
write
syscall。

两者之间的关系是

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
)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4987097.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存