10-16-2006
unix pipe in C
I currently stuck on a simple program that requires unix pipe. I'm have never programmed with unix pipe before, so if anyone can point me to the right different will be greatly appreciated!
I'm suppose to write a program that the parent spawns many child processes and each of the child process are trying to decrement the same variable. This can be easily done with pthreads, since variables are shared in threads but not processes. I'm required to use the unix pipe facility and pipes only, so pthreads, sockets, shared memory are out of the question.
Since I'm new to this unix pipe thing, I did some readings online. Most of the tutorials are only talking about one child process trying to communicate with one parent process using an one-way pipe. There aren't any examples that talks about multiple child processes communicating with the parent. Heck, all I need to know is how to make all these child processes access to the same variable and avoid race conditions.
I did thought about using a semaphore to do the locking and a file to store the variable, however I don't know where the pipe will come in in this approach (since I'm required need to use pipes to do the program).
Thanks in advance!
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
Hi ,
I want to understand how the PIPE works in unix . Precisely what I am doing is this .
1. Creating a Named PIPE with the command
mknod sqlldr.dat p
2. Directing a file output to the PIPE file in the background
cat abc > sqlldr.dat
3.SQL Loader in oracle is... (5 Replies)
Discussion started by: akrathi
5 Replies
2. HP-UX
I would like to know if the following can be done.
route output from an sql select directly to a pipe and compress it at the same time.
regards
Albert (2 Replies)
Discussion started by: booyena1
2 Replies
3. Shell Programming and Scripting
Could one of you shad some light on this:
I need to split the file by determining the record count and than splitting it up into 4 files. Please note, this is not a fixed record length but rather a "|" delimited file.
I am not sure as how to handle reminder/offset for the 4th file.
For... (4 Replies)
Discussion started by: ddedic
4 Replies
4. UNIX for Dummies Questions & Answers
Looking for examples/definition of what the term Pipe means in UNIX. Please provide answers and illustrations if possible or direction. Thanks!:) (5 Replies)
Discussion started by: dfrost126
5 Replies
5. UNIX for Advanced & Expert Users
I am pretty new to UNIX. My client has a requirement where in a directory we have some files with somewhat similar name
like test_XX.txt, test_XY.txt, test_XZ.txt, test_ZZ.txt, test_ZY.txt, test_ZX.txt, test_YY.txt......Out of these files
few files have 0 bytes. Is there a way where we can go... (7 Replies)
Discussion started by: RubinPat
7 Replies
6. Shell Programming and Scripting
I am trying to convert a txt file that includes one long string of data. The lines are separated with hex value 7C (for pipe).
I am trying to process this file using SQR (Peoplesoft) so I thought the easiest thing to do would be to replace the eol char with a CRLF in unix so I can just... (4 Replies)
Discussion started by: sfedak
4 Replies
7. UNIX for Dummies Questions & Answers
EDIT: Nevermind, called a friend who is good at this stuff and he figured it out :D
Hi all,
So I'm trying to teach myself to write programs for unix in c. I am currently creating a program, and I need to pass a struct through a pipe, but I can't figure out how.
The struct I want to pass... (0 Replies)
Discussion started by: twnsfn34
0 Replies
8. Shell Programming and Scripting
Hi
I am new to Unix Shell scripting have a requirement where I have to replace the "unix 1 byte delimiter" with the "pipe" separator and also remove any carriage returns and line feeds if any
The Source File
4 QFH Jungle Hill 32-34 City Road London SE23 3UX
the output should be ... (3 Replies)
Discussion started by: dJHa
3 Replies
9. Shell Programming and Scripting
I have created a fifo named pipe in solaris, which writes the content of a file, line by line, into pipe as below:
$ mkfifo namepipe
$ cat books.txt
"how to write unix code"
"how to write oracle code"
$ cat books.txt >> namepipe &
I have a readpipe.sh script which reads the named... (2 Replies)
Discussion started by: naveen mani
2 Replies
10. UNIX for Beginners Questions & Answers
Hi All,
I'm creating a program which reads millions of bytes from the PIPE and do some processing. As the data is more, the idea is to read the pipe parallely.
Sun Solaris 8
See the code below:
#!/bin/sh
MAXTHREAD=30
awk '{print $1}' metadata.csv > nvpipe &
while
do
... (3 Replies)
Discussion started by: mr_manii
3 Replies
PIPE(2) BSD System Calls Manual PIPE(2)
NAME
pipe -- create descriptor pair for interprocess communication
SYNOPSIS
#include <unistd.h>
int
pipe(int fildes[2]);
DESCRIPTION
The pipe() function creates a pipe (an object that allows unidirectional data flow) and allocates a pair of file descriptors. The first
descriptor connects to the read end of the pipe; the second connects to the write end.
Data written to fildes[1] appears on (i.e., can be read from) fildes[0]. This allows the output of one program to be sent to another pro-
gram: the source's standard output is set up to be the write end of the pipe; the sink's standard input is set up to be the read end of the
pipe. The pipe itself persists until all of its associated descriptors are closed.
A pipe whose read or write end has been closed is considered widowed. Writing on such a pipe causes the writing process to receive a SIGPIPE
signal. Widowing a pipe is the only way to deliver end-of-file to a reader: after the reader consumes any buffered data, reading a widowed
pipe returns a zero count.
The generation of the SIGPIPE signal can be suppressed using the F_SETNOSIGPIPE fcntl command.
RETURN VALUES
On successful creation of the pipe, zero is returned. Otherwise, a value of -1 is returned and the variable errno set to indicate the error.
ERRORS
The pipe() call will fail if:
[EFAULT] The fildes buffer is in an invalid area of the process's address space.
[EMFILE] Too many descriptors are active.
[ENFILE] The system file table is full.
SEE ALSO
sh(1), fork(2), read(2), socketpair(2), fcntl(2), write(2)
HISTORY
A pipe() function call appeared in Version 6 AT&T UNIX.
4th Berkeley Distribution February 17, 2011 4th Berkeley Distribution