当前位置: 首页 > 面试题库 >

如何在带有参数的linux中的C代码中执行外部程序?

井洲
2023-03-14
问题内容

我想在C代码中执行另一个程序。例如,我要执行命令

./foo 1 2 3

foo是存在于同一文件夹中的程序,并且1 2 3是参数。 foo程序创建一个文件,该文件将在我的代码中使用。

我该怎么做呢?


问题答案:

使用一种简单的方法system()

#include <stdlib.h>
...
int status = system("./foo 1 2 3");

system()将等待foo完成执行,然后返回一个状态变量,您可以使用该变量检查例如exitcode(命令的exitcode乘以256,因此将system()的返回值除以该值即可得到实际的exitcode:)int exitcode = status / 256

的联机帮助页wait()(在man 2 waitLinux系统上的第2部分)中列出了可用于检查状态的各种宏,最有趣的是WIFEXITEDand WEXITSTATUS

另外,如果您需要读取foo的标准输出,请使用popen(3),它返回一个文件指针(FILE *);这样,与命令的标准输入/输出进行交互就等于从文件中读取或写入文件。



 类似资料:
  • 问题内容: 我只想知道哪种是在C ++中执行外部命令的最佳方法,如果有的话如何获取输出? 编辑 :我想我不得不告诉我我是这个世界上的新手,所以我认为我需要一个可行的例子。例如,我想执行如下命令: 我怎么做? 问题答案: 使用功能。 示例(不完整,生产质量代码,无错误处理):

  • 我想在单击javafx应用程序的按钮(代码中不包含btn事件)后启动带有Arguments的外部程序(其中一个参数是将Config文件加载到该外部程序),但我想知道为什么它一直给我错误! 我的IDE是InjellJ IDEA社区版 我知道这个问题是重复的,但是在这个平台上给出的所有例子中,我都没有成功尝试过,但是我的代码包含配置文件作为论证的一部分 这是代码 当我删除“exeargs”时,我得到错

  • 我正在尝试从groovy中使用shell命令< code > notify-send-t 2000 " Title " " Message " ,以下一种方式< code > " notify-send-t 2000 \ " Title \ " \ " Message \ "。execute()就可以完美地工作了。但是当我试图用表达代替信息时,似乎什么都不管用。下面是代码片段: 能帮我理解一下吗?

  • 问题内容: 我想在Linux上将所有文件作为单个参数传递,但是我不能这样做。 这工作 每个命令都传递一个参数,但是我希望所有命令都包含一个参数。 问题答案: 这是做到这一点的一种方法 或使用反引号 正如评论中指出的那样,这不适用于包含空格的文件名。在这种情况下,您可以使用 假设有两个名为“ 0 foo”和“ 1 bar”的文件,那么eval的结果将是所需的命令,文件名用双引号引起来: 如果文件名中

  • 问题内容: 我试图弄清楚如何在Linux中使用伪终端,实际上我想创建一个telnetd克隆,这是我在前面的问题中提到的。 我了解主终端和从终端的概念,并且对如何在C中使用syscall有基本的了解。 我的问题与打开从属/主文件描述符后的下一步有关。如何在奴隶中发射盖蒂?网上是否有 足够的 资源来使用forkpty(),openpty()或其他API? C语言中的一些示例会有所帮助。这是一个非常相似

  • 问题内容: 如何在Linux中从C执行Shell脚本? 问题答案: 这取决于您要对脚本(或要运行的任何其他程序)执行的操作。 如果只想运行脚本,这是最容易的事情,但是它也做其他一些事情,包括运行shell并让其运行命令(在大多数* nix下是/ bin / sh)。 如果您要通过标准输入来输入shell脚本或使用其标准输出,则可以使用(和)设置管道。这也使用外壳程序(大多数* nix下是/ bin