栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

LINUX C中stdout和STDOUT_FILENO之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394218.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号