Come ottenere il descrittore di file in node.js se si apre un file utilizzando openSync

Ho notato quello che potrebbe essere un grosso problema, anche se per openSync, che quando si apre un file con openSync, non si ottiene il descrittore di file. Si ottiene solo un argomento per il callback se si apre con la chiamata asincrona. Il problema è che devi AVERE il descrittore di file per chiudere il file! Ci sono altre cose che un programmatore potrebbe desiderare di fare un file che avete bisogno di un descrittore di file.

Sembra un’omissione significativa nel fs API per node.js non per fornire un modo per ottenere l’accesso a fd variabile che la chiamata restituisce all’apertura in modalità asincrona se si apre utilizzando le chiamate sincrone. Che sarebbe sostanzialmente rendere sincrono aprire inutilizzabile per la maggior parte delle applicazioni.

Io davvero non voglio dover usare il async file si apre e chiude tardi nel mio sviluppo, se posso evitarlo, c’è un modo per ottenere il fd variabile ho bisogno di chiudere il file correttamente quando si utilizza il sincrono aperto?

OriginaleL’autore Brian | 2013-04-19

1 risposta

  1. 13

    Cos’altro si potrebbe ottenere da openFileSync oltre a un descrittore di file?

    var fs = require('fs')
    var path = require('path')
    var fd = fs.openSync(path.join(process.cwd(), 'log.txt'), 'a')
    fs.writeSync(fd, 'contents to append')
    setTimeout(function () {
      console.log('closing file now')
      fs.closeSync(fd)
    }, 10000)

    Esecuzione lsof /path/to/log.txt mentre il nodo script di cui sopra è in esecuzione e in esecuzione lsof /path/to/log.txt di nuovo dopo aver eseguito lo script mostra che il file viene chiuso correttamente

    Che ha detto quello che stai cercando di realizzare con l’apertura del file? Forse c’è un modo migliore, come lo streaming per la vostra situazione specifica

    grazie per la rapida risposta! Usato il tuo esempio e hai ragione, funziona come un fascino. Che senso avrebbe restituito fd dopo openSync, l’API, solo che non dicono in modo esplicito e non pensavo di provare prima di postare la domanda. Sto semplicemente cercando di registrare alcuni dati della distribuzione di file per un test sul mio sistema, ho un C/C++ ragazzo cercando di capire node.js sul mio file e mi sono familiari, ma devo andare a controllare i flussi su tuo suggerimento per vedere se potrebbe andare meglio per me nel nodo. Grazie ancora!
    Nessun problema. Il node.js docs sono ottime per la maggior parte. A volte, però, assumono un sacco di lettore e sono un po ‘ più troncato
    suggerimento: __dirname + '/log.txt' lavora troppo

    OriginaleL’autore Noah

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *