[Gambas-user] Pipe doesn't receive contents
Benoît Minisini
gambas at ...1...
Sat May 8 14:30:43 CEST 2010
>
> No, you are not stupid - but it is false that it is stupid to use EOF
> with pipes.
> Just to show, I wrote a stupid short program in C (the word stupid used
> three times...):
>
> #include <stdio.h>
>
> int main(argc, argv) {
> FILE* f;
> int c;
>
> f = fopen("/tmp/fifo", "r");
> do {
> c = fgetc(f);
> if (c == EOF) break;
> putchar(c);
> } while (1);
> fclose(f);
> }
>
> This is the simplest (yet clear) program to test how to read and check
> for EOF in a pipe.
> Compiled, ran ./a.out, and seen that it works perfectly, both with "ls
>
> >..." and "ls -la >...".
>
> After that, I tried even with "cat >/tmp/fifo", to be sure (I am far
> slower than /bin/ls). Unsurprisingly, it works; after all, it is a
> strong point of unix to have a uniform interface to files, sockets,
> pipes and fifos (and more), and a simple test using two cat(1) in two
> different terminal would be enough. But as I never looked at the cat.c
> source, I wanted to see by myself what you was saying.
>
> I don't know what the problem is with gambas, so I can't help; but I do
> know that EOF with pipes and FIFOs work - I use both to control gdb in
> one of my freepascal projects; so, when I see someone on this list
> saying that it is a nonsense to check EOF in pipes, because all depends
> on speed, I must note that this is wrong. Of course, I may be wrong - if
> you do know something that I do not, please let me know: I am happy to
> learn more.
>
> Regards,
> Doriano
>
First you used buffered I/O, whereas PIPE in Gambas use non-buffered I/O. Then
you use fgetc(), which reads one character, whereas in Gambas the code uses
LINE INPUT, which is far more complex. So you are not comparing the two same
programs...
Regards,
--
Benoît Minisini
More information about the User
mailing list