当前位置: 首页 > 面试题库 >

C Fopen vs开放

温峻熙
2023-03-14
问题内容

您是否有想要使用的任何原因(除了语法原因之外)

FILE *fdopen(int fd, const char *mode);

要么

FILE *fopen(const char *path, const char *mode);

代替

int open(const char *pathname, int flags, mode_t mode);

在Linux环境中使用C时?


问题答案:

首先,没有特别好的理由去使用fdopenif
fopen是一个选项,open而另一个是可能的选择。如果您要使用open,则不应该首先使用该文件FILE *。因此,将其包括fdopen在该列表中是不正确且令人困惑的,因为它与其他列表不太相似。现在,我将继续忽略它,因为此处的重要区别在于C标准FILE *和OS特定的文件描述符之间。

使用fopen而不是的主要原因有四个open

  1. fopen为您提供缓冲IO,结果可能会比您执行的要快得多open
  2. fopen 如果未以二进制模式打开文件,则执行行结尾翻译,如果您的程序曾经移植到非Unix环境(尽管世界似乎仅在LF上融合(基于IETF文本的网络除外),这将非常有帮助SMTP和HTTP等协议))。
  3. A FILE *使您能够使用fscanf和其他stdio功能。
  4. 您的代码可能有一天需要移植到仅支持ANSI C而不支持该open功能的其他平台。

在我看来,以行结尾的翻译不但不会帮助您,反而会给您fscanf带来更多麻烦,而且对它的解析是如此微弱,以至于您不可避免地最终将其抛弃,而转向了更有用的东西。

并且大多数支持C的平台都具有open功能。

这留下了缓冲问题。在主要按顺序读取或写入文件的地方,缓冲支持确实很有帮助,并且可以大大提高速度。但是,这可能会导致一些有趣的问题,即当您希望数据存在于文件中时,数据不会最终出现在文件中。您必须记住fclosefflush在适当的时候。

如果您正在执行搜索(又名fsetposfseek第二种,以符合标准的方式使用起来比较棘手),则缓冲的有用性会迅速下降。

当然,我的偏见是我倾向于大量使用套接字,并且事实是您真的想做无阻塞的IO(它FILE *完全无法以任何合理的方式支持)并且根本没有缓冲。复杂的解析要求确实使我的看法蒙上了一层阴影。



 类似资料:
  • 1.自我介绍 2.rdd变dataframe,再变dataset中间发生的过程 3.项目拷打 4.说说文本处理方法 5.说说数据采集经历 6.颜色分类,操这题还没写对,麻了

  • 术语说明 AppID AppID是轻应用/订阅号唯一识别标志,轻应用/订阅号管理员可在轻推管理后台中查看。 AppSecret AppSecret是给轻应用/订阅号分配的密钥,开发者需要妥善保存这个密钥,防止被恶意使用,为了安全,管理员也可以对此密钥进行修改,修改后前密钥失效。轻应用/订阅号管理员可在轻推管理后台中查看。 access_token access_token(身份令牌)是轻应用/订阅

  • 如果你已经踏入原生iOS app开发之中,你可以跳过这一节去看Core Animation入门。但如果你刚开始iOS app的开发,抓住其基本就很重要,这样你就可以完全理解事物工作的原理。 Xcode Xcode是Mac和iOS开发者用来创建原生应用的IDE(集成开发环境)。它不仅仅是一个像你可能用过的Sublime Text之类的代码编辑器,它是设计、编程、测试、调试和分发Mac和iOS应用的整

  • 1.1. 对外数据API 调用方法: 提供数据API服务的地址为https://hubble.netease.com/api/,每一个调用请求需在请求头部内容中传入AccessKey作为认证信息,AccessKey在哈勃产品页面的应用管理->查看AccessKey中获取。 响应内容分为code、message、data。code为服务状态码,message为服务状态信息,data为数据结果;调用方

  • web-view 属性 类型 默认值 必填 说明 最低版本 src string 否 webview 指向网页的链接。 bindmessage eventhandler 否 网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data },data是多次 postMessage 的参数组成的数组 bindload event

  • Kubernetes作为云原生应用的基础调度平台,相当于云原生的操作系统,为了便于系统的扩展,Kubernetes中开放的以下接口,可以分别对接不同的后端,来实现自己的业务逻辑: CRI(Container Runtime Interface):容器运行时接口,提供计算资源 CNI(Container Network Interface):容器网络接口,提供网络资源 CSI(Container S

  • 钉钉开发平台为企业定制属于自己的钉钉。目前,超过30000名开发者,正在基于钉钉开放平台的300多个开放接口,为企业用户提供优质的产品和服务。 应用中心 开通第三方应用 ● 选择适合自己行业的精品应用开通,管理员每日10点可以抢1个应用 手机端工作应用-右上角图标 电脑端工作应用-应用中心 钉无忧 · 企业服务保障计划 数据安全 ● 阿里数年安全技术沉淀,保障数据安全,再也不用担心数据泄露问题。

  • 京东将营销、交易、支付、会员等各项业务能力以接口的形式开放给开发者,以满足开发者的业务诉求,同时减轻开发者的工作量 目前京东能力中心为开发者提供了如下能力: 用户信息:开发者可以在获得用户授权的前提下获得用户的相关的信息 登录:用户授权登录后,开发者可以获得用户的唯一标识 分享:用户可以便捷的分享小程序给微信好友,或分享至朋友圈 跳转 小程序跳转小程序:开发者可以通过配置相关协议,使得用户完成在小