[Gambas-user] Help with SHELL and EXEC

Benoit Minisini gambas at ...1...
Sun Oct 12 16:27:14 CEST 2008


On dimanche 12 octobre 2008, Benoit Minisini wrote:
> On dimanche 12 octobre 2008, Doriano Blengino wrote:
> > Tell me what your tests say to you - this is very interesting because I
> > did not try if that book was true or not.
>
> Strange behaviours.
>
> If I replace INPUT OUTPUT by READ WRITE, the process does not write to its
> standard output anymore.
>
> But if I replace the "tr" program by "cat", then READ WRITE works as
> expected.
>
> So there is something different in "tr" that prevents him to work with the
> READ WRITE options.
>
> Moreover, sometimes the first write to the "tr" process fails (with a bad
> file descriptor error message).
>
> All that needs some investigation...
>
> Regards,

OK, I think I have understoood. The behaviour is normal (except the 'bad file 
descriptor' error message).

Try that in a shell:

$ cat | tr "a-z" "A-Z" > tr.out

This is an equivalent of what you tried to do in your program. Some things are 
sent to the input of "tr" line by line, and the output is put somewhere 
(inside a file in that case).

I looked inside the source code of tr, and this tool uses buffered output.

So:
- If the output of 'tr' is a terminal (this is the case when you use INPUT 
OUTPUT in Gambas), then 'tr' output is automatically flushed at each end of 
line.
- Otherwise, output is flushed when the buffer is full, i.e. when 'tr' has 
4096 bytes to write.

You see that in the shell command above. While you have not entered at least 
4096 bytes, nothing is write in the tr.out file.

I hope I was clear!

Regards,

-- 
Benoit Minisini




More information about the User mailing list