Browse Source

stdout and stderr are blocking when referring to regular files

Fixes message tests.
v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
a936768890
  1. 12
      doc/api/process.markdown
  2. 61
      lib/fs.js
  3. 2
      src/node.js

12
doc/api/process.markdown

@ -80,10 +80,20 @@ Example: the definition of `console.log`
process.stdout.write(d + '\n');
};
`process.stderr` and `process.stdout` are unlike other streams in Node in
that writes to them are usually blocking. They are blocking in the case
that they refer to regular files or TTY file descriptors. In the case they
refer to pipes, they are non-blocking like other streams.
### process.stderr
A writable stream to stderr. Writes on this stream are blocking.
A writable stream to stderr.
`process.stderr` and `process.stdout` are unlike other streams in Node in
that writes to them are usually blocking. They are blocking in the case
that they refer to regular files or TTY file descriptors. In the case they
refer to pipes, they are non-blocking like other streams.
### process.stdin

61
lib/fs.js

@ -1337,3 +1337,64 @@ WriteStream.prototype.destroy = function(cb) {
// There is no shutdown() for files.
WriteStream.prototype.destroySoon = WriteStream.prototype.end;
// SyncWriteStream is internal. DO NOT USE.
// Temporary hack for process.stdout and process.stderr when piped to files.
function SyncWriteStream(fd) {
this.fd = fd;
this.writable = true;
this.readable = false;
};
util.inherits(SyncWriteStream, Stream);
// Export
fs.SyncWriteStream = SyncWriteStream;
SyncWriteStream.prototype.write = function(data, arg1, arg2) {
var encoding, cb;
// parse arguments
if (arg1) {
if (typeof arg1 === 'string') {
encoding = arg1;
cb = arg2;
} else if (typeof arg1 === 'function') {
cb = arg1;
} else {
throw new Error("bad arg");
}
}
// Change strings to buffers. SLOW
if (typeof data == 'string') {
data = new Buffer(data, encoding);
}
fs.writeSync(this.fd, data, 0, data.length);
if (cb) {
process.nextTick(cb);
}
return true;
};
SyncWriteStream.prototype.end = function(data, arg1, arg2) {
if (data) {
this.write(data, arg1, arg2);
}
this.destroy();
};
SyncWriteStream.prototype.destroy = function() {
fs.closeSync(this.fd);
this.fd = null;
this.emit('close');
return true;
};
SyncWriteStream.prototype.destroySoon = SyncWriteStream.prototype.destroy;

2
src/node.js

@ -239,7 +239,7 @@
case 'FILE':
var fs = NativeModule.require('fs');
stream = new fs.WriteStream(null, { fd: fd });
stream = new fs.SyncWriteStream(fd);
stream._type = 'fs';
break;

Loading…
Cancel
Save