Filedescriptor zwischen Prozessen austauschen

  • Filedescriptor zwischen Prozessen austauschen

    Hi,
    wie tausche ich einen Filedescriptor zwischen 2 Prozessen aus so dass ich ihn im 2. Prozess auch benutzen kann.
    Den Descriptor mit DO zum anderen Prozess schicken ist kein Problem, aber wenn ich ihn dort benutzen will gehts es nicht. errno 57, socke not connected.

    Chris
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • RE: Filedescriptor zwischen Prozessen austauschen

    Original von Amin Negm-Awad
    Ich würde mal tippen: Gar nicht. Der hängt doch an dem Prozess!?

    Kannst du denn dort keinen neuen erzeugen?


    Das tippe ich nicht nur: "each process has its own file descriptor table"

    Alex
    The only thing that really worried me was the ether.
  • Es gibt schon eine Möglichkeit - dazu muss der zweite Prozess per fork()/exec() aus dem ersten heraus erzeugt werden.
    Und zwar erst nachdem der file-descriptor geöffnet wurde. Dann greifen beide Prozesse auf eine gemeinsame File-Referenz zu (d.h. wen einer liest verschiebt sich für den anderen die Leseposition auch).
    Zunächst haben beide die gleiche File-descriptor-Nummer. Das kann man mit dup2() aber ändern.

    Über diesen Mechanismus macht die Shell die Ausgabeumlenkung.

    Frage: warum willst Du das machen und was willst Du erreichen?

    -- hns
  • Original von hns
    Es gibt schon eine Möglichkeit - dazu muss der zweite Prozess per fork()/exec() aus dem ersten heraus erzeugt werden.
    Und zwar erst nachdem der file-descriptor geöffnet wurde. Dann greifen beide Prozesse auf eine gemeinsame File-Referenz zu (d.h. wen einer liest verschiebt sich für den anderen die Leseposition auch).
    Zunächst haben beide die gleiche File-descriptor-Nummer. Das kann man mit dup2() aber ändern.

    Über diesen Mechanismus macht die Shell die Ausgabeumlenkung.

    Frage: warum willst Du das machen und was willst Du erreichen?

    -- hns

    Ich schreibe mit beiden Prozessen in asl und möchte ab und zu eine gemeinsame Logdatei haben.
    Öffne ich die Datei in beiden Prozessen gibt es Murks. Es wird zwar in die Datei geschrieben, aber viele Zeilen sind nicht vollständig und zwar immer die wo ich die Datei zuletzt geöffnet habe.
    Ich nehme jetzt 2 Dateien und verinige die dann mit einem extra Tool.

    Chris
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • Original von zermelo
    Du kannst die Datei auch mmap(2)'en. Ist aber vllt nicht das Beste hier.

    Warum öffnest Du die Datei nicht einfach immer nur für eine Zeile, dann schliessen. Wenn sie schon offen ist, weil der andere Prozess schreibt, wartest Du halt?

    man asl(3)

    Chris
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • Original von Chris
    Original von hns
    Es gibt schon eine Möglichkeit - dazu muss der zweite Prozess per fork()/exec() aus dem ersten heraus erzeugt werden.
    Und zwar erst nachdem der file-descriptor geöffnet wurde. Dann greifen beide Prozesse auf eine gemeinsame File-Referenz zu (d.h. wen einer liest verschiebt sich für den anderen die Leseposition auch).
    Zunächst haben beide die gleiche File-descriptor-Nummer. Das kann man mit dup2() aber ändern.

    Über diesen Mechanismus macht die Shell die Ausgabeumlenkung.

    Frage: warum willst Du das machen und was willst Du erreichen?

    -- hns

    Ich schreibe mit beiden Prozessen in asl und möchte ab und zu eine gemeinsame Logdatei haben.
    Öffne ich die Datei in beiden Prozessen gibt es Murks. Es wird zwar in die Datei geschrieben, aber viele Zeilen sind nicht vollständig und zwar immer die wo ich die Datei zuletzt geöffnet habe.
    Ich nehme jetzt 2 Dateien und verinige die dann mit einem extra Tool.

    Chris

    Wenn du doch ohnehin schon mit DO werkelst, warum startest du nicht einen ASL-Server, der die Log-Requests per DO von beiden entgegen nimmt und das dann in seine, nämlich seine, Datei schreibt. Ist total schick uns lässt sich bestimmt auch in anderen Projekten wiederverwerten.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von Amin Negm-Awad
    Original von Chris
    Original von hns
    Es gibt schon eine Möglichkeit - dazu muss der zweite Prozess per fork()/exec() aus dem ersten heraus erzeugt werden.
    Und zwar erst nachdem der file-descriptor geöffnet wurde. Dann greifen beide Prozesse auf eine gemeinsame File-Referenz zu (d.h. wen einer liest verschiebt sich für den anderen die Leseposition auch).
    Zunächst haben beide die gleiche File-descriptor-Nummer. Das kann man mit dup2() aber ändern.

    Über diesen Mechanismus macht die Shell die Ausgabeumlenkung.

    Frage: warum willst Du das machen und was willst Du erreichen?

    -- hns

    Ich schreibe mit beiden Prozessen in asl und möchte ab und zu eine gemeinsame Logdatei haben.
    Öffne ich die Datei in beiden Prozessen gibt es Murks. Es wird zwar in die Datei geschrieben, aber viele Zeilen sind nicht vollständig und zwar immer die wo ich die Datei zuletzt geöffnet habe.
    Ich nehme jetzt 2 Dateien und verinige die dann mit einem extra Tool.

    Chris

    Wenn du doch ohnehin schon mit DO werkelst, warum startest du nicht einen ASL-Server, der die Log-Requests per DO von beiden entgegen nimmt und das dann in seine, nämlich seine, Datei schreibt. Ist total schick uns lässt sich bestimmt auch in anderen Projekten wiederverwerten.


    Warum sagst du mir das erst jetzt?
    Warum komme ich nicht selbst darauf?
    Warum....

    Chris
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • Original von Amin Negm-Awad
    Original von Chris
    Original von hns
    Es gibt schon eine Möglichkeit - dazu muss der zweite Prozess per fork()/exec() aus dem ersten heraus erzeugt werden.
    Und zwar erst nachdem der file-descriptor geöffnet wurde. Dann greifen beide Prozesse auf eine gemeinsame File-Referenz zu (d.h. wen einer liest verschiebt sich für den anderen die Leseposition auch).
    Zunächst haben beide die gleiche File-descriptor-Nummer. Das kann man mit dup2() aber ändern.

    Über diesen Mechanismus macht die Shell die Ausgabeumlenkung.

    Frage: warum willst Du das machen und was willst Du erreichen?

    -- hns

    Ich schreibe mit beiden Prozessen in asl und möchte ab und zu eine gemeinsame Logdatei haben.
    Öffne ich die Datei in beiden Prozessen gibt es Murks. Es wird zwar in die Datei geschrieben, aber viele Zeilen sind nicht vollständig und zwar immer die wo ich die Datei zuletzt geöffnet habe.
    Ich nehme jetzt 2 Dateien und verinige die dann mit einem extra Tool.

    Chris

    Wenn du doch ohnehin schon mit DO werkelst, warum startest du nicht einen ASL-Server, der die Log-Requests per DO von beiden entgegen nimmt und das dann in seine, nämlich seine, Datei schreibt. Ist total schick uns lässt sich bestimmt auch in anderen Projekten wiederverwerten.


    warum den umweg?

    asl_log
  • Original von Chris
    Original von hns

    Frage: warum willst Du das machen und was willst Du erreichen?

    -- hns

    Ich schreibe mit beiden Prozessen in asl und möchte ab und zu eine gemeinsame Logdatei haben.
    Öffne ich die Datei in beiden Prozessen gibt es Murks. Es wird zwar in die Datei geschrieben, aber viele Zeilen sind nicht vollständig und zwar immer die wo ich die Datei zuletzt geöffnet habe.
    Ich nehme jetzt 2 Dateien und verinige die dann mit einem extra Tool.

    Chris


    Ich verwende dafür immer syslog(3). Das gibt's auf allen *nixen.