c++ - execlp 系统调用不打印到标准输出?

标签 c++ system-calls

我正在使用 execlp 运行 wc 命令,使用文件作为额外参数来读取字数。这个 unix 命令:

wc -l HelloWorld.class

输出:7 HelloWorld.class

但是在我使用 execlp 的 C++ 代码中,这行代码:

int rc2 = execlp("/bin/wc", "wc", "-l", "HelloWorld.class",  (char *) 0);

似乎不起作用(它是空白的)。

我只运行了那一行代码,但得到了一个空白输出。 c++ 文件的目录与我执行 unix 命令的目录相同。

最佳答案

虽然它与您的具体问题无关,但计算 .class 文件中的行数意义不大。您可能想在 .java 文件或其他一些文本文件上执行此操作。

对于您的特定问题,您应该首先检查 /bin/wc 是否是该可执行文件的正确路径。在我的系统 (Debian) 上,它是 /usr/bin/wc

因为 execlp 无论如何都会复制路径搜索功能(如果它不包含 / 字符),您可能只使用:

int rc2 = execlp ("wc", "wc", "-l", "HelloWorld.class",  (char *) 0);

如果你想检查路径,在 shell 中使用类似 which wc 的东西,它应该让你知道实际的可执行文件在哪里。

关于c++ - execlp 系统调用不打印到标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27886244/

相关文章:

c++ - QStackedLayout 隐式显示添加的小部件

java - 服务器端口未收到 UDP 消息

c++ - 如何在 C++ 中声明一个对象,该对象具有来自另一个类的类数据以及带参数的构造函数

c++ - 模板化 "find-and-erase"函数出错

c - 当文件已经存在时,用 O_CREAT 打开返回 (-1)

c++ - 插入USB时如何触发事件

linux - 为什么 _exit(0)(通过系统调用退出)阻止我接收任何标准输出内容?

c - 使用可加载内核模块的系统调用拦截中的参数似乎已损坏

linux-kernel - 为什么 x86-64 Linux 内核源代码中的系统调用编号在 334 和 424 之间存在差距?

makefile - 在 Fedora 17 中使用 'make' 命令编译时出错