Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Beliebig grosse Datenstruktur einlesen

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.01.2002
    Ort
    DarkTown
    Beiträge
    40

    Beliebig grosse Datenstruktur einlesen

    Moin,
    ich habe eine Datenstruktur (Struktur oder Klasse ist egal) in der, unter anderem,
    ein beliebig langer String gespeicher werden kann. Dies habe ich mit einem
    char-Zeiger und dem new-Operator realisiert. Diese Datenstruktur möchte ich jetzt
    "versenden", z.B. in einem TCP-Socket-Programm. Wie kann ich aber eine solche
    Datenstruktur z.B von einem Filediskriptor lesen. Mein Ansatz war die Funktion read(),
    aber die benötigt die genau Anzahl von Bytes die gelesen werden sollen, aber diese Grösse
    ist ja immer unterschiedlich (je nach länge des gespeicherten Strings).
    When there`s no more room in Hell
    the dead will walk the Earth

  2. #2
    Registrierter Benutzer Avatar von Trillian
    Registriert seit
    26.04.2001
    Beiträge
    180
    Geht's jetzt um Dateien oder Sockets?


    Bei Sockets kann man sich AFAIK nie sicher sein, wieviele Byte gerade zum Lesen verfügbar sind, also schon verschickt wurden.

    AFAIK geht man i.A. so vor, dass man einfach einige Bytes liest, und dann guckt, wieviel übertragen wurde.

    Evtl mal "Maverick's Tips zur Socket Programmierung" lesen"´, falls du dich damit noch nicht so viel beschäftigt hast
    www.zotteljedi.de

  3. #3
    Registrierter Benutzer
    Registriert seit
    12.12.2001
    Ort
    Ortrand
    Beiträge
    8
    Ich würd es in einer while/for Schleife realisieren. Du liest jeden Durchgang ein Byte ein und checkst auf \n oder EOF. Soblad du EOF oder \n findest hörst du auf zu senden. Und beim Empfänger liest du auch immer nur ein Byte. Kannst ja auch gleich 8byte chunks lesen, wenn du den string eh in heap liest. Das wär dann wohl effizienter Hoffe mal dir ein wenig geholfen zu haben

    --baegsch

  4. #4
    Registrierter Benutzer
    Registriert seit
    21.06.1999
    Beiträge
    677
    > Ich würd es in einer while/for Schleife realisieren. Du liest jeden Durchgang
    > ein Byte ein und checkst auf \n oder EOF.
    > Soblad du EOF oder \n findest hörst du auf zu senden.
    >
    Das geht zwar, ist aber sehr inperformant, weil keine Pufferung stattfindet.
    Wenn Du große Datenmengen überträgst, dann bremst du damit dein Programm
    dramatisch aus.

    Wenn dein String-Delimiter ein Newline ist, dann kannst du fgets() nehmen
    (vorher mit setbuf() den Puffermodus auf zeilenweises Puffern setzen).
    Da auch fgets() eine Byte-Angabe bekommt, musst du ggf. fgets() mehrmals
    aufrufen, solange bis am Ende ein \n steht.

    Christoph

  5. #5
    Registrierter Benutzer Avatar von Trillian
    Registriert seit
    26.04.2001
    Beiträge
    180
    Das geht aber wiederum nicht mit einem Socket
    Für Sockets in C kann ich die glib (www.gtk.org) wärmestens empfehlen (eigentlich generell für C Kram ), die hat sog. "IO Channels", die einem mit Sockets (funzt auch mit Pipes etc) viel Arbeit abnehmen kann).

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •