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