Как отправить целое число с каналом между двумя процессами!
Я пытаюсь отправить целое число с каналом в 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);