首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >低级os.open、os.fdopen和朋友用例?

低级os.open、os.fdopen和朋友用例?
EN

Stack Overflow用户
提问于 2013-01-11 14:39:06
回答 2查看 1.3K关注 0票数 13

在Python3.2(和其他版本)中,os.open文档声明:

此函数用于低级别I/O。为了正常使用,请使用内置函数open(),它将返回一个带有read()和write()方法的文件对象(还有更多)。若要在文件对象中包装文件描述符,请使用fdopen()。

用于fdopen()

返回连接到文件描述符fd的打开文件对象。这是open()的别名,并接受相同的参数。唯一的区别是fdopen()的第一个参数必须始终是整数。

这句话在一个关于io.openos.open之间的区别的问题中(我完全清楚,我总是使用io.open__,而不是os.open)问:为什么有人会选择Python作为低级别的I/O呢?但是没有得到真正的答案。

我的问题与注释问题非常相似:在Python中,通过os.open__、os.fdopen__、os.close__、os.read__等低级别I/O的用例是什么?我曾经认为这是一个过程的需要,但是我不太确定了。是否有任何任务只能使用低级别I/O执行,而不能使用更高级别的包装器执行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-11 15:50:23

主要差异:

  • 对文件的低级访问是不缓冲的。
  • 低级别访问是不可移植的
  • 低级别允许更细粒度的控制,例如是否在读取时阻塞

低级别io的用例:

  • 该文件是块设备。
  • 文件是一个套接字。
  • 这个文件是个tty文件
  • ..。

在所有这些情况下,您可能希望拥有更细粒度的控制(而不是缓冲和阻塞行为)。

您可能永远不需要普通文件的低级别函数。我认为大多数情况下用例将是一些设备驱动程序的东西。但是,这最好用C语言来完成,但我也可以看到python的用例,例如设备驱动程序的快速原型。

票数 4
EN

Stack Overflow用户

发布于 2013-01-11 15:11:44

当我需要使用O_CREAT | O_EXCL创建一个文件时,我会使用它,如果文件存在,则失败。如果测试发现文件不存在,则无法检查文件是否存在,因为这将创建一个争用条件,在检查和创建之间的过渡期间可以创建该文件。

简单地看一下你提供的链接,我确实认为pidfile的创建有一个竞争条件。

在Python3.3中,添加到模式中的open()似乎就是这样做的。不过我还没试过呢。

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

https://stackoverflow.com/questions/14280384

复制
相关文章

相似问题

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