Arbeiten mit einer Pipe und Datei
-
Hallo!!
Wie kann ich von einer Datei etwas auslesen und das dann in die pipe schreiben und dann vom Kindprozess wieder aus der Pipe auslesen lassen.
Wie mache ich das dann mit der Speicherreservierung und vor allem wann weiß ich wenn nix mehr in der Pipe drinnen steht?
Danke,
Thomas
-
naja, du brauchst des filedeskriptor array, welches die pipe benutzen kann, dann brauchste noch nen filedeskriptor, der aus der datei liest.
jetz is die frage, wie dus machen willst, dass was in der pipe steht, kriegste z.b. über n select() raus, wenn nix mehr drin steht, musst dir was überlegen, wie "<EOF>" zu schicken, und wenn des an kommt, weißt ja, dass des es ende is (jedenfalls das ende, des der vaterprozess geschickt hat)...
zwecks speicher haste mehrere möglichkeiten:
über die pipe immer genau 1 byte schicken, is sehr sicher, allerdings auch langsam, um worte voneinander zu trennen könntest noch nen "separator" einführen, so was wie "|" oder so, oder n zeichen, des wahrscheinlich nicht in einem wort oder in der datei vor kommt. als dritte alternative kommt eigentlich meine alternative der wahl (welche allerdings ein bisschen ordentlichen overhead erzeugt): reservier 2 bytes für die länge des kommenden wortes und schick diese als ascii durch (ich geh mal davon aus, dass die worte nicht länger als 99 zeichen sind) wenn dus nicht als ascii machst, könntest bis zu 255*255 zeichen durch bringen oder 128*128 oder so. dann liest du im lesenden prozess von der pipe 2 bytes, weißt wie lang das folgende wort ist, weißt wie viel speicher du reservieren musst und wie viele zeichen du lesen musst.
finde ich so als art "protokoll" eigentlich ganz sinnvoll, verwende ich im privaten auch für netzwerkkommunikation.
sind so n paar denkanstöße, kannst dir ja es sinnvollste raussuchen
-
danke dir, das hilft mir sehr weiter