Récemment, j'ai été chargé de personnaliser l'une des applications que nos groupes utilisent assez régulièrement. L'application est écrite en C, quelque chose que je n'ai pas beaucoup d'expérience. J'ai trouvé quelques exemples fonctionnels de ce que j'essaye de faire mais pour l'instant j'ai été incapable de l'intégrer complètement dans mon banc d'essai.FIFO (pipe nommée) en C
L'exigence est assez simple: ouvrez un tube nommé et expulsez des données afin qu'un autre groupe puisse lire le tube et faire quelque chose avec lui. Cela doit être fait de telle sorte qu'il n'interrompe pas le serveur de faire son truc.
Mon application a un tableau appelé historique qui contient toutes les valeurs nécessaires que je suis après. J'ai jusqu'ici eu des résultats mitigés avec mes tentatives d'accomplir ceci. S'il vous plaît voir ci-dessous extrait de code:
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);
J'ai eu un certain succès précédemment lors de l'utilisation du write
au lieu de fprintf
mais n'a pas pu obtenir des variables dans ma pipe. À partir d'un exemple précédent de débordement de pile, Stack Overflow example j'ai pu obtenir un lecteur de base pour tester mon tuyau, et le code de base d'en haut pour ouvrir mon tuyau.
'fprintf()' prend un 'FICHIER *'; pas un descripteur 'int'. – WhozCraig