【问题标题】:How can I run system commands in C/C++ using `execl()`, passing the function arguments only as a command line, not as an executable file?如何使用 `execl()` 在 C/C++ 中运行系统命令,仅将函数参数作为命令行而不是可执行文件传递?
【发布时间】:2020-02-07 12:28:42
【问题描述】:

我想在 C/C++ 程序中执行这个命令:stat -c "%F %A %n" *filename goes here* 文件名存储在main函数的argv[1]中。

我试过execl("/bin/stat", "stat", "-c", "\"%F %A %n\"", "file", NULL);

execl() 命令应该如何实现结果?

【问题讨论】:

  • 是的,我当然做到了,我尝试将命令分割成不同的参数,但它要么没有输出,要么写入stat not found。
  • 我什至无法使用system() 函数运行它。
  • @churill 请不要使用建议人们“谷歌搜索”的 cmets 或答案。大多数情况下,人们访问这些问答网站是因为谷歌搜索将他们引导至此处。
  • @grovkin 我发现知道这一点很重要。如果我知道有人在询问之前搜索了文档并尝试了一些东西,那么帮助他会容易得多。不幸的是,许多人在没有先做一些研究的情况下提出问题。现在也很清楚他尝试了什么。抱歉,我现在的意思是听起来很粗鲁。
  • @BalogSzilárd 感谢您展示您已经尝试过的内容!您是否打算将文件名从argv[1] 插入到您有参数"file" 的位置?也许你可以做execl("/bin/stat", "stat", "-c", "\"%F %A %n\"", argv[1], NULL);

标签: c++ c linux exec execl


【解决方案1】:

您的命令应如下所示:

int res = execl("/bin/stat", "stat", "-c", "\"%F %A %n\"", argv[1], NULL);
if (res == -1) {
   perror("/bin/stat");
   exit(1);
}

然后 perror 会告诉你:

/bin/stat: No such file or directory

您会意识到 stat 位于 /usr/bin 中,或者使用 execlp 是个好主意。

【讨论】:

  • 好的,所以我基本上跳过了错误检查,对吧?
  • 您没有看到错误,因为您没有检查它。在这种情况下,实际错误是路径错误。
【解决方案2】:

我发现了我的问题。 stat 命令位于/usr/bin 而不是/bin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 2013-12-23
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多