2013-01-15 43 views
-6

如何让一个C++程序在Linux中打开另一个程序?它与使用shell命令的Windows相似吗?Linux C++如何打开一个程序

+2

使用'exec'函数之一。 –

+0

您是否在尝试将Windows +终端与Linux + C++进行比较? – 2013-01-15 22:10:29

+0

这真的不难搜索。 – chris

回答

0

您可以使用标准库调用system(),这与Windows Shell命令非常相似。对于更多控制,您可以使用exec()及其变体。

3

有一个标准的C函数,system()它运行一个命令并等待它完成。

有一个标准的POSIX函数popen(),它在新进程中运行命令并返回连接到新进程的管道。管道通常是单向的,它可以读取或写入(一些平台,如BSD允许双向管道)

或者你可以手动执行,通过使用POSIX功能fork()来分叉一个新的进程,然后其中一个exec()家族用不同的程序替换过程映像。

我认为最简单的方法是使用我的Pstreams库。这将在新进程中运行命令,并使用iostream兼容接口将管道连接到其任何stdinstdoutstderr。这比fork & exec(但要简单得多),但比popen更具灵活性和安全性。

0

通常你第一次使用功能启动另一个过程,然后EXEC交换新的进程正在运行的是希望PROGRAMM(即PROGRAMM开始antother程序)与你想开始的那个。代码看起来大致如下:

pid_t pid = fork(); 
switch(pid) { 
    case 0: // we are the child process 
     exec(name of exectuable); //exact signautre differs 
     break; 
    case -1: //An error ocurred 
     std::cout << "error\n"; 
} 

叉克隆您正在运行的进程。他们是完全相同的,他们甚至运行相同的程序。唯一的区别是返回的PID。调用过程获取孩子的pid,孩子得到零。开关状态决定了这些情况。 Exec取代了另一个程序正在运行的程序。从我记得的地方来看,它只保留文件描述符。 Exec在参数和搜索路径方面有几个varaiants,请在man page中查找它们。

相关问题