0

此类问题已在此处和其他地方多次提出,但似乎我没有任何解决方案可以工作。到目前为止,我“完成”的是一个变量可以由两个不同的应用程序使用(一个应用程序通过系统命令调用另一个应用程序),但该值不会从主应用程序传递到辅助应用程序。

代码对应于此:

 #ifndef avis_h
    #define avis_h

    #include "string"
    using namespace std;

    extern int fnu;

    #endif

那是头文件avis_h。

主程序是这样的:

    #include "stdafx.h"
    ...
    #include "iostream"
    #include "avis_h.h"


    int fnu;

    int main(){fnu=3;system (app2);}

其中 app2 是辅助应用程序:

    #include "stdafx.h"
    ...
    #include "iostream"
    #include "avis_h.h"

    int fnu;

    int main(){cout<<fnu;Sleep(10);}

显示数字 0 而不是数字 3。我尝试了其他方法,但到目前为止都没有。有人可以告诉我如何将该值从主程序正确传递到辅助程序吗?

4

2 回答 2

1

应用程序有不同的地址空间,如果您希望将一些数据从一个应用程序传递到另一个应用程序,您可以在一个应用程序中写入文件并在另一个应用程序中读取文件,或者您可以使用底层操作支持的进程间通信机制之一系统。在类 Unix 系统上,这些机制是管道、fifo、消息队列和共享内存。您甚至可以使用套接字。使用系统功能有点不是很好。但是,如果您希望只使用系统函数,这对于这种简单的进程间通信是可行的,请尝试将 fnu 的值作为参数传递给 app2。

char buf [20];

sprintf (buf, "app2 %d", fnu);
system (buf);
于 2012-07-14T16:27:13.410 回答
1

您不能像这样在独立应用程序之间共享变量。

您可以将其作为参数传递给system命令:

//commandLine is app2 + " " + the parameter
system (commandLine);

分解:

std::stringstream ss; 
ss << app2; 
ss << " "; 
ss << fnu;
std::string commandLine = ss.str();
system(commandLine.c_str());

不要忘记:

#include <sstream>
#include <string>

argv并通过在第二个应用程序中检索它。

或者您可以使用 IPC,但在这种特殊情况下,这太过分了。

于 2012-07-14T16:12:27.347 回答