Rohrimplementierung

8

Ich versuche eine Linux-Shell zu implementieren, die Piping unterstützt. Ich habe bereits einfache Befehle ausgeführt, Befehle, die im Hintergrund ausgeführt werden, Umleitungen, aber Rohrleitungen fehlen immer noch.

Ich habe bereits darüber gelesen und ein paar Codeschnipsel gesehen, konnte aber immer noch keine funktionierende Lösung finden.

Was ich bisher habe:

%Vor%

Ich bin ein Anfänger Programmierer, wie Sie wahrscheinlich sagen können, und wenn ich etwas programmieren, von dem ich nicht viel weiß, dies offensichtlich der Fall ist, beginne ich mit etwas wirklich einfach und konkret und baue dann von dort aus .

Bevor ich also drei oder mehr verschiedene Befehle in der Pipeline implementieren kann, möchte ich in der Lage sein, "ls names.txt | sort" oder etwas Ähnliches zu berechnen, wobei names.txt eine Datei von Namen ist, die algebetisch ungeordnet ist .

Aktualisierter Code, funktioniert aber immer noch nicht.

Danke.

    
nunos 17.04.2010, 18:59
quelle

2 Antworten

10

Sie müssen das stdout eines Kindes durch das Schreibende der Pipe und das stdin des anderen Kindes durch das Leseende ersetzen:

%Vor%     
caf 18.04.2010, 10:01
quelle
4

Schauen Sie in den% code_% Standardbibliotheksaufruf. Dies wird verwendet, um eine Pipe zu erstellen. Sie müssen natürlich einen Teil der Arbeit vor Sie pipe() ausführen, damit der untergeordnete Prozess den Dateideskriptor richtig erbt.

Beachten Sie auch die Reihenfolge der Argumente für fork() :

%Vor%
  

dup2 () macht newfd die Kopie von oldfd und schließt neftfd wenn nötig

    
unwind 17.04.2010 19:07
quelle

Tags und Links