首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么fdopen有一个“旗子”的争论?

为什么fdopen有一个“旗子”的争论?
EN

Stack Overflow用户
提问于 2014-11-14 17:30:00
回答 3查看 194关注 0票数 2

我从来不确定我应该传递给fdopen的是什么开放模式,也不知道为什么它会有一个开放模式。因为fdopen对一个文件描述符进行操作,该描述符以前可能是通过较低级别的调用(如open )打开的--该调用已经设置了模式标志。

我的意思是,我假设fopen的任何实现都只需将char*模式字符串转换为较低级别的模式标志类型( POSIX系统上的OR'd int ),然后将其传递给open

但是,如果我们在调用fdopen时有一个来自以前调用open的现有文件描述符,那么为什么我们需要标志呢?它似乎为程序员创造了更多的工作,将int标志转换为fdopenchar*标志。

我是不是遗漏了一些用例,我们可能需要为openfdopen使用不同的标志

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-14 17:44:15

也许你想把O_RDWR传给open(2),然后把"r"传给fdopen(3)。这是完全合法的做法。也许是其他人代表您调用了open(2)和/或fdopen(3)

票数 2
EN

Stack Overflow用户

发布于 2014-11-14 18:01:44

凯文分享了正确的想法。

FILE *fd由不同的实例管理。因为开放模式很可能是硬编码的,所以程序员输入两次就很简单了。

确实有些情况下,您需要先在fd中打开一些东西,然后将其包装到FILE *中。例如,在我尝试在我自己的项目中提供一个串口接口之前,我必须使用open打开它,这样我就可以在它上操作ioctltermios,最后,我用一个FILE *包装它,这样外部世界就可以使用fgets或类似的东西了。

票数 1
EN

Stack Overflow用户

发布于 2014-11-14 17:56:58

引用GNU文件:

文件描述符为输入和输出操作提供了一个基本的、低级的接口.如果您希望执行特定于特定类型设备的控制操作,则必须使用文件描述符;没有以这种方式使用流的工具。

文件描述符和流都可以表示到设备(例如终端)的连接,或者用于与另一个进程通信的管道或套接字,以及普通文件。

fdopen()函数将流与现有的文件描述符fd相关联。流的模式(值"r“、"r+”、"w“、"w+”、"a“、"a+")必须与文件描述符的模式兼容。fopen()函数打开名称为路径指向的字符串的文件,并将流与其关联。

通常,文件描述符不像流那样可移植。

有关更多信息,请查看此链接:node/Streams-and-File-Descriptors.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26935621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档