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

同一文件的两个文件描述符

燕正卿
2023-03-14
问题内容

使用posix的read()write()linux调用,可以确保如果我以串行方式通过一个文件描述符进行写入并通过另一个文件描述符进行读取,以使两个动作彼此互斥…读取文件描述符将始终看到写入文件描述符最后写入的内容?

我相信是这种情况,但我想确定一下,手册页对此没有太大帮助


问题答案:

这取决于您在哪里获得了两个文件描述符。如果它们来自dup(2)调用,则它们共享文件的偏移量和状态,因此对一个文件执行write(2)将影响另一个文件的位置。另一方面,如果它们来自两个单独的open(2)调用,则每个调用将具有自己的文件偏移量和状态。

文件描述符主要只是对内核文件结构的引用,而该内核结构包含大多数状态。打开(2)文件时,您将获得一个新的内核文件结构和一个引用该文件的新文件描述符。当您对文件描述符dup(2)(或通过sendmsg传递文件描述符)时,将获得对相同内核文件结构的新引用。



 类似资料:
  • 文件描述符 Linux很重要的设计思想就是一切皆文件,网络是文件,键盘等外设也是文件,很神奇吧?于是所有资源都有了统一的接口,开发者可以像写文件那样通过网络传输数据,我们也可以通过/proc/的文件看到进程的资源使用情况。 内核给每个访问的文件分配了文件描述符(File Descriptor),它本质是一个非负整数,在打开或新建文件时返回,以后读写文件都要通过这个文件描述符了。 应用 我们想想操作

  • 文件描述符接口 函数 int  fd_new (void)   分配文件描述符   struct dfs_fd *  fd_get (int fd)   获取文件描述结构   void  fd_put (struct dfs_fd *fd)   放置文件描述符   int  fd_is_open (const char *pathname)   判断文件是否已被打开   int  select (

  • 问题内容: 有没有办法在原始文件描述符而不是FILE *上执行ftell()的操作(返回文件中的当前位置)?我认为应该有,因为您可以使用lseek()查找原始文件描述符。 我知道我可以使用fdopen()创建与文件描述符相对应的FILE *,但我宁愿不这样做。 问题答案: 只需使用:

  • 我希望你能帮助我。 目前我收到两个格式的文件,我想知道如何使用将这两个文件与同一类相关联。 Company.xml Employees.xml 我想知道如何生成与这些字段相关的类 id 公司

  • 每一个前台模板根目录都会有一个manifest.json描述文件,它的结构如下: { "name": "simpleboot3",/*模板名,和目录名一样*/ "version": "1.0.0",/*模板版本号*/ "demo_url": "http://demo.thinkcmf.com",/*模板演示地址*/ "author": "ThinkCMF",/*模板作者*/ "

  • 模板描述文件 每一个前台模板根目录都会有一个manifest.json描述文件,它的结构如下: { "name": "simpleboot3",/*模板名,和目录名一样*/ "version": "1.0.0",/*模板版本号*/ "demo_url": "http://demo.thinkcmf.com",/*模板演示地址*/ "author": "ThinkCMF",/*模板作