2015-04-10 1 views
0

Допустим, я пишу и читаю тот же файл в узле js. Как обрабатывается целостность данных? У нас есть блокировки или мьютексы в узле js? или он обрабатывается внутри страны?Как записывать чтение файла обрабатывается в узле js?

fs.writeFile("test1", "Hey there! Really large data", function(err) { 
    if(err) { 
     return console.log(err); 
    } 

    console.log("The file was saved!"); 
}); 


fs.readFile('test1', 'utf8', function (err,data) { 
    if (err) { 
    return console.log(err); 
    } 
    console.log(data); 
}); 
+0

Скорее всего, поведение (esp of 'fs.readFile') будет неопределенным или оставлено до OS для его обработки. – robertklep

ответ

0

В node.js нет мьютекса или замков, поскольку он однопоточный. Как я обычно прочитать файл, а затем записать его в чем-то вроде этого:

function copyFile(source, target){ 

    var done = function(err){ 
     console.log(err); 
    }; 


    var rd = fs.createReadStream(source); 
    rd.on("error", function(err){ 
     done(err); 
    }); 

    var wr = fs.createWriteStream(target); 
    wr.on("error", function(err){ 
     done(err); 
    }; 
    rd.pipe(wr); 
} 
0

файловая система Узел документации описывает операции, как:

File I/O обеспечивается простой обертки вокруг стандартных POSIX функция

Там нет замков/мьютексов в node file code так что операционная система или ответственность программистов для обработки консистенции чтения/записи. На самом деле использование блокировок или мьютексов действительно не поможет, поскольку узел является однопоточным, и поэтому вызовы нельзя вызывать одновременно.

Всегда рекомендуется использовать синхронную версию вызовов, которая будет гарантировать порядок чтения/записи.

Смежные вопросы