问题标签 [execvp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
187 浏览

c - 管子和叉子的问题

我正在制作一个搜索文件并将其结果发送到其他命令(如管道)的程序。ls | 排序当我运行程序时没有任何反应。我认为的问题是孩子等待父母停止在 SO 缓冲区中写入以开始阅读。这是它发送到标准输出的内容,也是管道应该发送给其他命令的内容。

我不明白问题是什么。


0 投票
3 回答
1954 浏览

c++ - 程序在 execvp(command.argv[0], command.argv) 后停止

我正在编写一个小 shell 程序,它接受一个命令并执行它。如果用户输入了无效命令,则 if 语句返回 -1。如果命令是正确的,它就会执行命令,但是一旦它执行了命令,程序就会结束。我做错了什么是不执行它之后的代码行?我已经用 ls 和 cat 命令测试了 execvp(command.argv[0], command.argv),所以我很确定它可以工作。这是我的代码。

0 投票
1 回答
5258 浏览

c - 如何将 execvp() 与 grep 一起使用?

我正在尝试 exec() 在我的 C 程序中调用 grep 。我正在寻找给定文件中字符串模式的出现次数,这可以通过以下方式实现:

这给出了预期的数字输出,例如:

但是,我希望等效的似乎有一些困难。以下代码:

结果是:

有两个问题。首先,我只想要数字——而不是找到它的文件。其次,我不确定为什么它试图断言 -e 标志需要是一个文件。如果我将参数列表切换为:

然后我回来:

我不确定从哪里开始寻找为什么会发生这种情况。我也不确定为什么命令行的 grep 调用的输出只是一个数字,但 exec() 的 grep 调用会输出文件名和数字。

任何帮助,将不胜感激!谢谢你。

编辑:

解决方案:在参数列表中包含程序名称,或者简单地使用 system() 调用。还有,RTFM。

0 投票
2 回答
2223 浏览

c - 为什么 execvp 的 argv 参数不是 const?

execvp 是这样定义的:

这排除了使用这样的代码:

这是一个偶然的遗漏吗?围绕这个进行 const_cast 是否安全?还是一些 execvp 实现实际上在该内存上乱写?

0 投票
1 回答
231 浏览

c - 在c中的PATH环境中搜索应用程序

我正在尝试按名称在 c 中执行应用程序,在运行之前我想知道该名称是否合法。有没有办法签入c,并找出应用程序是否存在于PATH环境中?

谢谢

0 投票
2 回答
1761 浏览

c - 构建一个 C shell。execvp 返回“没有这样的文件”错误。使用 malloc 即时创建 argv 数组

我正在构建一个 shell,但系统调用“execvp”遇到了一些问题。我看到了有关此主题的其他一些问题,但它们含糊不清,似乎没有得到完全解决(提出这些问题的人都没有提供太多信息,也没有得到好的答案)。

显然我有自己的命令行,我正在从标准输入读取用户输入,比如

我正在构建一个 args 数组作为 char ** 并且数组本身可以工作(我认为),因为当我打印出函数中的值时它显示

所以,我在我的进程中调用 fork 和 execvp(cmnd, args),其中 cmnd 是“ps”,args 如上所述,perror 等。

我明白了

我需要放入 $PATH 变量吗?我在做其他奇怪的事情吗?

这是我生成 args 数组的代码:

(emalloc 和 erealloc 只是内置错误检查的 malloc 和 realloc)

那么我这样做:

就像我上面说的,当在我的进程中调用 execvp 时,当我提供任何参数但没有它们时它会失败(即当 argv == {'ps', NULL} 时)

如果您需要更多信息,请随时询问。我需要解决这个问题。

0 投票
1 回答
1223 浏览

c - fork() 和 execvp()

我在尝试使用fork()and执行进程时遇到问题execvp()。我有一个结构Pcb,它有一个参数数组(args):

其中第一个是要执行的程序的名称。

这是我的叉子功能

注意:process->args[0]只是一个名为“process”的常量字符串,它指的是当前目录中名为“process”的编译程序。
没有论据。

当我使用 gdb 并遵循子进程时,它只是说:

为什么会收到 SIGSTP?

0 投票
2 回答
1230 浏览

c - C - execvp() 第二个参数

execvp() 的第二个参数究竟做了什么?

0 投票
1 回答
110 浏览

arguments - execvp 没有得到参数

我的代码是:

参数是char* args[]

命令是char* command

例如 for ls -l, command 是 ls 而 args 是 -l 但是为什么在执行之后

execvp(command, args)我得到的唯一结果ls不是ls -l??

0 投票
2 回答
204 浏览

c - 当您从 execvp 接收输出时,从管道中读取适量的数据

这只是一个更大程序的一小部分,但我试图从 execvp 获取输出,我已经正确设置了 execvp dup2,并将其引导到管道中。当涉及到使用 read 读取管道的全长时,我的问题就出现了,我不知道execvp每次的输出有多大,因为它可能因输入而异。

我尝试了几种不同的读取大小,但要么不够,要么最后我得到随机垃圾空白其他方式去获得输出。

整个程序是服务器的一部分的更多无用信息。我正在制作服务器和客户端..启动服务器给客户端一个终端命令,它通过 INET 流将其发送到服务器,并将输出发送回客户端以显示所有没有 stdio 的输出。