linux-c-programming.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hossein Mobahi <hmobahi@yahoo.com>
To: linux-c-programming@vger.kernel.org
Subject: Problem with read() and named pipe (FIFO)
Date: Mon, 16 Aug 2004 07:47:52 -0700 (PDT)	[thread overview]
Message-ID: <20040816144752.43149.qmail@web12701.mail.yahoo.com> (raw)

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 

             reply	other threads:[~2004-08-16 14:47 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-16 14:47 Hossein Mobahi [this message]
2004-08-16 14:57 ` Problem with read() and named pipe (FIFO) 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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040816144752.43149.qmail@web12701.mail.yahoo.com \
    --to=hmobahi@yahoo.com \
    --cc=linux-c-programming@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).