Как отправить целое число с каналом между двумя процессами!

Я пытаюсь отправить целое число с каналом в POSIX, но функция write() работает для отправки строковых или символьных данных. Есть ли способ отправить целое число с каналом?

Привет

Ответ 1

Безопасный способ - использовать snprintf и strtol.

Но если вы знаете, что оба процесса были созданы с использованием той же самой версии компилятора (например, они являются тем же исполняемым файлом, который fork ed), вы можете воспользоваться тем фактом, что что-либо в C можно читать или записывать как массив char:

int n = something();
write(pipe_w, &n, sizeof(n));

int n;
read(pipe_r, &n, sizeof(n));

Ответ 2

Либо отправьте строку, содержащую представление ASCII целого числа, например, 12345679, либо отправьте четыре байта, содержащие двоичное представление int, например, 0x00, 0xbc, 0x61, 0x4f.

В первом случае вы будете использовать функцию типа atoi(), чтобы вернуть целое число.

Ответ 3

Ответ Aschelpler прав, но если это то, что может расти позже, я рекомендую вам использовать какую-то простую библиотеку протоколов, например Google Protocol Buffers или просто JSON или XML с некоторой базовой схемой.

Ответ 4

Ниже один работает отлично для записи в трубу и чтения из трубы, как:

stop_daemon =123;
res = write(cli_pipe_fd_wr, &stop_daemon, sizeof(stop_daemon));
....
res = read(pipe_fd_rd, buffer, sizeof(int));
memcpy(&stop_daemon,buffer,sizeof(int));
printf("CLI process read from res:%d status:%d\n", res, stop_daemon);

выход:

CLI process read from res:4 status:123