【问题标题】:How to pass data from one process to another in c?如何在c中将数据从一个进程传递到另一个进程?
【发布时间】:2011-05-14 20:55:49
【问题描述】:

有没有办法在 c 中将数据(例如:int 值)从一个进程传递到另一个进程?

根据我的经验,我们只能将信号从一个进程发送到另一个进程。但看起来没有办法将一些信息与该信号一起“附加”到另一个进程。

【问题讨论】:

  • 即使您无法将数据附加到信号上,您仍然可以使用信号,通过SIGUSR1SIGUSR2 一次传输一位... ;-)

标签: c process communication signals


【解决方案1】:

我认为我们可以在进程之间使用全局变量,但不确定。如果有人尝试过,请告诉我。如果我们使用包含 extern valriable 的标头,我们可以在另一个 main() 中使用它,它只不过是一个独立的程序(进程)。但是我们必须将执行的两个 main() 链接在一起。

【讨论】:

  • 不,你不能,进程内存空间是相互隔离的。 externclause 用于声明来自其他编译单元(源文件)的外部变量。
    而且你不能“链接”两个 main() 函数。
【解决方案2】:

您可以使用管道来执行此操作。管道的主要用途是在不同进程之间进行数据通信。

管道是操作系统为进程间通信提供的最简单的机制。管道是两个进程之间的通信缓冲区:它有两个描述符,一个用于写入,另一个用于读取。写入和读取操作按 FIFO 顺序完成(先进先出)。

有两种管道:未命名管道和命名管道(也称为 FIFO)。

  • 未命名管道仅允许在分层相关的进程(父进程和子进程)之间进行通信;
  • 命名管道允许任何进程之间的通信。通过
  • 在文件系统中创建一个特殊文件

如果您想要一些示例代码,请访问此处: http://pastebin.com/1W216nyN

【讨论】:

    【解决方案3】:

    使用 Socket 是一种简洁、便携、强大的方法。

    【讨论】:

      【解决方案4】:

      您可以使用各种可用的进程间通信机制之一。

      使用谷歌。作为参考你也可以看看here

      【讨论】:

        【解决方案5】:

        使用sigqueue 函数,您可以将单个整数或指针与信号一起传递(但请记住,如果信号的目标是另一个进程,则指针将无用,因为不同的进程不共享地址空间)。

        其他一些方法是管道、共享内存(POSIX 或 SysV 风格)、文件……

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-02
          • 2023-01-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多