Я изучаю операционные системы самостоятельно из лекций MOOC, доступных онлайн, и хотел работать на xv6. Я читал документацию по xv6 и в главе 0, когда речь идет о каналах (стр. 13) сомневаюсь.
int p[2];
char *argv[2];
argv[0] = "wc";
argv[1] = 0;
pipe(p);
if(fork()==0){
close(0);
dup(p[0]);
close(p[0]);
close(p[1]);
exec("/bin/wc", argv);
}
else{
write(p[1], "hello world\n", 12);
close(p[0]);
close(p[1]);}
Написано что:
Теперь дочерний элемент возвращает конец чтения в файловый дескриптор 0, закрывает fds в p и исполняет wc. Когда wc читает из стандартного ввода, он читает из канала. Родитель пишет в конец записи канала, а затем закрывает оба своих файловых дескриптора.
Также упоминается, что процессы не имеют общих переменных, т. Е. Изменения, внесенные в одном процессе, не отражаются в изменениях другого.
Теперь, здесь, я пишу в родительском процессе, и если child достигает exec до того, как parent заканчивает писать в p [1], child будет ждать, а после того, как он закончит запись, child будет читать из p [0] и будет выполнять exec. Итак, правильно ли говорить, что существуют специальные привилегии для каналов, которые заставляют их поддерживать межпроцессное взаимодействие посредством совместного использования каналов? Таким образом, в отличие от переменных, чьи изменения не будут отражаться в другом процессе, каналы являются общими, и, следовательно, их изменения отражаются друг в друге?
Правильно ли приведенные выше рассуждения?