Автор оригинала: Duc Duy Bui.
Есть много знаний языков программирования, библиотеки для изучения в эти дни. Мы можем прочитать API, справочное руководство, документы, … Это очень сложно и трудно понять. Это может привести к тому, чтобы не соответствовать ожиданию и сдаваться. В этом посту я пишу о одном методе, чтобы сделать исследование более проще. Предположим, что мы читаем о вилке, трубе. Смотрите страницу человека: https://man7.org/linux/man-pages/man2/fork.2.html
Детский процесс и родительский процесс запускаются в отдельных пространствах памяти. Во время вилки () оба места памяти имеют одинаковый контент. Память пишет, файловые сопоставления (MMAP (2)), а также обзоры (MUNMAP (2)), выполняемые одним из процессов, не влияют на другого… MMAP, SetPGID, MLOCK, MLOCALL, CHRT (1), DBPMDA (1), PMCD (1), STRATID (1), STRACE (1), XARGS (1), ALARM (2), ARCH_PRCTL (2) , BPF (2), CHDIR (2), Chroot (2), клон (2), eventfd (2), execve (2), _exit (2), fcntl (2), Flock (2), Получитель (2) , getpid (2), ……. С новичком слишком сложно. Итак, мы стараемся небольшим следующим кодом (легко найти Google):
#include#include #include #include #include int main(void) { int fd[2], nbytes; pid_t childpid; char string[] = "Hello! Code mentor\n"; char readbuffer[80]; pipe(fd); if((childpid = fork()) == -1) { perror("fork"); exit(1); } if(childpid == 0) { close(fd[0]); write(fd[1], string, (strlen(string)+1)); exit(0); } else { close(fd[1]); nbytes = read(fd[0], readbuffer, sizeof(readbuffer)); printf("Received string: %s", readbuffer); } return(0); }
Не читайте детали. Мы понимаем простую вещь:
- Родительский процесс создает детский процесс
- Труба создана.
- Ребенок пишет строку в трубе, а затем родитель прочитал эту строку.
Теперь запустите: https://www.jdoodle.com/c-online-compiler/
Копировать код на сайт, нажмите «Выполнить», результат является
Полученная строка: Здравствуйте, Code Mentor!
Это очень быстро и просто. Не нужно настроить компилятор, среда Linux или VirtualBox. Код не имеет ошибки и запускается идеально.
Настало время изменить код для тестирования, например: удалить близко (FD [1]); Чтобы понять, почему мы должны закрыть трубу.
Спасибо!
Следующий пост: расследуйте более подробную информацию.
Оригинал: «https://www.codementor.io/@duydb0181/see-it-run-understand-later-1i7szx6bx4»