C中的管道-我必须使用叉子吗?

C中的管道-我必须使用叉子吗?,c,linux,process,pipe,inter-process-communicat,C,Linux,Process,Pipe,Inter Process Communicat,让我们假设我只在Linux环境中使用C 通常,如果要使用pipe()函数,可以创建一个管道,然后将其分叉,从而允许父对象与子对象通信,反之亦然 但如果不是父母和孩子呢?如果我有一个正在运行的旧进程,是否可以使用pipe()函数与之通信?这个进程不是我当前进程的父进程(或与之相关),但我有它的pid。进程间通信是否仅限于文件或套接字 是否有任何方法可以在不使用套接字的情况下指定pid并从中接收信息?或使用-s,也称为命名管道,或使用套接字;也可以通过阅读获得更多的可能性。另见, 您还可以使用一些共

让我们假设我只在Linux环境中使用C

通常,如果要使用pipe()函数,可以创建一个管道,然后将其分叉,从而允许父对象与子对象通信,反之亦然

但如果不是父母和孩子呢?如果我有一个正在运行的旧进程,是否可以使用pipe()函数与之通信?这个进程不是我当前进程的父进程(或与之相关),但我有它的pid。进程间通信是否仅限于文件或套接字

是否有任何方法可以在不使用套接字的情况下指定pid并从中接收信息?

或使用-s,也称为命名管道,或使用套接字;也可以通过阅读获得更多的可能性。另见,

您还可以使用一些共享内存和信号量,请参见&,或者(如注释所示)消息队列,请参见。但是在IPC中使用-s通常是个坏主意

意识到通常需要两个过程的合作和修改;换句话说,您可能应该更改旧A和启动B流程的代码!您可能不希望进程未经同意泄露信息

顺便说一句,您也可以使用共享内存,例如在公共文件上。但是你需要一些同步

也要读;通过
/proc/1234/
您可以查询有关流程1234的一些信息

顺便说一句,虽然-s通常是在父进程和子进程之间调用之前设置(使用)的,但这不是强制性的。特别是,在某些情况下,您希望流程通过管道连接到自身(例如for)。

针对您的问题

但如果不是父母和孩子呢?如果我有一个旧的过程 正在运行,是否可以使用管道()与它通信 功能

您将无法与非父进程创建的任何其他进程通信。严格来说,你不应该被允许这样做

您需要通过操作系统或使用其他IPC机制来实现此功能


正是由于这个主要原因,数据库被广泛使用。多个进程将能够在单个数据库中读写数据。具有多个更新的保护

你的问题太宽泛了,你没有解释这两个过程在做什么!请编辑您的问题以改进它!