int fd[2];
void write_to_pipe(char* str)
{
int file = fd[1];
FILE *stream;
//printf("writing to pipe : %s\n", str);
stream = fdopen(file, "w");
//printf("fdopen returned : %d\n",(int)stream);
fprintf(stream, "%s", str);
fclose(stream);
}
At main() : pipe(fd);
Wenn ich zuerst write_to_pipe
aufrufen, dann funktioniert es vollkommen in Ordnung.Rohr "Schließen" nach fclose()
Wenn die Funktion zum zweiten Mal aufgerufen wird, schlägt fdopen
fehl (gibt 0 zurück).
nahm ich an der Strom/Rohr/Somthing
Was der sichere Weg und rufen Sie die Funktion mehrmals
Compiler auf „das Rohr nicht schließen“ ist geschlossen ist: gcc 6.3.1
ps Diese Lesefunktion könnte auch ein ähnliches Problem haben.
char* read_from_pipe()
{
int file = fd[0];
static char buf[100];
FILE *stream;
stream = fdopen(file, "r");
read(file,buf,100);
fclose(stream);
return buf;
}
Ihre 'read_from_pipe()' hat viel größeres Problem als die Deskriptordatei zu schließen. Du rufst 'read()' in 'FILE *'. Das wird überhaupt nicht funktionieren. 'read()' nimmt einen Dateideskriptor direkt und beendet das, was er liest, nicht. –
Sie sollten einfach [popen (3)] (http://man7.org/linux/man-pages/man3/popen.3.html) mit 'pclose' verwenden –
@BasileStarynkevitch Aber' popen() 'nicht eine bidirektionale Leitung bereitstellen. Es ist entweder schreibgeschützt oder schreibgeschützt. –