【问题标题】:running multiple execve functions in one c++ file在一个 c++ 文件中运行多个 execve 函数
【发布时间】:2019-01-18 22:01:05
【问题描述】:

我必须编写一个c++ 程序“计算文本文件中的行数、单词数和字节数”,所有这些都必须在一个新行中。

我必须在我的 c++ 程序中使用 wc 命令。我设法得到了行数:

char *envp[] = {NULL};
char *command[] = {"wc", "-l", filename.c_str(), NULL};
execve("/usr/bin/wc", command, envp);

在上述陈述之后,我有一个将“-l”替换为“-w”等等。但是我的程序在第一个execve() 语句之后立即结束。

即使在 execve() 语句之后,我如何让我的所有语句执行?

注意:这将是我第一次使用 c++ 程序运行系统命令。

提前谢谢你。

【问题讨论】:

  • char *command[] = {"wc", "-l", filename.c_str(), NULL}; 不是有效的初始化,“wc”可以是char const *,但不是char *
  • 我在数组 (char *)"wc" 中执行了类型转换。我决定从代码中省略所有类型转换,因为它们不是我遇到的问题
  • 该类型转换也无效,因为字符串命令指针指向的必须是可修改的。
  • 阅读 Advanced Linux Programming - 或更新的内容 - 然后是 syscalls(2) 和相关的 man 页面。另请阅读Operating Systems: Three Easy Pieces,了解有关操作系统的良好概述。
  • 感谢您的参考。

标签: c++ command system wc execve


【解决方案1】:

execve 将当前可执行映像替换为指定的映像,因此在成功时永远不会返回。如果要继续执行主程序,则需要先fork。或者使用像system 函数这样枯燥的东西。

【讨论】:

  • 谢谢。正如我提到的,我对此比较陌生,我将对 fork() 进行一些研究。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
  • 2023-02-07
  • 2017-05-06
相关资源
最近更新 更多