Недавно мне поручили настроить одно из приложений, которые наши группы используют довольно регулярно. Приложение написано на 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
, но не мог получить никакие переменные в свой канал.
Из предыдущего примера переполнения стека, пример переполнения стека Мне удалось получить базовый ридер, чтобы проверить мою трубку, и базовый код сверху, чтобы открыть мою трубку.
fprintf()
беретFILE*
; неint
дескриптор. - person WhozCraig   schedule 08.03.2013