Named Pipe int array übertragen



  • Hallo!

    Ich bin gerade dabei mich mit Named Pipes unter Ubuntu zu beschäftigen.
    Mit einem char array funktioniert es einfach das ich zb zwischen parent und child über pipe kommuniziere.
    Aber wenn ich ein int array übertragen will dann funktioniert das nicht mehr.
    Geht das überhaupt oder muss ich das vorher in char wandeln und dann wieder zurückwandeln?

    Das passiert im Parent Code:

    int array[]={19,9,17,15,4,12,6,3,4,136};
      fp = fopen("MyPipe", "w");
      write(myPipeNumber, array, 10*sizeof(int));
    

    Das im Child:

    fp = fopen("MyPipe", "r");
    int value[10];
    read(myPipeNumber, value, 10*sizeof(int));
    

    Naja wie gesagt so funktionierts nicht aber wenn ich das int array austausche gegen ein char array funktionierts.

    godi



  • Vorsicht du mischt FILE* und Linux-Systemcalls (die mit einem int-Dateideskriptor arbeiten)
    Das sollte man _nie_ tun (und ich denke dass es mit char funktioniert ist mehr oder weniger Zufall)
    benutze entweder fopen und fwrite/fread oder open und write/read aber nie beides gemischt.
    Und wo kommt eigentlich myPipeNumber her?



  • Vielen Dank!

    Mit fwrite und fread funktionierts! 🙂
    Hätte ich auch sehen können! 😉

    myPypeNumber benötige ich jetzt nicht mehr.
    Das war zuvor der return Wert von fileno(fp)

    Aber das einzige was noch nicht passt ist, dass das File das für die Pipe angelegt wird nicht mehr gelöscht wird.
    Also ich lege mit mkfifo("MyPipe", 0666) die Pipe an.
    Mit fp = fopen("MyPipe", ...) öffne ich das File.
    Mit fclose(fp) schließe ich das File wieder, jedoch bleibt es erhalten.

    Gibt es da noch irgendeinen Befehl damit man das File löschen kann?



  • Ich hab es schon gelöst.
    Habe es mit remove("Filename") gemacht.
    Ich hätte gedacht das man für so ein PipeFile irgendeinen speziellen Befehl benötigt.

    godi



  • Ich hätte gedacht das man für so ein PipeFile irgendeinen speziellen Befehl benötigt.

    Es gehört zu allen *NIX Systemen dazu, dass man (fast) alles mit Dateioperatoren machen kann (Everything is a file).


Anmelden zum Antworten