Я пытаюсь понять трубы и использование вилки в С. Ниже приведен пример кода, который вызывает fork()
, а затем:C трубы запись/чтение приоритет
- процесс ребенка: Считывает
pipe
и печатает содержимое консоли. Родительский процесс: Записывает в
pipe
«привет мир».int main(void) { pid_t pid; int mypipe[2]; /* Create the pipe. */ if (pipe(mypipe)) { fprintf(stderr, "Pipe failed.\n"); return EXIT_FAILURE; } /* Create the child process. */ pid = fork(); if (pid == (pid_t)0) { /* This is the child process. Close other end first. */ close(mypipe[1]); read_from_pipe(mypipe[0]);//read pipe and print the result to console return EXIT_SUCCESS; } else if (pid < (pid_t)0) { /* The fork failed. */ fprintf(stderr, "Fork failed.\n"); return EXIT_FAILURE; } else { /* This is the parent process. Close other end first. */ close(mypipe[0]); write_to_pipe(mypipe[1]);//write "hello world" to the pipe return EXIT_SUCCESS; } }
Я понимаю, что мы используем pipes
, которые рассматриваются как файлы, так что дочерний процесс и родительский процесс может общаться. (Правильно ли это?) Теперь, поскольку труба используется как из родителя, так и из ребенка, будет ли ребенок читать пустой pipe
? Или будет pipe
«Привет, мир»? И почему ? Я предполагаю, что он случайный, так как дочерний и родительский процессы выполняются одновременно. Это правда ?
ОК, если 'pipe' не был пуст, когда вызывалась' fork'? – dimitris93
Затем прочитанное будет возвращать (самое большее, в зависимости от размера буфера) то, что находится в трубе, и не будет ждать больше. – Ekleog
Как вы знаете, что 'read' произойдет до' write'. Родительский и дочерний процессы выполняются одновременно правильно? Итак, не будет ли случай «читать» случайным? – dimitris93