Linux c ++如何打开程序

时间:2013-01-15 22:06:59

标签: c++ linux

如何让c ++程序在Linux中打开另一个程序?它是否与使用shell命令的Windows类似?

5 个答案:

答案 0 :(得分:3)

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

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

或者您可以手动执行此操作,方法是使用POSIX函数fork()分叉一个新进程,然后分配一个exec()系列,用其他程序替换进程映像。

我认为目前最简单的方法是使用我的Pstreams库。这将在新进程中运行命令,并使用与iostreams兼容的接口将管道连接到其stdinstdoutstderr中的任何一个。这比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有几个变量,请在手册页中查看。