Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++;并与it进行跨平台沟通 我想从C++代码中运行另一个程序。code>system()返回int,因为每个程序只能向操作系统返回int。但是,我想调用的另一个程序将生成我在基本应用程序中需要的字符串。如何将其发送到父进程_C++_Linux_Windows_Cross Platform_Process - Fatal编程技术网

如何在C++;并与it进行跨平台沟通 我想从C++代码中运行另一个程序。code>system()返回int,因为每个程序只能向操作系统返回int。但是,我想调用的另一个程序将生成我在基本应用程序中需要的字符串。如何将其发送到父进程

如何在C++;并与it进行跨平台沟通 我想从C++代码中运行另一个程序。code>system()返回int,因为每个程序只能向操作系统返回int。但是,我想调用的另一个程序将生成我在基本应用程序中需要的字符串。如何将其发送到父进程,c++,linux,windows,cross-platform,process,C++,Linux,Windows,Cross Platform,Process,这两个应用程序将在同一个文件夹中,因此我认为子应用程序可以将字符串保存到“temp.txt”,然后主应用程序可以读取并删除它(这不是性能关键的过程,我将调用另一个过程,只是调用我的主opengl应用程序中的“打开文件”对话框)。然而,这是一个有点丑陋的解决方案,有更好的跨平台解决方案吗 感谢您可以使用,这将打开一个可以写入和读取数据的过程。AFIK这也是跨平台的 // crt_popen.c /* This program uses _popen and _pclose to receive a

这两个应用程序将在同一个文件夹中,因此我认为子应用程序可以将字符串保存到“temp.txt”,然后主应用程序可以读取并删除它(这不是性能关键的过程,我将调用另一个过程,只是调用我的主opengl应用程序中的“打开文件”对话框)。然而,这是一个有点丑陋的解决方案,有更好的跨平台解决方案吗

感谢您可以使用,这将打开一个可以写入和读取数据的过程。AFIK这也是跨平台的

// crt_popen.c
/* This program uses _popen and _pclose to receive a 
 * stream of text from a system process.
 */
#include <stdio.h>
#include <stdlib.h>

int main(void) {

   char   psBuffer[128];
   FILE   *pPipe;

        /* Run DIR so that it writes its output to a pipe. Open this
         * pipe with read text attribute so that we can read it 
         * like a text file. 
         */

   if((pPipe = _popen("dir *.c /on /p", "rt")) == NULL)
      exit(1);

        /* Read pipe until end of file. */

   while(!feof(pPipe)) {
      if(fgets(psBuffer, 128, pPipe) != NULL)
         printf(psBuffer);
   }

        /* Close pipe and print return value of pPipe. */

   printf("\nProcess returned %d\n", _pclose(pPipe));

   return 0;
}
//crt\u popen.c
/*此程序使用_popen和_pclose接收
*来自系统进程的文本流。
*/
#包括
#包括
内部主(空){
字符psBuffer[128];
文件*pPipe;
/*运行DIR,使其将输出写入管道。打开此
*具有“读取文本”属性的管道,以便我们可以读取它
*就像一个文本文件。
*/
if((pPipe=_popen(“dir*.c/on/p”,“rt”))==NULL)
出口(1);
/*读取管道直到文件结束*/
而(!feof(pPipe)){
if(fgets(psBuffer,128,pPipe)!=NULL)
printf(psBuffer);
}
/*关闭管道并打印管道的返回值*/
printf(“\n进程返回%d\n”,\u pclose(pPipe));
返回0;
}

虽然它不是C++标准的一部分,但几乎所有合理的当前系统都提供了<代码> POPON <代码>(或PopeN<代码>,在微软的情况下),它将允许您生成子进程并从其标准输出中读取作为父样式的C样式<代码>文件> /COD>。至少在内存可用的情况下,

popen
包含在POSIX中,因此您可以预期它基本上出现在所有类似Unix的系统中(如上所述,它也可以在Windows上使用,至少在大多数编译器中是这样)


换句话说,您可能遇到的唯一不可用的地方是类似于小型嵌入式系统的东西,在那里它可能毫无意义(例如,找不到其他可执行文件的文件系统,也很可能无法创建新进程).

虽然没有实现进程间通信的标准方法,但有一个相对轻松的库,可移植到许多操作系统/编译器:。它涵盖了大多数必需品:

  • 共享内存
  • 内存映射文件
  • 信号量、互斥量、条件变量和可升级互斥量 类型将它们放置在共享内存和内存映射文件中
  • 这些同步对象的命名版本,类似于 UNIX/Windows sem\u打开/创建信号量API
  • 文件锁定
  • 相对指针
  • 消息队列

使用数据库、共享内存、文件或网络连接。这是两个进程之间通信的一些标准方式。你能解释一下共享内存吗?这里有一个链接,你可以通过谷歌搜索找到更多关于进程间通信的信息,简称IPC。我不知道选择哪一种,两者都很好。我会检查你的答案,但另一个也很好。