Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich mit einer DATEI* in C in einen Speicherpuffer schreiben?

Wie kann ich mit einer DATEI* in C in einen Speicherpuffer schreiben?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-01 14:10:03640Durchsuche

How Can I Write to a Memory Buffer Using a FILE* in C?

Schreiben in einen Speicherpuffer über eine DATEI*

Diese Frage untersucht die Möglichkeit, einen Speicherpuffer als DATEI zu erstellen. Es tritt in Situationen auf, in denen TiXml XML in eine DATEI drucken kann, aber nicht direkt in einen Speicherpuffer.

POSIX-Lösung

Eine Lösung für dieses Problem besteht darin, die POSIX-Funktionen fmemopen oder zu verwenden open_memstream. Beide Funktionen ermöglichen die Verwendung von Speicher als FILE-Deskriptor, unterscheiden sich jedoch in der Semantik.

fmemopen erstellt einen Speicherpuffer einer angegebenen Größe und ordnet ihn einem FILE-Stream zu. In die FILE geschriebene Daten werden im Speicherpuffer gespeichert.

open_memstream erstellt eine Pipe und verknüpft sie mit einem FILE-Stream. In die Datei geschriebene Daten werden in den Pipe-Puffer geschrieben. Dieser Ansatz eignet sich besser für Situationen, in denen die Größe der Daten nicht im Voraus bekannt ist.

Beispielverwendung:

Hier ist ein Beispiel für die Verwendung von fmemopen zum Erstellen eines Speicherpuffers für eine DATEI*:

<code class="c">#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main() {
    // Create a 1024-byte memory buffer
    char buffer[1024];
    FILE *fp = fmemopen(buffer, sizeof(buffer), "w");

    // Write some data to the buffer
    fputs("Hello, world!", fp);
    fclose(fp);

    // Read the data back from the buffer
    rewind(fp);
    char readBuffer[1024];
    fread(readBuffer, sizeof(char), 1024, fp);

    printf("%s", readBuffer);

    return 0;
}</code>

Das obige ist der detaillierte Inhalt vonWie kann ich mit einer DATEI* in C in einen Speicherpuffer schreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn