问题标签 [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 - 无法报告成功复制状态和时间复杂度不好?
我的代码是将任何文件从一个文件夹复制到另一个文件夹。以下是我的方法,但我不确定这是否是最好的方法?我的代码有两个问题:
1. 找不到成功复制的信息?
我厌倦了父进程中waitpid的提取状态(0表示成功)但即使USB(目标)被移除并尝试操作它抛出相同的0值即成功我如何报告成功复制?
2. 复制 1GB 数据需要 10-15 分钟,如何提高速度或时间复杂度?
c - 预先确定哪个二进制文件将通过 execlp 运行
编辑#1
到目前为止,“可能的重复”不是重复的。他们测试$FILE
in的存在$PATH
,而不是提供第一个有效结果的完整路径;最佳答案使用bash命令行命令,而不是纯c。
原始问题
在所有 exec 系列函数中,有一些会进行$PATH
查找而不需要执行二进制文件的绝对路径。
来自man exec
:
如果指定的文件名不包含斜杠 (/) 字符,则 execlp()、execvp() 和 execvpe() 函数会复制 shell 在搜索可执行文件时的操作。在 PATH 环境变量中指定的以冒号分隔的目录路径名列表中查找该文件。如果未定义此变量,则路径列表默认为当前目录,后跟 confstr(_CS_PATH) 返回的目录列表。(此 confstr(3) 调用通常返回值“/bin:/usr/bin”。)
是否有一种简单直接的方法来测试第一个“执行的完整路径”将评估为什么,而不必手动遍历$PATH
环境变量中的所有元素,并将二进制名称附加到路径的末尾?我想使用“事实上的标准”方法来估计要运行的二进制文件,而不是重写过去可能已经实施过多次的任务。
我意识到这不能保证,因为有人可能会通过错误的脚本、TOCTOU 攻击等使此检查无效。我只需要一个像样的近似值来进行测试。
谢谢你。
c - Linux ubuntu下c中的execl命令
我想从 C 应用程序调用可执行文件。这是我的代码:
其中 IP 和“A”应该是 argv[1] 和 argv[2]
这个名为 DNS 的应用程序应该写一个文件,但是当我像这样用 execl 调用它时它不起作用。任何人都可以帮助我吗?
c - C获取使用execl启动的进程的pid
我正在使用指令启动一个流程
softCopia 只是一个将整数写入文件的虚拟对象。
我想知道我怎样才能得到这个过程的pid?
c - 如果我在 parent 和 child 中 fork 和 exec 会发生什么?
这是我的名为 server.c 的示例代码(已删除包含以保持简单)。
这是从上述程序中执行的客户端代码。
现在让我解释一下我认为会发生什么以及我实际得到的输出。
在服务器中,我们进入 for 循环。在第一次迭代中,我们点击了 fork()。此时有两个进程,即父进程和第一个子进程。现在我们从这两个进程中执行一个名为“client”的程序。此客户端代码仅打印一些信息。所以当我运行这个服务器程序时,我应该得到两行,对吧?一条来自父母,另一条来自孩子?但是我只打印了一行,使用 strace 后我发现只有父母在打印东西,而不是孩子。那么这是为什么呢?
是因为孩子已经死了(这是正确的术语吗?),因为它被执行了,就不能再收集孩子了吗?如果是这样,孩子会怎么样?变成丧尸了吧?它会被init收集吗?即便如此,为什么它不会在像僵尸一样结束之前打印出那条线?
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 部分似乎无法按我的预期工作。任何帮助将不胜感激。
c - c程序中execlp()的使用
我对 c 中的 execlp() 有疑问。
我有以下程序:
它应该打印用户名@hostname 文件夹$,然后将 linux 命令作为参数“ls -al”,然后它应该使用 execlp() 启动它,但它不像我认为的那样工作。
我在这里阅读了有关此命令的所有文章,但我想,我仍然不明白如何使用它。
我会很感激有人的帮助。
c++ - iwlist 在使用 execl 调用时尝试扫描所有接口
我正在我的 Ubuntu PC 上使用 C++ 执行标准 fork/execl 以扫描 Wi-Fi SSID。使用excel调用时,接口名称似乎没有生效。
这成功了,但我在标准错误中得到了这个:
lo 接口不支持扫描。
enp0s25 接口不支持扫描。
看起来 iwlist 正在尝试扫描所有接口。
相反,如果我这样做:
我没有在标准错误中收到这些消息。
在我的 execl 调用中我做错了什么吗?
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);