问题标签 [execve]
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 - 使用带有 execve 的新路径来运行 ls 命令
我正在尝试使用 execve 来运行 ls 命令。目前我正在使用以下参数运行它:
我期望这样做是使用我的新 env_args 运行 ls 命令,这意味着它将在我的 PATH 中查找 ls。然而,这段代码实际上并没有做任何事情,当我运行代码时,它只是返回到我的命令提示符而没有输出。
使用相同的 args[] 我正在使用 execvp 和 ls 工作并搜索了我当前的路径。
你能告诉我我做错了什么吗?
我想做的是编写我自己的 shell 程序,我可以在其中创建和导出自己的环境,并让 exec 使用我在 char** 中定义的环境。本质上,我正在编写自己的函数来对 env_args 进行操作以添加和删除变量,当我调用 exec 时,我希望能够在 {"ls", "-l", NULL} 上调用 exec 并让它查看我的新环境名为 ls 的有效程序的路径变量。我希望这能更好地解释我正在做的事情。我不认为 extern environ var 在这种情况下对我有用。
c - 了解 execve 和设置环境变量的要求
我们在解释我们的老师时遇到了很多麻烦。我们要求澄清并从他那里得到以下回复
对于 execve,向它发送一个使用导出变量设置的环境,并创建一个内置命令来生成 /bin/bash 的子 shell,这样您就可以使用 env 查看导出的变量。
(他在这里谈论创建我们自己的环境变量。)
是的,创建你自己的。您可以在 shell 启动时复制 environ 并仅添加导出的变量
这与我在 Stack Overflow 上的以下帖子有关(阅读其他帖子将帮助您了解我想要做什么):
我们对此感到非常困惑。再一次,我将解释我们现在正在尝试做的事情。与您的 Linux shell 执行此操作的方式类似,我们需要编写自己的程序来设置环境变量,如 PATH 和 USER 以及用户想要定义的任何其他变量。
您将如何调用它的一个示例是(在程序提示符下):
这将创建一个看起来像“dog=spike”的环境变量
更重要的是,我们需要能够设置自己的 PATH 变量并将其发送到exec
命令。这是令人困惑的部分,因为根据我们所有的问题,我们不明白我们应该做什么。
c - C、execve 和参数中的 UNIX 简单 shell
代码的基本思想是读取用户输入的命令(在read_command()
函数中完成)(例如:)ls -l
。然后我将输入字符串分成小字符串并将它们存储在一个数组中。关键是将命令存储在参数[0](例如:ls)中,将参数存储在参数[1,2,3等]中(例如:-l)。但是,我认为我execve()
错误地执行了该功能。
c - 执行路径搜索?
我想从我的代码中执行一个程序,并为它提供环境变量和参数。AFAICT,execve
是正确的选择。
但是,execve
接收一个path
参数,而不是 a filename
,这意味着它期望第一个参数是可执行文件的路径。
我知道我可以解析$PATH
自己找到路径,但真的,没有其他选择吗?没有其他人在某个地方实现它供我使用吗?
iphone - 在 setuid iPhone 应用程序中加载 MobileSubstrate
我的 iPod touch (Installer4) 上有一个根应用程序,我希望它加载 MobileSubstrate,这样我就可以开始进行调整以修复它的错误。我知道根应用程序有一个中间可执行文件,能够在应用程序不崩溃的情况下对其设置 6755 权限,在安装程序的情况下,它被命名为 Scythe。我尝试制作一个新的来使用 execve() 加载 MobileSubatrate,但没有成功。该应用程序不会崩溃,它仍然是 root,但 MobileSubatrate 不会加载:/(我知道这是因为 Activator 不起作用)。
这是我的 Scythe.c(基于来自 Icy 的 Trichlorotrifluoroethane.c):
如您所见,我研究了如何使用 execve() 加载 dylib,并且找到了 LD_PRELOAD 和 LD_LIBRARY_PATH,但两者都不起作用。而且我没有安装程序的源代码来执行 dlopen("/Library/MobileSubstrate/MobileSubstrate.dylib", RTLD_LAZY),无论如何,如果我有它,我不会问这个问题。
我希望有人能解决这个问题。
bash - “sh -c”不接受额外参数的问题,UNIX,使用 execve()
我正在尝试找出如何使用sh -c
或bash -c
正确使用。
我可以轻松地运行一个简单的命令,比如 "sh -c ls"
不带参数。
当我尝试添加参数时,问题就来了。要做ls -ltga
,我必须做:
这不会是一个大问题,除非我正在尝试编写自己的小型 shell 程序,并且当我使用时,execve
我尝试:
它给了我一个错误,说它在找到下一个之前达到了 EOF'"'
我也试过:
它返回给我说它找不到名为的文件/脚本"ls -ltga"
有人知道我做错了什么吗?
c - execve() 无法在 C 中启动程序
我正在尝试在 Linux 上使用execve()
from生成一个新进程。unistd.h
我尝试将以下参数传递给它,execve("/bin/ls", "/bin/ls", NULL);
但没有得到任何结果。我也没有收到错误,程序就退出了。发生这种情况有原因吗?我尝试以 root 和普通用户身份启动它。我需要使用的原因execve()
是因为我试图让它在这样的程序集调用中工作
谢谢!
c - execve("/bin/sh", 0, 0); 在管道中
我有以下示例程序:
我和当我在没有任何管道的情况下运行时,它会正常工作并返回一个sh
提示:
但这在管道中不起作用,我想我知道为什么会这样,但我无法找到解决方案。示例运行如下。
我认为这与这样一个事实有关,即以这种方式gets
清空接收 EOF 并在没有错误消息的情况下立即退出。stdin
/bin/sh
但是我该如何解决这个问题(如果可能,不修改程序,如果不删除,则不删除gets
),以便即使我通过管道提供输入,我也会得到提示?
PS 我在 FreeBSD (4.8) 机器 DS 上运行它
c++ - SIGKILL 杀死进程
我有一个在执行程序后立即被杀死的进程。这是编译后的可执行文件的代码,它是一个小程序,它从标准输入(通常是描述性文件)中读取几个由数字表示的图,并使用 Prim 算法找到每个图的最小生成树(它没有显示结果,它只是找到了解决方案)。
我了解到我必须使用 strace 来查找发生了什么,这就是我得到的:
我正在运行 ubuntu,这是我第一次遇到这种类型的错误。该程序应该在从输入中连续读取两个零后停止,我可以保证我的图形描述文件中有。即使我执行程序而不将输入重定向到我的图形文件,也会出现问题。
c++ - execve() 是做什么的?
execve() 究竟是做什么的?我试过查看文档(http://linux.die.net/man/2/execve),但考虑到我对 linux 很陌生,而且这种编程方式没有多大意义。我想要做的是能够执行这个命令:
我可以执行以下操作吗(其中 someport 是一个数字,例如 4444)