2013-09-25 83 views
3

我對此感到困惑,我發現在nodejs.org的document上。fs.open'rs'標誌和fs.openSync之間的區別

上面說的是rs標誌fs.open()是用來打開文件在同步模式閱讀。

它只是讓我覺得這是一個異步文件打開但它做了同步讀?我真的很困惑這一點。

之後,它注意到這個沒有將fs.open()變成同步阻塞呼叫。如果這就是你想要的,那麼你應該使用fs.openSync()

fs.openrsfs.openSyncr有什麼區別?

回答

4

區別在於一個函數需要回調。該回調被傳遞給一個低級別的綁定,因此無論您傳遞給它的標誌如何,該函數都將是異步的,因此文檔聲明該標誌「不會將fs.open()轉換爲同步阻塞調用」 。就拿這個例子:如果

var fs = require('fs'); 
var file = './file'; 

// fd will always be defined 
var fd = fs.openSync(file, 'r'); 

// fd is undefined because the function returns a 
// binding, and the actually fs is passed in a callback 
var fd = fs.open(file, 'rs'); 

如果我們沒有一個回調傳遞到異步函數,方法不規整返回結果文件描述符。這是兩個函數的來源是這樣的:

fs.open = function(path, flags, mode, callback) { 
    callback = makeCallback(arguments[arguments.length - 1]); 
    mode = modeNum(mode, 438 /*=0666*/); 

    if (!nullCheck(path, callback)) return; 
    binding.open(pathModule._makeLong(path), stringToFlags(flags), mode, callback); 
}; 

fs.openSync = function(path, flags, mode) { 
    mode = modeNum(mode, 438 /*=0666*/); 
    nullCheck(path); 
    return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); 
}; 
+0

THX,我知道了,但我仍然感到困惑與'fs.open'的''rs''標誌'讀打開文件在同步模式下。因爲它使我認爲這是一個「異步文件打開」,但它正在執行「同步讀取」?我真的很困惑這一點。 – Lellansin

+0

rs標誌告訴操作系統同步打開文件,但該函數使用回調操作,所以它仍然是一個異步函數。 – hexacyanide

+0

非常感謝=) – Lellansin