Недавно я поручил настроить одно из приложений, которое наши группы используют довольно регулярно. Приложение написано на C, что не имеет большого опыта. Я нашел некоторые функциональные примеры того, что я пытаюсь сделать, но пока не смог полностью интегрировать его в тестовую кровать.FIFO (named pipe) в C
Требование довольно просто: откройте именованный канал и вытолкните некоторые данные, чтобы другая группа могла читать трубку и что-то делать с ней. Это необходимо сделать так, чтобы он не прерывал работу сервера.
Мое приложение имеет массив, называемый историей, который содержит все необходимые значения, которые я получаю после. Я до сих пор имел смешанные результаты с моими попытками добиться этого. Пожалуйста, смотрите ниже фрагмент кода:
DCmass_add_history(history, history_num);
int fd;
char * myfifo = "/tmp/fooPipe";
/* create the FIFO (named pipe) */
mkfifo(myfifo, 0666);
/* open FIFO (named pipe) */
fd = open(myfifo, O_WRONLY);
for (i = 0; i < history_num; i++) {
/* Write our data to our FIFO (named pipe) */
fprintf(fd, "%d %d %f %f", history[i].id, history[i].clock, history[i].value, history[i].ns);
}
close(fd);
Я имел некоторый успех ранее при использовании write
вместо fprintf
, но не мог получить какие-либо переменные в мою трубу.
Из предыдущего примера переполнения стека, Stack Overflow example Я смог получить базового читателя для проверки моей трубы и базового кода сверху, чтобы открыть мой канал.
'fprintf()' принимает 'ФАЙЛ *'; а не дескриптор 'int'. – WhozCraig