J'utilise le programme suivant pour écrire un fifo:open() provoque la fin du programme
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
using namespace std;
int main() {
unlink("fifo1");
if (mkfifo("fifo1", 0666) != 0) {
cout << "Error while creating fifo" << endl;
return 1;
}
else {
cout << "Fifo created" << endl;
}
int fd = open("fifo1", O_WRONLY);
if(fd == -1) {
cout << "Could not open file" << endl;
return 1;
}
else {
cout << "Fifo opened" << endl;
}
int i=0;
char* buffer = new char[20];
while(true) {
sprintf(buffer, "look: %i\n", i++);
int r = write(fd, buffer, strlen(buffer));
if(r == -1) {
cout << "Fifo Error:" << fd << endl;
}
else {
cout << "Wrote: " << i << "(" << r << "B)"<< endl;
}
sleep(1);
}
return 0;
}
Si je commence à ce programme, lancer un autre shell et tapez il
cat < fifo1
Je peux voir que le programme écrit quelque chose sur le tuyau et je peux voir la sortie dans le shell de lecture. Si j'arrête la commande cat avec CTRL^C, le FIFO Writer se termine, sans message d'erreur. Quelle est la raison pour ça? Pourquoi aucune erreur n'est-elle lancée? La chose étrange est, si je commence le code ci-dessus avec Eclipse CDT et le shell de lecture est fermé avec CTRL^C le programme continue d'imprimer "Error: 3".
Nous attendons vos idées, heinrich
C'est C++ mélangé avec C – nategoose
Ceci est C mélangé avec C++ 's ' cout' –
-1 pour poser des questions sur C mais en nous montrant le code C++. –