问题标签 [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.
c - 处理来自 execvp() 的错误
我对如何处理来自execvp()
. 到目前为止,我的代码如下所示:
我试图解决三种情况:
myCommand,myArgumentVector
有效并且命令正确执行。myCommand,myArgumentVector
是有效参数,但在执行myCommand
.myCommand,myArgumentVector
是无效参数(例如myCommand
无法找到)并且execvp()
调用失败。
我主要担心的是父进程将拥有正确处理子错误所需的所有信息,我不完全确定如何做到这一点。
在第一种情况下,程序可能以退出状态 0 结束。这意味着如果我要WIFEXITED(status)
在宏中调用,我应该得到true
. 我认为这应该可以正常工作。
在第二种情况下,程序可能以非 0 的退出状态结束。这意味着如果我要调用,WEXITSTATUS(status)
我应该得到子调用的特定退出状态myCommand
(如果这不正确,请告知)。
第三种情况让我很困惑。因此,如果execvp()
失败,则错误将存储在全局变量errno
中。但是这个全局变量只能从子进程访问;父母作为一个完全独立的过程,我认为看不到它。这是否意味着我应该打电话exit(errno)
?还是我应该在这里做点别的事情?另外,如果我打电话,我exit(errno)
怎么能从父母那里得到errno
回来的价值?status
我的掌握仍然有点脆弱,所以我正在寻找的是确认或纠正我对如何处理这三种情况的理解。
c - 使用 execvp 执行 grep,从管道中读取
我正在尝试模仿shell命令行的功能:
通过创建一个子进程,grep
在其中执行,并从父函数将环境变量写入连接到grep
. 但这不起作用;该grep
函数不断打印我写入它的所有内容(无论我grep
使用什么字符串)。这是代码(我删除了错误代码的检查和处理):
c - 由 execvp() 启动的进程使用一些命令退出
我使用此代码运行一些 shell 命令,但它在ls
命令后退出。:我错在哪里?
c - execvp 失败,有多个参数或没有参数
我正在使用 C 语言开发一个非常基本的 UNIX shell。在这个项目中,我尝试使用fork()
并execvp()
执行实际的 shell 命令。不过,我遇到了一个问题,它似乎可以与具有单个参数的命令一起正常工作(例如ls -l
并且echo howareyoutoday
工作完美),但具有多个参数的命令无法执行(echo how are you today
不运行)。我将向您介绍我的代码/基本原理,以帮助您找到此问题背后的原因。
因此,它从fork()
创建子进程的基本调用开始。在那个子进程中,我为argv
数组中的第一个元素分配内存。token
来自先前strtok
调用的分配给argv[0]
. 生成一个新元素token
并将其添加到下一个argv
元素。对剩余的令牌重复此过程。
一旦argv
数组完成,execvp
就会调用,第一个参数包含命令名称,第二个参数是整个argv
数组。如果命令执行失败,execvp
将返回并打印一条消息表明这一点。
我无法弄清楚为什么我会遇到上面提到的多个参数问题。任何帮助或建议将不胜感激!
作为参考,完整程序的代码如下:
linux - 在c中使用execvp系统调用在后台运行程序
我正在编写一个程序,它接收命令名称和参数以及可选的字符串“bg”,如果传递了“bg”字符串,我的程序应该在后台执行命令及其参数,如果不在前台,这是我的代码:
输入示例:
我的代码在 bg 参数未通过时有效,但在通过时我尝试用“&”替换它,但它没有用,感谢各位的帮助。
c - 在 C 中的 dup2 之后使用 execvp 运行 pico
我想要做的基本上是使用 dup2 在管道的写入端写入子进程的标准,并使用 execvp 运行 pico,父进程将读取文件的读取端并对其进行处理并将其写入标准输出并在 pico 中显示。这是在 Linux 机器下运行的。
我遇到的问题是,当我尝试执行write()
标准输入时,pico 不会显示在终端中,并且我得到了这个奇怪的连续“S”(来自 r)输出,如下所示:
每当我尝试按任意键时,它都会添加更多的 "S" 。我对这一切都很陌生,任何帮助将不胜感激。
c++ - execvp 的问题
我正在尝试创建一个简单的外壳。这是我到目前为止所做的:
当我运行代码并多次输入“ls”时,我得到了不同的结果:
我不知道为什么会这样。我想我的字符串拆分功能远非理想。你能帮我修一下吗?另外,如果您有任何提示,请随时提供。我是一个菜鸟,我会很感激任何帮助。谢谢你。
c - 为什么我的流程会这样?
它是 c 中 linux shell 的一些实现。由于我添加了后台进程支持,因此我有一些我无法理解的输出。这是代码:
当我执行像“ls &”这样的 bg 命令时,输出如下:
为什么父进程与 lire() 函数重叠并在第一次执行后直接进入 execProg 函数?
c - 如何在 if-else 语句中使用多个 execvp 调用?
我正在创建一个 shell,它可以从终端上的用户输入执行命令。它还具有历史功能。
现在一切正常。我唯一坚持的部分是,如果用户输入“!!” 最近的命令应该执行,如果用户输入“!n”,第 n 个命令应该执行。但是,当我运行它时,当我输入这些命令时,什么都不会执行。
get_recent_command() 和 search_in_list_for_n() 函数正在返回正确的命令,但是当我将这些函数的结果放在 execvp() 调用中应该出现的“args [0]”位置时,什么也没有发生。
没有把握。提前致谢!在将命令添加到列表之前,我尝试使用 null 终止命令,但它仍然不起作用。我不知道我还能做什么......提前非常感谢你!
注意:从站点重用的链接列表代码:http ://www.thegeekstuff.com/2012/08/c-linked-list-example/
c - 如何重定向 execvp 调用生成的 gcc 错误?
现在,我正在开发一个项目,在该项目中我从命令行自动编译 .c 文件。为此,我使用以下代码:
当我为 gcc 输入无效参数(即无效文件名)时,它会将 gcc 错误消息打印到终端。如果我想将此错误重定向到文件,我将如何捕获它?