c++ Gerätedatei öffnen/schliessen



  • Hallo,

    ich greife via c++ auf den i2c bus unter linux zu.

    Dazu hängt ein i2c Bus Adapter am parallelen Port.
    Mein Problem ist das schliessen der Gerätedatei nach erfolgreichem Zugriff.

    Hier mal ein Stück Code:

    i2c = open("/dev/i2c0",O_RDWR);
    ioctl(i2c,I2C_SLAVE, 0x20);
    buf[0] = 0xff;
    write(i2c,buf,1);
    read(i2c,buf,1);
    

    Ich schreibe auf den PCF8574 (I/O IC) zuerst eine 1, dann lese ich die Pins aus mittels Timer, sobald sich der Zustand ändert (z.B. Pin nach Masse gezogen) steht eine 0 drin, im Programm sind mehrere solcher Funktionen, da ich mehrere Chips habe.

    Mein Problem ist nun dass das Programm nach einer gewissen Zeit abstürzt mit der Fehlermeldung dass zu viele Datein geöffnet sind.

    Mir ist nun klar dass ich die Datei irgendwie schliessen muss, leider komme ich an dieser Stelle nicht weiter und bitte um Eure Hilfe.

    Ist es vielleicht auch möglich die Datei nur ein mal beim Programmstart zu öffnen und dann immer damit zu arbeiten ?

    Das ganze läuft unter QT3.

    Danke für jeden Tip

    Grüsse

    atlantex



  • Hast du dieses Codefragment im Inneren einer Schleifenkonstruktion? Wenn ja, würde es mich nicht wundern 🙂

    Versuch mal folgendes:

    i2c = open(...);
    while(!ende)
    {
      //Lesen, verarbeiten,...
    }
    close(i2c);
    

    Und ja, zwischen open() und close() bleibt die Datei geöffnet - du kannst sie also auch zwischen mehreren Funktionen herumreichen, um damit zu lesen/schreiben.


Anmelden zum Antworten