f***c 发帖数: 281 | 1 用execvp时指定path必须是确定的命令名字吗?
如execvp("/usr/bin/ls", args)可以正确执行ls命令,
能修改路径使其能执行多个命令吗?
i have tried to change /usr/bin/ls to /usr/bin/*, but no use
any good ways? thx! |
|
l**n 发帖数: 44 | 2 static void foo_execvp(const char* cmd, char const* const* argv)
{
...
#if defined(_MSC_VER)
_execvp(cmd, argv);
#elif defined(__MINGW32__)
execvp(cmd, argv);
#else
execvp(cmd, (char* const*)argv); //warning: cast discards qualifiers
from pointer target type
#endif
}
从我的测试来看,似乎只有在linux64 下才会出现这个警告信息,为什么?
如何消除这个warning?
多谢! |
|
c*****a 发帖数: 808 | 3 是不是应该在这里检查
if( pid == 0){
这里查
execvp(args[0],args);
_exit(0);
}
然后加上 if argus[0]=="a"
execvp("/bin/ls",args") |
|
l***t 发帖数: 114 | 4 if( (pid = fork()) == 0 )}
.....
i = execvp(xxx,xxxxx[]);
if( i == -1 ){
printf("error!");
//kill(pid,9) ???
}
}
ps
1201 proc1
1203 proc1
.....
when execvp fail, the child process 1203 is
still runing,if I use kill when fail,the
process 1201 will be killed too.
How can I kill 1203 only when exec fail?
thanks! |
|
S*A 发帖数: 7142 | 5 这个电池的道理其实是在遥控直升机的锂电池上学来的。
放到电脑上的锂电池也一样适用。只不过直升机上的电池
维护比较苛刻,放电电流很大(20C 以上),而且电池性能
的减弱对飞行性能影响很大。还有一点就是直升机电池
没有智能保护电路,因为放电电流很大,对电池的损伤
可以比较容易碰到,所以直升机电池维护比较仔细。
锂电池有两种情况会损伤电池容量。第一就是过渡放电,
放电超过 20% 就容易损伤容量。完全放干,低于 3.7V
一个 cell 就会严重损伤。这个我想大家都知道。
另一个就是长期储存高电量,这个会减少电池容量。
所以在直升机上最佳的电池使用方式是每次飞行前
充电,飞完把电都用掉。长期不用要放掉电,但是要
注意不要过度放电,低于20%。
所以笔记本长期插AC电源会减少电池寿命。
如果长期使用 AC,比较好的办法是吧电池放到 20% - 30%
左右,然后把电池拿出来。电池自己有轻微放电,然后
定期要冲放一下,例如几个月。
在 Linux 下面可以用 ACPI 接口直接看到电池的设计
容量和当前容量。可以比较精确衡量电池的损坏程度。
我用这种方法验证了的确长期使用 AC, 拿出电池对
... 阅读全帖 |
|
j******a 发帖数: 1599 | 6 问题是这样的:一个parent process, 在我这里就是个shell, 能够fork()一个child
process, 这个child process 又能继续产生子进程。 但是我们希望最多有三层shell
, 就要报错,我本来想用一个int shell_counter的变量来记录,但是每次fork()以后
这个变量就从新初始化了,所以就达不到效果。
那么怎么样才能让child process 看到parent process的这个变量呢?换言之,怎么把
这个变量传递给child process呢? |
|
l*********b 发帖数: 8 | 7 fork之后parent和child address space一样的,本来在parent的变量什么值,在child
里面一样
shell |
|
T*******i 发帖数: 4992 | 8 execvp(argv[1], argv + 1); |
|
X****r 发帖数: 3557 | 9 因为你将一个char const* const*强制转换为char * const*,把char上面的
const去掉了,自然有这个警告。
除去警告最正确方法是把argv指向的内容深度复制一遍后传给execvp。
qualifiers |
|
l**n 发帖数: 44 | 10 According to your reply, I modified the code:
...
#else
char* const* dp_argv = (char**)malloc(strlen(*argv)+1);
strcpy(*dp_argv,*argv);
execvp(cmd, dp_argv);
#endif
It works well. Thanks! |
|
c*****a 发帖数: 808 | 11 哦,想出来了,发现strcmp可以
最后问下exit的dir path是哪里,貌似我在execvp用不了exit |
|
l*l 发帖数: 225 | 12 1)
ststem, execl, execlp, execle, execv, execvp
来调用 sendmail 或者 mail .
2)
要不你自己写连接 tcp/25
然后 send helo, vrfy, rcpt, data,
然后send message 就可以了.
其实你这样写的话就相当于写了一个简单的 mail 发送程序. 何苦呢? |
|
w*****n 发帖数: 94 | 13
why not use exit()?
if (fork()==0){
execvp(...);
exit();
}
There is no need to test the return value of exec. |
|
r*e 发帖数: 112 | 14 I am try to use one function.
int execvp (const char *file, char *const arv[]);
but , I am confused by 'const char *' and 'char *const'
what is the differnce between them?
Tx! |
|
f***c 发帖数: 281 | 15 【 以下文字转载自 Programming 讨论区 】
【 原文由 funsc 所发表 】
ok
the code is as follows:
while(1)
{
getcommand(args); //the function is to get a command line and works corrently
pid = fork();
if (pid == 0)
{
fd = freopen("a.txt", "w", stdout);
execvp(args[0], args);
}
else
{
waitpid(pid);
}
}
after i run ls -l > foo, the output has been written to a.txt, as i hoped,
but when i run ls again, the result does not show on screen.
it seems that after i redirect the stdout to the file " |
|
f******k 发帖数: 26 | 16 Thanks.
Will it work if it is:
execvp("ls", "ls", "&", 0); |
|