2013-04-19 13 views
6

Ho notato quale potrebbe essere un grosso problema se per openSync, quando apri un file con openSync, non ottieni il descrittore di file. Si ottiene solo come argomento per la richiamata 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 su un file di cui avete bisogno anche per il descrittore di file.Come ottenere il descrittore di file in node.js se apri il file usando openSync

Sembrerebbe una significativa omissione nell'API fs per node.js non fornire un modo per ottenere l'accesso alla variabile fd che la richiamata restituisce quando si apre in modalità asincrona se si apre utilizzando chiamate sincrone. Ciò renderebbe l'apertura sincrona inutilizzabile per la maggior parte delle applicazioni.

Davvero non voglio dover usare il file asincrono si apre e si chiude più tardi nel mio sviluppo se posso evitarlo, c'è un modo per ottenere la variabile fd Ho bisogno di chiudere il file con successo quando si utilizza il aperto sincrono?

risposta

12

Cos'altro otterresti 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 lo script del nodo di cui sopra è in esecuzione e in esecuzione lsof /path/to/log.txt di nuovo dopo che lo script è fatto mostra che il file sia chiuso correttamente

Detto questo cosa stai cercando di realizzare aprendo il file? Forse c'è un modo migliore come lo streaming per la tua situazione specifica

+0

grazie per la risposta rapida! Usato il tuo esempio e hai ragione, funziona come un fascino. Questo ha senso che restituirebbe fd dopo openSync, l'API non lo ha detto esplicitamente e non ho pensato di provarlo prima di postare una domanda. Sto semplicemente cercando di registrare alcuni dati di temporizzazione su file per un test sul mio sistema, sono un tipo C/C++ che cerca di capire node.js da solo e i file mi sono familiari, ma andrò a dare un'occhiata flussi sul tuo suggerimento per vedere se potrebbero adattarsi meglio per me nel nodo. Grazie ancora! – Brian

+0

Nessun problema. I documenti node.js sono piacevoli per la maggior parte. A volte però assumono molto il lettore e sono un po 'troncati – Noah

+1

suggerimento: anche '__dirname +'/log.txt'' funziona troppo –

Problemi correlati