Lesen aus einer Datei-Deskriptor in C

(korrigiert mich wenn ich falsch auf meine Bedingungen), So muss ich Lesen aus einem Datei-Deskriptor, aber die read-Methode in einer int für die byte-Größe zu Lesen, die viel ODER kann ich O_NONBLOCK verwenden, aber ich habe noch zum einrichten von bis zu einer Puffer-Größe von eine unbekannte Größe. was es schwierig macht. heres was ich habe, so weit

dies ist meine Methode, mit der alle die polling-und mkfifo. und N ist bereits vordefiniert in main

struct pollfd pfd[N];
int i;
for(i = 0; i < N; i++)
{
    char fileName[32];
    snprintf (fileName, sizeof(fileName), "%d_%di", pid, i);
    mkfifo(fileName, 0666);
    pfd[i].fd = open(fileName, O_RDONLY | O_NDELAY);
    pfd[i].events = POLLIN;
    pfd[i].revents = 0;

    snprintf (fileName, sizeof(fileName), "%d_%do", pid, i);
    mkfifo(fileName, 0666);
    i++;
    pfd[i].fd = open(fileName, O_WRONLY | O_NDELAY);
    pfd[i].events = POLLOUT;
    pfd[i].revents = 0;
    i--;
}
while(1)
{
    int len, n;
    n = poll(pfd, N, 2000);
    if( n < 0 )
    {   
        printf("ERROR on poll");
        continue;
    }
    if(n == 0)
    {
        printf("waiting....\n");
        continue;
    }
    for(i = 0; i < N; i++)
    {
        char buff[1024]; <---i dont want to do this

        if (pfd[i].revents & POLLIN)
        {
            printf("Processing input....\n");
            read(pfd[i].fd, buff, O_NONBLOCK);
            readBattlefield(buff);
            print_battleField_stats();
            pfd[i].fd = 0;
        }
    }
}

ich auch irgendwo gelesen, dass, sobald read() liest alle Daten kommen, leert sich die Leitung, was bedeutet, dass ich verwenden können, das gleiche nochmals für eine eingehende Daten. aber es ist nicht leer, das Rohr, weil ich nicht verwenden das gleiche Rohr wieder. Ich fragte meinen professor, aber alles, was er sagt, war etwas wie scanf, aber wie Sie verwenden scanf wenn scanf nimmt ein stream-DATEI, und die Umfrage.fd ist ein int? im wesentlichen meine entscheidende Frage ist, wie zu Lesen, die eingehenden Daten über den Datei-Deskriptor mit scan oder der anderen Art? mit scan wird mir helfen, mich mehr mit dem handling der Daten.

BEARBEITEN:
in einem anderen terminal, ich habe zu cat Datei - > (named_file)
und mein Hauptprogramm liest die Eingabedaten. heres, was die Eingabe der Daten sieht wie

3 3

1 2 0

0 2 0

3 0 0

ersten 2 zahlen sind der grid-Informations-und Spieler-Nummer, und nach dem raster, aber das ist eine vereinfachte version, krank werden, die den Umgang mit Größen über 100 Spieler und Netze von über 1000

  • Stellen Sie den Puffer in der Größe chunk-Daten-Sie sind bereit, um zu einem bestimmten Zeitpunkt, dann behandeln Sie Sie, dass viel wiederholt. Oder wenn Sie fdopen() der fd erhalten Sie eine DATEI * und verwenden fscanf() auf, die.
  • Seite Hinweis - Ihre pfd initialisaion tricks mit i++ und i-- nicht gut aussieht.
  • Kannst du ein Beispiel von dem, was Ihre input-Daten Aussehen?
  • du hast Recht, ich dachte, es funktionierte, aber danke für den Hinweis
  • Sie sind ein Heiliger lol, Ihr diese Methoden, die ich nie wissen, dass Sie immer sparen, egal die Menge der Forschung, die ich tun, ich kann niemals stolpern die richtigen Methoden
InformationsquelleAutor Steven R | 2014-07-23
Schreibe einen Kommentar