问题标签 [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.

0 投票
2 回答
54 浏览

c - 在 linux 上用 c 运行程序时遇到问题

为什么我没有成功

在此处输入图像描述

我希望我的程序将执行路径“名称”中的程序。现在它什么都不做。

我不明白我的错误在哪里?我在 linux 上用 C 语言编程,并用 gcc 编译它

非常感谢!!

0 投票
0 回答
36 浏览

c - 无法报告成功复制状态和时间复杂度不好?

我的代码是将任何文件从一个文件夹复制到另一个文件夹。以下是我的方法,但我不确定这是否是最好的方法?我的代码有两个问题:

1. 找不到成功复制的信息?

我厌倦了父进程中waitpid的提取状态(0表示成功)但即使USB(目标)被移除并尝试操作它抛出相同的0值即成功我如何报告成功复制?

2. 复制 1GB 数据需要 10-15 分钟,如何提高速度或时间复杂度?

0 投票
1 回答
234 浏览

c - 预先确定哪个二进制文件将通过 execlp 运行

编辑#1


到目前为止,“可能的重复”不是重复的。他们测试$FILEin的存在$PATH,而不是提供第一个有效结果的完整路径;最佳答案使用命令行命令,而不是纯

原始问题


在所有 exec 系列函数中,有一些会进行$PATH查找而不需要执行二进制文件的绝对路径。

来自man exec

如果指定的文件名不包含斜杠 (/) 字符,则 execlp()、execvp() 和 execvpe() 函数会复制 shell 在搜索可执行文件时的操作。在 PATH 环境变量中指定的以冒号分隔的目录路径名列表中查找该文件。如果未定义此变量,则路径列表默认为当前目录,后跟 confstr(_CS_PATH) 返回的目录列表。(此 confstr(3) 调用通常返回值“/bin:/usr/bin”。)

是否有一种简单直接的方法来测试第一个“执行的完整路径”将评估为什么,而不必手动遍历$PATH环境变量中的所有元素,并将二进制名称附加到路径的末尾?我想使用“事实上的标准”方法来估计要运行的二进制文件,而不是重写过去可能已经实施过多次的任务。

我意识到这不能保证,因为有人可能会通过错误的脚本、TOCTOU 攻击等使此检查无效。我只需要一个像样的近似值来进行测试。

谢谢你。

0 投票
1 回答
536 浏览

c - Linux ubuntu下c中的execl命令

我想从 C 应用程序调用可执行文件。这是我的代码:

其中 IP 和“A”应该是 argv[1] 和 argv[2]

这个名为 DNS 的应用程序应该写一个文件,但是当我像这样用 execl 调用它时它不起作用。任何人都可以帮助我吗?

0 投票
1 回答
3805 浏览

c - C获取使用execl启动的进程的pid

我正在使用指令启动一个流程

softCopia 只是一个将整数写入文件的虚拟对象。

我想知道我怎样才能得到这个过程的pid?

0 投票
2 回答
577 浏览

c - 如果我在 parent 和 child 中 fork 和 exec 会发生什么?

这是我的名为 server.c 的示例代码(已删除包含以保持简单)。

这是从上述程序中执行的客户端代码。

现在让我解释一下我认为会发生什么以及我实际得到的输出。

在服务器中,我们进入 for 循环。在第一次迭代中,我们点击了 fork()。此时有两个进程,即父进程和第一个子进程。现在我们从这两个进程中执行一个名为“client”的程序。此客户端代码仅打印一些信息。所以当我运行这个服务器程序时,我应该得到两行,对吧?一条来自父母,另一条来自孩子?但是我只打印了一行,使用 strace 后我发现只有父母在打印东西,而不是孩子。那么这是为什么呢?

是因为孩子已经死了(这是正确的术语吗?),因为它被执行了,就不能再收集孩子了吗?如果是这样,孩子会怎么样?变成丧尸了吧?它会被init收集吗?即便如此,为什么它不会在像僵尸一样结束之前打印出那条线?

0 投票
0 回答
385 浏览

c - C - 使用 dup 将标准输出重定向到 execl(二进制文件)的输入

我需要以下程序的帮助,它应该 fork() 两个孩子,child1 应该发送两个随机数,在一个用空格分隔的字符串中,到 child2 槽管道,等待 1 秒然后再做一次,直到它收到来自父母的 SIGUSR1 (父母在 5 秒后发送)。child2 应该运行“main.exe”二进制文件,将管道的输出重定向到 main.exe 的输入,并将 main.exe 的输出重定向到 out.txt 文件。main.exe 二进制文件本身就可以正常工作,它位于应用程序文件夹中。

这是学校的作业。我已经设法使用写入和读取功能将字符串从 child1 发送到 child2。但是部分作业是每次我重定向输出或输入时,我必须使用 dup(int a, int b) 函数。我也应该让 child1 接受?使用 sigaction 的 SIGUSR1,(当收到孩子 1 应该在 stderr 上打印 'TERMINATED' 并终止)-> 我不知道该怎么做。该程序成功完成但似乎没有做任何事情,child1 中的 printf 部分似乎无法按我的预期工作。任何帮助将不胜感激。

0 投票
2 回答
2142 浏览

c - c程序中execlp()的使用

我对 c 中的 execlp() 有疑问。

我有以下程序:

它应该打印用户名@hostname 文件夹$,然后将 linux 命令作为参数“ls -al”,然后它应该使用 execlp() 启动它,但它不像我认为的那样工作。

我在这里阅读了有关此命令的所有文章,但我想,我仍然不明白如何使用它。

我会很感激有人的帮助。

0 投票
1 回答
83 浏览

c++ - iwlist 在使用 execl 调用时尝试扫描所有接口

我正在我的 Ubuntu PC 上使用 C++ 执行标准 fork/execl 以扫描 Wi-Fi SSID。使用excel调用时,接口名称似乎没有生效。

这成功了,但我在标准错误中得到了这个:

lo 接口不支持扫描。

enp0s25 接口不支持扫描。

看起来 iwlist 正在尝试扫描所有接口。

相反,如果我这样做:

我没有在标准错误中收到这些消息。

在我的 execl 调用中我做错了什么吗?

0 投票
1 回答
802 浏览

c++ - 使用busybox的execl中的tar命令。错误:没有这样的文件或目录

我有一个基于 linux 的设备,它使用 QT 框架运行 c++ 代码。使用 QProcess 不是一个选项,因为我们没有编译 QT 来支持它。

我无法tar.gz使用 execl() 创建存档。

它返回-1(失败)并且错误是"No such file or directory"

代码示例:

输出:

PID=877

PID 为 0

执行完毕,execStatus= -1

错误:没有这样的文件或目录

从叉子恢复

权限:

日志.txt 666 | 忙箱 755

如何获取更多错误详细信息或这里有什么问题?

Edit: 所以,过了一会儿,我试着只做 .tar 存档,它奏效了。然后我尝试进行 .gz 压缩,它也有效。

解决方案:因此,至少在我的情况下,解决方案是分两步执行 tar.gz(需要两个过程):

execl("/bin/busybox", "/bin/busybox", "tar", "-cvf", "/opt/appl/data/logs.tar", "/opt/appl/data/logs.txt", (char*) NULL);

execl("/bin/busybox", "/bin/busybox", "gzip", "/opt/appl/data/logs.tar", (char*) NULL);