init commit
This commit is contained in:
Executable
+35
@@ -0,0 +1,35 @@
|
||||
Что будет выведено на экран? Прокомментировать, почему? Если возможны несколько вариантов – привести все. Предполагается, что
|
||||
обращение к функции вывода на экран прорабатывает атомарно и без буферизации. Все системные вызовы прорабатывают успешно.
|
||||
Подключение заголовочных файлов опущено.
|
||||
|
||||
int main() {
|
||||
int pid;
|
||||
int fd[2];
|
||||
char c = 'a';
|
||||
pipe(fd);
|
||||
|
||||
if( (pid = fork()) > 0 ) {
|
||||
read(fd[0], &c, 1);
|
||||
kill(pid, SIGKILL);
|
||||
wait(NULL);
|
||||
} else {
|
||||
putchar(c);
|
||||
c = 'b';
|
||||
write(fd[1], &c, 1);
|
||||
c = 'c';
|
||||
}
|
||||
|
||||
putchar(c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
(Вес задачи: 2 балла)
|
||||
|
||||
Answer:
|
||||
1) начнётся с a т.к. отец заблокируется на считывании
|
||||
2) сын записал б в канал, дальше либо отец может отправить его "на убийство", либо сын проработает быстрее. У сына с
|
||||
3) только после смерти сына отец выведет б
|
||||
|
||||
aсб
|
||||
aб
|
||||
|
||||
Reference in New Issue
Block a user