Je fais de la programmation en C++, sous LINUX. J'ai deux processus indépendants. Je devrais fournir la communication en utilisant le tuyau nommé.Canaux nommés - Problème avec write() et read()
lecteur: -Crée FIFO en utilisant mkfifo - status = mkfifo (myFIFO, 0666) -opens le tuyau à l'aide ouverte - fifo = open (myFIFO, O_RDONLY) -reads du tuyau - num = lecture (fifo, temp, sizeof (temp))
Écrivain: -ouverture du tube - fifo = ouvert (myFIFO, O_WRONLY); - écrit dans le tube - num = write (fifo, string, strlen (string));
J'ai remarqué que le descripteur de fichier retourné pour le processus de lecture et le processus d'écriture sont 0. Aussi, après l'écriture de la commande, je peux voir sur mon terminal, la chaîne qui doit être écrite sur le tube. Je ne sais pas pourquoi il est montré sur le terminal ... Aussi, le nombre d'octets qui sont écrits est 0 ...
Pourriez-vous m'aider s'il vous plaît? Merci!
// read.cpp:
#define myFIFO "/temp/FIFO"
int main(){
int num, fifo, status;
char temp[32];
if (status = mkfifo(myFIFO, 0666) < 0) {
printf("\n %s \n", strerror(errno));
return 0;
}
if (fifo = open(myFIFO, O_RDONLY) < 0) {
printf("\n %s \n", strerror(errno));
return 0;
}
if (num= read(fifo, temp, sizeof(temp)) < 0) {
printf("\n %s \n", strerror(errno));
return 0;
}
printf("In FIFO is %s \n", temp);
}
Et dans un autre fichier:
// write.cpp:
#define myFIFO "/temp/FIFO"
int main() {
int status, num, fifo;
char string[]="Testing...";
if (fifo = open(myFIFO, O_WRONLY) < 0) {
printf("\n %s \n", strerror(errno));
return 0;
}
if (num= write(fifo, string, strlen(string)) < 0) {
printf("\n %s \n", strerror(errno));
return 0;
}
}
Pourriez-vous l'exécuter sous strace et publier les journaux? – jpalecek
Veuillez écrire le code où le tuyau est nommé et ouvert, et où vous lisez/écrivez dessus. – James
Postez votre code, il sera plus facile de vous aider lorsque nous pourrons voir votre problème. –