Ich habe ein Programm, das eine Datei liest, behandeln Sie es und legen Sie die Ergebnisse in eine Ausgabedatei. Wenn ich ein Argument (Eingabedatei) habe, erstelle ich die Ausgabedatei und schreibe ihr den Inhalt.execl nicht von Kind
Ich habe einen fork() gemacht, um den stdout einen write() Inhalt umzuleiten.
char *program;
program = malloc(80);
sprintf(program, "./program < %s > %s", inputFile, outputFile);
int st;
switch (fork()) {
case -1:
error("fork error");
case 0:
/* I close the stdout */
close (1);
if ((fd = open(outputfile, O_WRONLY | O_CREAT , S_IWUSR | S_IRUSR | S_IRGRP)==-1)){
error("error creating the file \n");
exit(1);
}
execlp("./program", program, (char *)0);
error("Error executing program\n");
default:
// parent process - waits for child's end and ends
wait(&st);
exit(0);
//*****************
}
Das Kind wird erstellt, richtig mit dem <> stdin und stdout Dateien erstellt werden. Aber das Kind endet nie, und wenn ich den Vater töte, ist die Ausgabedatei leer, so dass der Code nicht ausgeführt wurde.
Was passiert? Danke!
ich tun würde, dies mit 'open()' und 'dup2()' und 'exec()' anstatt zu versuchen, '<' and '>' für IO zu verwenden Umleitung. – Flexo
Danke! Beide Lösungen haben funktioniert. – drules