On 10/12/07, Henning Thielemann <lemming@henning-thielemann.de> wrote:
The data of 'out' seems to be buffered, because 'aseqdump' must produce many lines until even the first one is returned by 'hGetLine' and printed by 'putStrLn'. I tried to disable buffering for 'out' and indeed 'NoBuffering' is printed to the terminal, but the output from 'aseqdump' is still deferred.
[I suspect this is a job for haskell-cafe@, anyway] Are you sure that you aseqdump isn't buffering itself? The standard C libraries will buffer output at the line level at least, and are free to buffer much more than that if they think that the output is not to a terminal. Try building this code: #include <stdio.h> #include <unistd.h> int main() { printf("line 1\n"); write(1, "line 2\n", 7); printf("line 3\n"); return 0; } For me (glibc 2.6), if I send stdout to a terminal then it's line buffered and I get the lines in the correct order. However, if I redirect to a file, line 3 comes first because the printf lines are buffered until the process dies. AGL -- Adam Langley agl@imperialviolet.org http://www.imperialviolet.org 650-283-9641