我有两个prpr让我们说prog1和prog2。 我正在用prog1打开一个文件,并对它进行一些操作。 现在没有在prog1中closures文件,我使用unix套接字将其文件描述符发送到prog2,然后在其中执行一些操作。
虽然我得到了相同的描述符,我在prog1中传递,但是在prog2中接收到的fd上执行fstat()时会抛出错误,说错误的文件描述符。 我已经在prog1中打开了文件,其中corerct权限是读取和写入的,但仍然出现错误。
为什么会这样呢? 如果我的方式传递文件描述符是错误的,那么请build议一个正确的。
什么Linux库支持套接字,ioctl调用,tuntap等…?
如何从Linux中的graphicsinput板手写笔读取压力值?
Linux软件看门狗
Directory.GetFilesfind不存在的文件
通过共享内存IPC在进程之间共享指针
一个更好的sprintf?
Windows上大量连续的虚拟内存分配
计算程序执行时间
我相信这个网站有你在找什么:
http://www.lst.de/~okir/blackhats/node121.html
Linux的man 7 unix也有关于使用SCM_RIGHTS和Unix套接字的其他功能的信息。
修复损坏的链接: http : //web.archive.org/web/20131016032959/http : //www.lst.de/~okir/blackhats/node121.html
这个是正常的。 每个程序都有自己的文件描述符。
您可以在/proc/PID/fd看到它们,它们通常是符号链接到您的文件。 你可以用unix套接字做什么,允许使用sendmsg / recvmsg从一个程序写入一个文件到另一个程序。 看到这个问题更多的细节。
但是有一个更好的方法可以同时写入一个文件。 你可以使用fifo,shm,甚至可以在你的两个程序之间传递你的偏移位置。
文件描述符是一个小的int值,可以让你访问一个文件。 它是一个文件描述符表的索引,这是内核中与每个进程相关的数据结构。 一个进程不能对另一个进程的文件描述符做任何有意义的事情,因为它不能访问任何其他进程的文件描述符表。
这是基于安全原因。 如果一个进程能够对属于另一个进程的打开文件执行操作,那么就会出现混乱。 另外,一个文件描述符只是没有足够的信息去做你想做的事情; 一个进程的文件描述符0(stdin)可能会引用与另一个进程的文件描述符0完全不同的文件。即使它们碰巧是相同的文件,每个进程也需要维护自己关于该打开文件状态的信息它的读/写等等)。
如果你要描述你想要完成的事情,或许我们可以提供帮助。
编辑:
您想要将数据从一个程序传递到另一个程序。 最直接的方法是创建一个管道( man 2 pipe )。 请注意,第二个过程将必须是第一个孩子。
另一种方法是创建第二个进程可以打开和读取的文件(不要共享文件描述符),也可以使用套接字。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。