C - 如果变量同时执行,如何从另一个可执行文件访问变量?



我有两个不同的可执行文件,分别称为main1和main2。 在第一个 main1 中,我有int main(int argc, char **argv)个参数,我接受了输入。 我想将它们发送到main2,我将检查输入并显示它们。 但问题是我需要同时执行它们,分别在 Iterm 中执行它们,例如:

./main1 "asd" | ./main2

我应该使用 malloc 将其存储在内存中并从另一个主服务器调用它吗? 如果是这样,我该怎么做? 我无法改变我执行它们的方式。我所能做的就是创建我的库或分配内存。

在此 shell 语句中

./main1 "asd" | ./main2

管道符号(|)将其左侧参数的标准输出连接到其右侧参数的标准输入。

因此,要将数据从main1发送到main2只需让main1写入预打开的FILE*stdout,并main2从预打开的FILE*stdin中读取。"预打开"是指当 C 程序启动时,这两个流由 C 运行时系统自动打开。

要访问main1内部传递的参数main1请像这样定义其main()

int main(int argc char ** argv)

并做

for (int i = 1; i < argv; ++i)
{
/* to for example print the arguments (to standard-output) do: */
fputs(argv[i], stdout);
}

你根本不能使用 malloc。

Malloc 在当前程序的堆上分配内存,但 "main1" 的内存不与 "main2" 的内存共享,因此您无法以他的方式访问它。

这是一件很奇怪的事情,但是如果您真的需要使用参数将"asd"字符串传递给main2,我建议您寻找IPC,更准确地说,共享内存。 这将允许您声明将在计算机上公开的内存部分,并且任何进程都可以访问它。

但请注意,此内存本身不受多次访问保护,您需要使用信号量(共享内存互斥锁)。

您可以查看这篇文章的答案以获取有关如何执行此操作的基本示例(即使它适用于 forks 而不是 2 个不同的进程,它仍然是相同的用例)

如果你想看看你在做什么,在测试时,因为这些内存块是计算机范围的(而不仅仅是计算机),你有办法通过终端观察它们。我建议您阅读此手册页并尝试自己 http://man7.org/linux/man-pages/man1/ipcs.1.html

最后,如果您总是这样启动程序,那么使用管道也可能很好;)

如果我正确理解了您的要求,那么它如下:您希望 main1 的输出作为 main2 的输入,对吗?

如果是上述情况,那么您使用的管道操作员完全按照您的要求执行,它将 main1 的输出重定向到 main2 的输入

如果你想重用输入,那么你可以使用 bash 脚本来获取公共输入。稍后您可以使用这些公共输入来调用所需不同程序的任意数量的main()函数。 这只是一种可能的解决方案。这可能不适用于您的情况。

参考资料 - https://unix.stackexchange.com/questions/89332/how-to-run-more-than-one-program-in-a-single-script

最新更新