- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
#include <unistd.h>
main()
{
int i=0;
char *cmd[] = { "ls", "-l", (char *)0 };
char *env[] = { "HOME=/usr/home", "LOGNAME=home", (char *)0 };
int rr;
for(i; i<6; i++)
{
switch(rr=fork())
{
case -1:execl ("/bin/ls", "ls", "-1", (char *)0);break;
case 0:execle ("/bin/ls", "ls", "-l", (char *)0, env);break;
case 1:execlp ("ls", "ls", "-l", (char *)0);break;
case 2:execv ("/bin/ls", cmd);break;
case 3:execve ("/bin/ls", cmd, env);break;
case 4:execvp ("ls", cmd);break;
}
}
}
- Ну это работают.
И проверяющий поставил плюс.
TheHamstertamer 24.09.2011 13:21 # +3
Lure Of Chaos 24.09.2011 13:51 # +3
Lure Of Chaos 24.09.2011 13:52 # +1
alexoy 24.09.2011 14:29 # −1
Lure Of Chaos 24.09.2011 14:38 # +2
lucidfox 24.09.2011 18:55 # 0
1. Дочерний процесс нормально создаётся и вызывает ls -l.
2. fork по каким-то непонятным причинам умудряется завершиться с ошибкой, и тогда уже родительский процесс вызывает ls -1.
А в каком случае fork вообще может вернуть 1-4? Где вы видели ОС, дающую пользовательским процессам такие PID?
PID TTY TIME CMD
1 ? 00:00:01 init
2 ? 00:00:00 kthreadd
3 ? 00:00:12 ksoftirqd/0
6 ? 00:00:00 migration/0
lucidfox 24.09.2011 18:59 # −1
Ну хорошо, создаст он шесть дочерних процессов ls, только зачем?
Lure Of Chaos 24.09.2011 19:00 # 0
gegMOPO4 24.09.2011 19:45 # +6
lucidfox 24.09.2011 15:39 # +1
И тут приходит C99...
da4ever 24.09.2011 16:23 # +4
guest 24.09.2011 19:22 # +3
Niceblack 24.09.2011 20:59 # 0