2017-08-01 39 views
2

所以我在C++中发现我可以使用popen()方法来运行一个命令并打开一个流,以便我可以读取它的输入和输出。 这适用于我正在使用它,但它困扰我,它将一个命令传递到外壳为了做到这一点。C++:如何在不传递命令的情况下执行文件?

我想知道的是,如果可以在给定文件位置的情况下执行可执行文件。然后我需要能够读取程序的输出。我可以在不向shell传递命令的情况下执行此操作吗?

我只是对不同shell的兼容性有所担忧。如果我设计我的程序时采用BASH环境,如果它是使用Bourne Shell或CSH运行的话,它可能最终会失效吗?或者我只是在过度使用它?

+4

除了相当无用的std :: system()之外,没有可执行程序的可移植方式。有很多操作系统特定的方法来做到这一点。 –

+3

使用'exec'函数之一。如果您希望原始程序继续执行,请与'fork'组合。 –

+0

谢谢Jesper和Douglas。 exec和fork命令正是我所需要的。我一定会考虑使用他们和管道为我的应用程序 –

回答

1

执行任何程序都是operating system特定(几乎根据操作系统的定义)。阅读免费下载的Operating Systems : Three Easy Pieces了解更多信息。

你只能关心一个特定的操作系统,如Linux(或OS类)。然后,我建议关心POSIX系统,并使用像posix_spawnfork的基元,然后再使用一些exec等。Advanced Linux Programming给出了很好的解释并可以免费下载。

或者你可以使用一些框架库像POCOQt等等都提供了各种抽象来运行一些OS“中性”的方式计划(针对一些常见的操作系统-Linux,Windows中,MacOSX-他们支持)。

+0

谢谢,这很好地回答了我的问题。 –

相关问题