我正在实现一个库来运行命令.Linux上的库是C语言.
它目前执行popen()调用来运行命令并获取输出.问题是该命令继承了所有当前打开的文件处理程序.
如果我做了一个fork/exec,我可以明确地关闭孩子的处理程序.但这意味着重新实现popen().
我可以在所有处理程序上设置close-on-exec而不必逐个循环它们吗?
我可以将close-on-exec设置为进程的默认值吗?
谢谢!
我想用exec调用一个php文件.
当我调用它时,我希望能够传递一个变量(一个id).
我可以打电话echo exec("php /var/www/unity/src/emailer.php");,但是我添加像echo exec("php /var/www/unity/src/emailer.php?id=123");exec调用之类的那一刻就失败了.
我怎样才能做到这一点?
我想显示在指定日期之后修改的所有文件
命令是
touch --date '2011-09-19 /home/ , find /home/
Run Code Online (Sandbox Code Playgroud)
我如何在单个exec语句中执行这两个命令.谢谢
所以我试图写一些需要抓取命令输出的东西,然后虐待它然后将它传递给另一个程序.
但我有一个问题,我无法弄清楚如何获得命令输出并将其存储在下面是我的样本
if(fork() == 0){
execl("/bin/ls", "ls", "-1", (char *)0);
/* hopefully do something with the output here*/
}else{
*other stuff goes here*
}`
Run Code Online (Sandbox Code Playgroud)
所以我基本上想知道是否有任何方法可以从"execl"获取输出并将其传递给其他东西(例如通过将其存储在某种缓冲区中).
任何建议都会很棒.谢谢你们.."
是否可以使用xcopy仅使用一个xcopy命令将文件从多个目录复制到一个目录中?
假设我有目录树
根\源\ Sub1的\分公司2
我想将目录root\Source包括子文件夹中的所有.xml文件复制到root\Destination.我不想复制文件夹结构,只复制文件.
在我的简单自定义shell中,我正在从标准输入中读取命令并使用execvp()执行它们.在此之前,我创建了当前进程的fork,我在该子进程中调用了execvp(),之后,我调用exit(0).
像这样的东西:
pid = fork();
if(pid == -1) {
perror("fork");
exit(1);
}
if(pid == 0) {
// CHILD PROCESS CODE GOES HERE...
execvp(pArgs[0], pArgs);
exit(0);
} else {
// PARENT PROCESS CODE GOES HERE...
}
Run Code Online (Sandbox Code Playgroud)
现在,使用execvp()运行的命令可以返回错误吗?我想正确地处理它,现在,我总是调用exit(0),这意味着子进程将始终具有"OK"状态.
如何从execvp()调用返回正确的状态并将其放入exit()调用?我应该只获取execvp()返回的int值并将其作为exit()参数而不是0传递.这是否足够正确?
在Python 2.6中,
>>> exec "print (lambda: a)()" in dict(a=2), {}
2
>>> exec "print (lambda: a)()" in globals(), {'a': 2}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
File "<string>", line 1, in <lambda>
NameError: global name 'a' is not defined
>>> exec "print (lambda: a).__closure__" in globals(), {'a': 2}
None
Run Code Online (Sandbox Code Playgroud)
我希望它打印2两次,然后用单个打印元组cell.这与3.1中的情况相同.这是怎么回事?
我正在尝试生成一个执行系统命令的进程,而我自己的程序仍在进行,两个进程将并行运行.我正在研究linux.
我在网上查了一下,听起来我应该使用exec()系列.但它并不像我预期的那样有效.例如,在下面的代码中,我只看到"之前"打印,但不是"完成".
如果我发布任何东西,我很好奇吗?
#include <unistd.h>
#include <iostream>
using namespace std;
main()
{
cout << "before" << endl;
execl("/bin/ls", "/bin/ls", "-r", "-t", "-l", (char *) 0);
cout << "done" << endl;
}
Run Code Online (Sandbox Code Playgroud)
[UPDATE]
谢谢你们的评论.现在我的程序看起来像这样.一切正常,除了最后,我必须按回车完成程序.我不知道为什么我要按最后一次输入?
#include <unistd.h>
#include <iostream>
using namespace std;
main()
{
cout << "before" << endl;
int pid = fork();
cout << pid << endl;
if (pid==0) {
execl("/bin/ls", "ls", "-r", "-t", "-l", (char *) 0);
}
cout << "done" << endl;
}
Run Code Online (Sandbox Code Playgroud) 我需要使用php exec命令解决UTF-8文件名.问题是php exec命令似乎不懂utf-8.我使用这样的东西:
echo exec('locale charmap');
Run Code Online (Sandbox Code Playgroud)
回报 ANSI_X3.4-1968
看看这个问题,解决方案看起来像这样:
echo exec('LANG=de_DE.utf8; locale charmap');
Run Code Online (Sandbox Code Playgroud)
但我仍然得到相同的输出: ANSI_X3.4-1968
另一方面 - 如果我在bash命令行上执行这个php命令:
php -r "echo exec('LANG=de_DE.UTF8 locale charmap');"
Run Code Online (Sandbox Code Playgroud)
输出为UTF-8.所以问题是:
exec如果它作为apache模块在网站内运行,如何设置UTF-8 ?您可以为单个命令设置变量,如下所示:
MY_VARIABLE=my_value ./my_script.sh
Run Code Online (Sandbox Code Playgroud)
你可以交给另一个这样的脚本:
exec ./my_script.sh
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这样做时:
exec MY_VARIABLE=my_value ./my_script.sh
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
exec: MY_VARIABLE=my_value: not found
Run Code Online (Sandbox Code Playgroud)
这是为什么?
有没有办法做到这一点?