如何让c ++程序在Linux中打开另一个程序?它是否与使用shell命令的Windows类似?
答案 0 :(得分:3)
有一个标准的C函数system()
,它运行一个命令并等待它完成。
有一个标准的POSIX函数popen()
,它在新进程中运行命令并返回连接到新进程的管道。管道通常是单向的,它可以读取或写入(某些平台,如BSD允许双向管道)
或者您可以手动执行此操作,方法是使用POSIX函数fork()
分叉一个新进程,然后分配一个exec()
系列,用其他程序替换进程映像。
我认为目前最简单的方法是使用我的Pstreams库。这将在新进程中运行命令,并使用与iostreams兼容的接口将管道连接到其stdin
,stdout
和stderr
中的任何一个。这比fork
& exec
(但更简单)但比popen
更具灵活性和安全性。
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以使用system()
标准库调用,这与Windows Shell命令非常相似。要获得更多控制权,您可以使用exec()
及其变体。
答案 3 :(得分:0)
使用execl()
功能。它适用于C语言但它应该可以正常工作。对于mor信息和一些示例,请查看:http://www.gidforums.com/t-3369.html
答案 4 :(得分:0)
通常你首先使用函数 fork 来启动另一个进程,然后 exec 来交换程序新进程正在运行(即想要启动另一个程序的程序) programm)你想要开始的那个。代码看起来大致如下:
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";
}
Fork克隆您正在运行的进程。它们非常相似,甚至可以运行相同的程序。唯一的区别是返回的pid。调用进程获取子进程的pid,子进程为零。开关参数确定了这些情况中的哪一个。 Exec用另一个程序替换该进程正在运行的程序。从我记忆中,它只保留文件描述符。关于参数和搜索路径,Exec有几个变量,请在手册页中查看。