问题标签 [execl]
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 - 为什么 exec() 系列函数实际上返回一个值?
在一本关于 Linux 和 Unix 编程的书中,我发现了这个陈述(强调我的):
"所有函数(
exec()
-family)都在出错的情况下返回-1
。否则在成功执行时不会返回调用程序。因此,检查返回值是多余的;您可以直接继续执行错误例程。 "
这似乎符合相应的 Linux手册页:
"返回值 -
exec()
函数仅在发生错误时返回。返回值为-1
, 并errno
设置为指示错误。 "
因此,如果当前过程映像已成功替换为新的过程映像,则不应返回。只有在创建新图像时发生错误时,exec()
-functions 之一才会真正返回 ( -1
)。
反过来,而不是 fe 意味着:
一个人可以简单地做:
exec()
但是,如果调用者的进一步程序执行已经表明发生了错误,为什么 -family 的函数通常会有返回值呢?函数末尾的简单
return;
语句和相应的返回类型void
就足够了吗?只是为了适应常用方法/实践来始终检查返回值还是有不同的目的?
有关的:
c++ - 使用 execl 重定向标准输出的问题
我最初编写了一个在我的 Linux 上运行命令的小型 c# 服务器。该应用程序很好地捕获了命令的标准输出并将它们发送回客户端。然后我在 Linux 机器上的 c# 环境就出现了问题。所以我决定用 c++ 重写应用程序,但遇到了重定向或 execl 函数的问题。我的第一次尝试可以让我的重定向工作,但随后我发出了 execl 调用。所以我做了一些搜索,发现了一些有效的代码,如何从 execl 命令中捕获输出. 我对代码做了一些小的修改来测试我对 execl 调用的处理,它不会重定向 avrdude 的标准输出。我确实更改了函数 cmd_quem 来处理应用程序名称和参数并为 execl 返回错误。主函数调用 cmd_quem 两次,例如命令,然后是我的命令。我也颠倒了这两个函数调用的顺序,每次我对 avrdude 的调用都不会重定向标准输出,但在 c# 中它起作用了。
我知道 avrdude 的路径是正确的。似乎这些论点也通过 excel 传递,我不知道为什么。输出应该是尝试读取进程而不是命令行选项。任何帮助,将不胜感激。
有什么想法或建议吗?
我的程序输出是
我已经在 Gentoo 和树莓派盒子上测试了代码。覆盆子连接了一个函数式程序员,它是相同的输出。
c - 用 execl() 替换 system() :我什么时候需要使用 fork()?
我正在尝试从我的 C 程序中调用外部程序。我知道打电话system()
是个坏习惯。我一直在阅读有关如何使用execl()
或execv()
替换的内容system()
,但由于我的脑容量有限,我想请求一些示例和指导。
如果我要跑步
那么这是我应该做的吗?
我在 StackOverflow 上发现了一个关于替换为的类似问题system()
,execl()
但答案(3 票)没有谈论fork()
.
如何使用 execl 作为系统的替代品fork()
如果我正在等待子进程完成以便我自己的程序可以继续,我
是否需要?
我知道也有,execv()
但我有限的大脑会更喜欢execl()
,除非有人告诉我这样做有缺点。网络上的大多数示例使用 execv 而不是 execl,可能是因为当我搜索 execl 时,Google 一直在告诉我有关 MS Excel 函数的信息。
我将描述我的用例,但如果我在其他情况下需要它,我会更喜欢我的问题的一般答案,而不是针对我的情况的特定答案,例如“你为什么还要使用 $PROGRAM1 ?你应该下载 $PROGRAM2 !”
我正在为我孩子的 Kubuntu 系统拼凑一个 PyQt 应用程序,以将对某些网站 (youtube) 的 Internet 访问限制为每天一定的小时数。他可以主动关闭自己的上网,为以后节省上网时间;当他重新打开它时,我的应用程序将根据剩余时间设置 iptables 规则。理想情况下,我会在我的 Python 应用程序中调用“iptables”,但 iptables 需要以 root 身份执行(我不想 sudo 输入密码或设置无密码 sudo 用户帐户),并且不允许使用 Python 脚本以 setuid root 身份运行。因此,我正在编写一个 C 程序,其唯一功能是以 setuid root 身份运行并将(经过清理的)参数传递给 iptables:
几十年没做C编程了。将不胜感激一些关于电话的牵手execl()
。谢谢。
c - Windows10平台_execl()函数的使用
_execl() 返回 -1 和错误消息“没有这样的文件或目录”,即使给定的文件在那里。当我直接在命令提示符下运行 gzip 命令时,它可以工作。我无法理解我在这里缺少什么。
有人可以举例说明如何使用此功能,我在寻找解决方案时发现了另外一个 API system(),但在使用之前我想知道这两者在 Windows 平台上的区别是什么?
c - 为什么一个 exec 应该“sh -c a.out”而不是 a.out 本身?
我正在研究 Applepopen()
在https://opensource.apple.com/source/Libc/Libc-167/gen.subproj/popen.c.auto.html上的实施,并注意到他们这样做execl(_PATH_BSHELL, "sh", "-c", command, NULL)
而不是execl(_PATH_BSHELL, command, NULL)
.
为什么您想要(或应该)执行一个可执行文件,例如a.out
通过sh -c
而不是可执行文件本身?
如果您执行sh -c a.out
而不是仅执行a.out
自身,那么实际a.out
进程是否最终成为“孙”进程而不是子进程?
c - 如何使用 execl 运行管道并将结果写入文件?
我尝试在 C 中做这样的事情,但我不知道如何:(:
与执行。
现在我只能做这样的事情:
它将屏幕转储写入文件 xwd1.xwd 但我不知道如何使用转换制作管道。感谢所有信息和帮助。
c - c - execl`d 程序不返回提示
编辑:问题已在评论中回答
所以,我正在研究管道。长话短说,我有两个程序:
- 第一个程序创建 a
pipe
和两个fork
s:首先fork
关闭read
描述符并将一些东西写入write
一个(然后关闭它),第二个fork
关闭write
一个,dup2
在read
管道一侧到标准输入(结束read
侧本身)和execl
第二个程序,给出一个文本的大小第一个fork
作为参数写入;父母关闭管道两侧和waitpid
s 为孩子是execl
d (第二个)。 - 第二个程序只是
read
从它的标准输入(管道端)中取出东西并将write
其发送到标准输出,然后关闭管道端以防万一。
在这样的设置中,一切都按我的预期工作,但是当我waitpid
在第一个程序中删除(或者只是等待第一个写入而不是第二个的子程序)时,第二个程序的行为很奇怪 - 它执行到最后,通过所有IO(也就是printf
之前exit
被执行),然后不给我提示返回。也就是说,终端看起来就像程序在等待来自标准输入的输入。如果我在没有 的情况下执行第一个程序execl
,那么一切正常,如果我只使用一个参数执行第二个程序,那么它只会等到输入被提供给标准输入(因为它应该不是管道的一部分)案子)。
据我所知,当父母终止时,孩子被“继承”并被init
教育wait
。但即使它不是,也就是说,即使它仍然是僵尸,那仍然会很奇怪——为什么在我明确等待之前我不能得到我的提示?
代码如下(正常工作的设置):
第一个程序
第二个节目
先感谢您!
c - 如何使用 execl 来管理多个进程
我还是操作系统领域的新手。目前我正在尝试在 C 中实现一个 shell,主要功能之一是管道的能力。我的问题是:在执行 fork dup 和其他需要的过程之后,如果我有多个参数,我应该如何在 execl 中编写。例如,一旦我将有一个管道 3 个进程,例如 sth | 某事 | sth 其他时候有两个喜欢的 sth | 某事
bash - [已解决] execl("/bin/bash", ...) 的不可预知的行为
我正在编写一个简单的 C 程序,firefox
如果没有firefox
打开窗口,它将启动,否则firefox
窗口将被聚焦。我xdotool
在 shell 脚本中使用来执行此操作并在我的 C 程序中执行 shell 脚本。
这是C程序的关键部分:
文件F.sh
如下:
但是,当我运行 C 程序时,它有时会按预期工作,无论是否firefox
已打开。但有时当firefox
它已经打开并且我运行程序时,它会打开一个新窗口firefox
并将空行回显到/home/simon/log
.
我认为这不是 shell 脚本的问题,也不是xdotool
. 因为每次我直接在终端中运行 shell 脚本,或者bash /home/simon/F.sh
在终端中运行时,它总是给我正确的响应。我怀疑这是执行环境的问题。谁能给我解释一下这种现象?
#更新
这个问题通过查看xdotool
.