2011-10-08 3 views
2

쓴 :콜백 문서로 작동하지 Node.js를 문서</p> <blockquote> <p>fs.write (FD, 버퍼, 오프셋, 길이, 위치, [콜백])</p> </blockquote> <p>그래서 같은

var fs = require('fs'); 

fs.open('./example.txt', 'a', 0666, function(err, fd) { 
    if (err) { throw err; } 
    console.log('file opened'); 
    fs.write(fd, 'test', null, null, null, function(err) { 
    if (err) { throw err; } 
    console.log('file written'); 
    fs.close(fd, function() { 
     console.log('file closed'); 
    }); 
    }); 
}); 

그러나 fs.write의 콜백은 실행되지 않습니다. 출력은 '파일 보류'입니다.

fs.write(fd, 'test', null, null, function(err) { 

하지만 5th 매개 변수는 6th가 아닌 콜백을 할당합니다. 이 작품입니다. 문서가있는 이유는 무엇입니까?

이고 노드 소스 (node_file.cc) 콜백은 6 번째 매개 변수입니다.

Local<Value> cb = args[5]; 

나는 이해할 수 없다.

+0

fs.open의 의미는 0666입니까? – Outsider

답변

4

fs.write에 대한 이전 인터페이스가 여전히 지원됩니다. 문자열을 쓸 수있었습니다. 이전 인터페이스는 5 인자로 '콜백'을 가지고 있음을

fs.write(fd, data, position, encoding, callback) 

주의 사항 : '버퍼'노드를 만들려고 대신 문자열을 준 때문에 당신의 주장은이 세 인터페이스를 맞습니다. 다섯 번째 인수의 경우는 '널'준 :

fs.write(fd, 'test', null, null, null, function(err) { 

노드는 콜백 '널'을보고 그래서 당신은 콜백 노드를 부여했다 생각하지 않았다.

제안 된대로 버퍼 데이터 문자열을 사용하거나 일반 문자열을 사용하려면 이전 인터페이스를 올바르게 사용하십시오. 지금 Buffer를 사용할 준비가되지 않았다면, 준비가 될 때까지 "new Buffer ('test')"를 사용하십시오.

3

fs.write의 두 번째 인수로 문자열이 아닌 buffer을 전달해야합니다. documentation 가입일

var buffer = new Buffer('test'); 
fs.write(fd, buffer, 0, buffer.length, null, function(err, written, buffer) { 

:

fs.write (FD, 버퍼, 오프셋, 길이, 위치, [콜백])

또한, 콜백은 세 개의 인자가 아닌 하나를 설명한다

fd로 지정된 파일에 버퍼를 씁니다.

오프셋과 길이는 기록 할 버퍼 부분을 결정합니다.

위치는이 데이터를 기록해야하는 파일의 시작 부분에서 오프셋을 나타냅니다. position가 null의 경우, 데이터는 현재 위치에 기입 해집니다. pwrite (2)를 참조하십시오.

콜백에는 세 개의 인수 (err, written, buffer)가 제공됩니다. 여기서 written는 버퍼에서 작성된 바이트 수를 지정합니다.

마지막으로 fs.open 호출에서 '0666'은 UNIX file mode을 나타냅니다.