Edit AllPages

I wish to launch a command and show the result of this command in the GUI as it becomes available.

For this I was using NSTask with an NSPipe for its output, which I read from in the background.

Unfortunately data only becomes available when the underlying buffer is full, which is everything but desired in this situation.

I have tried to disable buffering using:

NSPipe *outPipe = [NSPipe pipe]; int fd = outPipe fileHandleForReading] fileDescriptor]; int err = fcntl(fd, F_NOCACHE, true);

But I get -1 back from fcntl() (which indicate error).

Anyone found a solution to this problem?

I realise that caching might refer to file system caches (i.e. used when re-reading a file), but then what controls buffering? I am aware of setvbuf(), but this would be for the C layer, and as such should not interfere with file descriptor buffering.

For the records, I have also tried to periodically fsync() the file descriptor, but without any luck.

If line-by-line is good enough then you may want to run it under a pty pseudo-terminal.

The method that I use is to use the pty program as outlined in “Advanced Programming in the UNIX Environment” by Richard Stevens. It can be built from the sources at which will also require the sources at