linux-c-programming.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Problem with read() and named pipe (FIFO)
@ 2004-08-16 14:47 Hossein Mobahi
  2004-08-16 14:57 ` Henry Margies
  2004-08-17  3:21 ` Problem with read() and named pipe (FIFO) joy
  0 siblings, 2 replies; 9+ messages in thread
From: Hossein Mobahi @ 2004-08-16 14:47 UTC (permalink / raw)
  To: linux-c-programming

Hello

There is an executable file, say PRG1, that measures
some quantities by sensors and writes the output to
stdout. I want to grab this output by my own program
PRG2, do some process on it and dump the result on the
screen. Since the whole system is real time, prg1 and
prg2 must run in parallel. The simplest answer could
be "prg1 | prg2", but for some reasons I have to use a
named pipe (FIFO), like "./prg1 > /tmp/mypipe &" and
"./prg2", where mypipe is a named pipe and prg2 reads
it by open() and read().

The problem is that prg1 does not produce any return
(I mean '\n'), and numbers are separated by space.
Therefore, read(fd,n,buf) blocks even if "n" is
smaller than what prg1 has actually written to the
pipe (no matter what n is, even if the pipe's buffer
contains more characters than n, read first waits for
return and onces gets it, it will copy n bytes of the
buffer to buf). On the other hand opening in
non-blocking fashion doesn't help, because I want my
program to wait for the output of prg1. Is there any
way to make read() return once the pipe has more
characters than n? What about defining another
delimiter such as "blank", instead of "return"? Let me
add that I do not want to touch kernel sources, I am
looking for a more portable solution using available
system calls or shell's capabilities.

Thnx

--Hossein



		
__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - Send 10MB messages!
http://promotions.yahoo.com/new_mail 

^ permalink raw reply	[flat|nested] 9+ messages in thread
* Re: Problem with read() and named pipe (FIFO) (pipe not disk)
@ 2004-08-17 19:25 Hossein Mobahi
  0 siblings, 0 replies; 9+ messages in thread
From: Hossein Mobahi @ 2004-08-17 19:25 UTC (permalink / raw)
  To: linux-c-programming

Sure, the stdio's buffer is limited. However, as you
said, the real-time constraint doesn't let me wait for
the buffer to become full. I need to read it as soon
as the data is written to the buffer. So I really need
to flush stdio's buffer out of that process.

--Hossein

--- joy <gracecott@sancharnet.in> wrote:
> The program cannot buffer data for all eternity and
> must eventually 
> write it to the
> pipe. So, even if read() blocks because  there is no
> data available, it 
> must return as soon as data
> is written. The real-time element will be lost
> though I doubt it will 
> buffer for a long time.
> Is this the behavior you are experiencing and is
> there a problem with this ?
>
> Hossein Mobahi wrote:
> >The solution that I know is using
> >write(STDOUT_FILENO,....) instead of printf because
> it
> >does not buffer. However, I do not have access to
> the
> >source code of prg1, and I must somehow make prg1
> >flush its standard I/O buffer from outside.



		
__________________________________
Do you Yahoo!?
Yahoo! Mail - 50x more storage than other providers!
http://promotions.yahoo.com/new_mail

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2004-08-17 19:25 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-08-16 14:47 Problem with read() and named pipe (FIFO) Hossein Mobahi
2004-08-16 14:57 ` Henry Margies
2004-08-17 10:58   ` Problem with read() and named pipe (FIFO) (fflush or fsync) Hossein Mobahi
2004-08-17  3:21 ` Problem with read() and named pipe (FIFO) joy
2004-08-17 10:55   ` Problem with read() and named pipe (FIFO) (pipe not disk) Hossein Mobahi
2004-08-17 17:58     ` joy
2004-08-17 19:24       ` Hossein Mobahi
2004-08-17 19:25       ` Hossein Mobahi
  -- strict thread matches above, loose matches on Subject: below --
2004-08-17 19:25 Hossein Mobahi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).