By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,478 Members | 1,684 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,478 IT Pros & Developers. It's quick & easy.

Re: Using "wc" inside C program

P: n/a
yes it is supposedly easier to use a temporary file, but is it possible
to use popen() for the given instance ?
how can the required read and write achieved using popen(), when as you
mentioned popen() allows only one at a time ?

-- Satish
On Sun, 2008-11-16 at 18:56 +0000, Richard Tobin wrote:
In article <52**********************************@1g2000prd.go oglegroups.com>,
Snaggy <l.******@gmail.comwrote:
Or any other standar unix program..
I want to pass something to a pipe for wc (to count words) and read
the result into a variable..

For now I put an intermediate result into a file and then open the
file and read it..

Reading and writing to another program through pipes is, in general, a
recipe for deadlock. In the case of "wc" this wouldn't be a problem,
but if you were using something like "tr" it would. To make it work
requires some kind of asynchronous (or select()ed) i/o, multiple
threads, or arbitrary buffering in the operating system. Consequently
the unix popen() call only provides for you to either read or write,
not both.

For this simple case, your solution of using a temporary file is
probably the easiest, requiring little unix-specific knowledge.

-- Richard
Nov 16 '08 #1
Share this Question
Share on Google+
4 Replies


P: n/a
eerpini wrote:
>
yes it is supposedly easier to use a temporary file, but is it
possible to use popen() for the given instance ? how can the
required read and write achieved using popen(), when as you
mentioned popen() allows only one at a time ?
Please do not top-post. Your answer belongs after (or intermixed
with) the quoted material to which you reply, after snipping all
irrelevant material. See the following links:

<http://www.catb.org/~esr/faqs/smart-questions.html>
<http://www.caliburn.nl/topposting.html>
<http://www.netmeister.org/news/learn2quote.html>
<http://cfaj.freeshell.org/google/ (taming google)
<http://members.fortunecity.com/nnqweb/ (newusers)

--
[mail]: Chuck F (cbfalconer at maineline dot net)
[page]: <http://cbfalconer.home.att.net>
Try the download section.
Nov 16 '08 #2

P: n/a
In article <12**********************@localhost.localdomain> ,
eerpini <ee*****@gmail.comwrote:
>yes it is supposedly easier to use a temporary file, but is it possible
to use popen() for the given instance ?
You can use popen() to send it the input through a pipe, with the
result going to a file you read later. Or you can put the input in a
file, and use popen() to read the result. You can't use popen() to
get a pipe for both input and output.

To use a pipe for both input and output, you have to do something much
more complicated, such as using pipe(), fork(), and exec() to set up
the process, and select() to handle the reading and writing. It's
not worth the trouble in most cases.

-- Richard
--
Please remember to mention me / in tapes you leave behind.
Nov 16 '08 #3

P: n/a
Please do not top-post. Your answer belongs after (or intermixed
with) the quoted material to which you reply, after snipping all
irrelevant material. See the following links:
sorry for that , went through the links,
Thanks

Nov 16 '08 #4

P: n/a
eerpini wrote:
>
>Please do not top-post. Your answer belongs after (or intermixed
with) the quoted material to which you reply, after snipping all
irrelevant material. See the following links:

sorry for that , went through the links,
Good for you. That's why I try to respond to top-posters early.

--
[mail]: Chuck F (cbfalconer at maineline dot net)
[page]: <http://cbfalconer.home.att.net>
Try the download section.
Nov 16 '08 #5

This discussion thread is closed

Replies have been disabled for this discussion.