Рубрики
Uncategorized

Смотрите код работы — понять позже — 3

Используйте простую программу, чтобы понять очень сложный человек.

Автор оригинала: Duc Duy Bui.

В этом посте мы рассмотрим больше о нашем простом коде. На самом деле, сложность увеличивается. Программа изменяется на чтение/запись целого числа.

#include 
#include 
#include 
#include 
#include 

int main(void)
{
        int     fd[2], nbytes;
        pid_t   childpid;
        int data;

        pipe(fd);
        
        if((childpid = fork()) == -1)
        {
                perror("fork");
                exit(1);
        }

        if(childpid == 0)
        {
            close(fd[0]);
            data = 10;
            write(fd[1], &data, sizeof(int));
            exit(0);
        }
        else
        {
            close(fd[1]);

            nbytes = read(fd[0], &data, sizeof(int));
            printf("Received data: %d", data);
        }
        
        return(0);
}

Результат: полученные данные: 10

Мы обнаружили, что труба может быть использована для передачи любых типов данных, таких как символы, INT. Вы можете перейти на Float, двойной. Следующий код использует двойной:

#include 
#include 
#include 
#include 
#include 

int main(void)
{
        int     fd[2], nbytes;
        pid_t   childpid;
        double data;

        pipe(fd);
        
        if((childpid = fork()) == -1)
        {
                perror("fork");
                exit(1);
        }

        if(childpid == 0)
        {
            close(fd[0]);
            data = 10.123;
            write(fd[1], &data, sizeof(double));
            exit(0);
        }
        else
        {
            close(fd[1]);

            nbytes = read(fd[0], &data, sizeof(double));
            printf("Received data: %lf", data);
        }
        
        return(0);
}

Результат: Полученные данные: 10.123000

Почему мы берем много времени, чтобы проверить с целым числом, поплавок … Есть два целя:

  • Больше времени в этом коде сделает нас более уверенно.
  • Поднят один вопрос: как клиент знает, какие данные на трубе.

Смотрите код еще раз: Sizeof (Double) SizeOf (INT)

Труба не заботится о данных, передается через него. Детский процесс и родительский процесс должны определять что-то называемое протоколом. Это означает, что переговоры: «Я передаю 4 байта данных; вы получите 4 байта данных. Тогда вам нужно лечить 4 байта как целое число ».

Обычно некоторые байты в начале могут использоваться в качестве длины переданных данных.

Следующий пост: Часть 4 — Что такое труба и как это реализовано?

Спасибо за чтение!

Оригинал: «https://www.codementor.io/@duydb0181/see-code-run-understand-later-3-1ia9auqk9o»