03-30-2010
Quote:
Originally Posted by
binlib
If you make it sleep shorter time or make your machine busier, you will observe your original problem with named pipe (or any other methods). A Unix pipe has at least 4k buffer size and I don't think there is a way to make it smaller. Without a way to reduce the pipe size and not able to modify the streaming code, I see no way to solve your problem.
If you're saying that the loop may run a few more times, sure. You are quite correct. The generator will write a few bytes into the pipe's buffer, never filling the buffer, and will loop until its timeslice is exhausted. But a few extra loop iterations is not the same as his original problem, in which the generator would run without end.
Regards,
Alister
Last edited by alister; 03-30-2010 at 02:01 AM..
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
Hi Everyone
I am building some A Class HP boxes as web proxy servers, have just installed HP-UX 11.00 and am starting to configure one according to our standard build policy.
However on the A Class I just happened to place the software depot this error message keeps popping up every 2 mins:
... (1 Reply)
Discussion started by: alwayslearningunix
1 Replies
2. Filesystems, Disks and Memory
Hello!
How I can increase or decrease predefined pipe buffer size?
System FreeBSD 4.9 and RedHat Linux 9.0
Thanks! (1 Reply)
Discussion started by: Jus
1 Replies
3. UNIX for Dummies Questions & Answers
I have written the following program. The function of this prog is to read data from a file(source.c) and write into another file(dest.c) using pipes. I have just written a line in the source file.Im able to compile and run the program without errors. But the data is not written onto the other... (2 Replies)
Discussion started by: afser
2 Replies
4. Shell Programming and Scripting
hi all,
this is how my scrip looks like
#!/bin/sh
bindir='/opt/apps/script/bin'
datadir='/opt/apps/script/data'
dir='/opt/apps/script'
while : ; do
ls -1rt /opt/apps/script/data/check.txt*|tail -1 > /dev/null 2>&1
if ;then
chmod +rwx $bindir/dummy2.sh
... (8 Replies)
Discussion started by: tententen
8 Replies
5. UNIX for Advanced & Expert Users
Hi all,
I tried the following command
$ find / -name xyx | ls -l
so logically it should show the listing of directory xyz , assuming there's only one instance of xyz . But the above command shows the listing of current directory instead.
I got the desired result using it in the... (4 Replies)
Discussion started by: bijeet_sunny
4 Replies
6. Programming
problem solved. (1 Reply)
Discussion started by: superfons
1 Replies
7. Shell Programming and Scripting
Hello Everybody,
thanks in advance for spending some time in my problem.
My problem is this:
I want to call a java-Programm out of my shell skript, check if die return code is right, and split the output to the normal output and into a file.
The following code doesn't work right, because in... (2 Replies)
Discussion started by: danifunny
2 Replies
8. Programming
I want to have a message send & receive through 2 half-duplex pipes
Flow of data
top half pipe
stdin--->parent(client) fd1--->pipe1-->child(server) fd1
bottom half pipe
child(server) fd2---->pipe2--->parent(client) fd2--->stdout
I need to have boundary structed message... (1 Reply)
Discussion started by: ouou
1 Replies
9. Programming
Hi!
I'm having problems with pipes... I need comunnications with childs processes and parents, but only one child can comunnicate with parent (first child), others childs can't.
A brief of code:
if(pipe(client1r)<0){
perror("pipe");
}
... (1 Reply)
Discussion started by: serpens11
1 Replies
10. Homework & Coursework Questions
1. The problem statement, all variables and given/known data:
My problem is an infinite loop when i press any other key other then Y or y in the while loop. what i want it to do is return to the normal script outside of it if pressing N or n or keep asking the same question if its any other... (4 Replies)
Discussion started by: Ren_kun
4 Replies
PIPE(2) BSD System Calls Manual PIPE(2)
NAME
pipe -- create descriptor pair for interprocess communication
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <unistd.h>
int
pipe(int fildes[2]);
int
pipe2(int fildes[2], int flags);
DESCRIPTION
The pipe() function creates a pipe, which is an object allowing unidirectional data flow, and allocates a pair of file descriptors. The
first descriptor connects to the read end of the pipe, and the second connects to the write end, so that 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 program: the source's standard output is set
up to be the write end of the pipe, and the sink's standard input is set up to be the read end of the pipe. The pipe itself persists until
all 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 pipe2() function behaves exactly like pipe() only it allows extra flags to be set on the returned file descriptor. The following flags
are valid:
O_CLOEXEC Set the ``close-on-exec'' property.
O_NONBLOCK Sets non-blocking I/O.
O_NOSIGPIPE
Return EPIPE instead of raising SIGPIPE.
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() and pipe2() calls will fail if:
[EFAULT] The fildes buffer is in an invalid area of the process's address space. The reliable detection of this error cannot be
guaranteed; when not detected, a signal may be delivered to the process, indicating an address violation.
[EMFILE] Too many descriptors are active.
[ENFILE] The system file table is full.
pipe2() will also fail if:
[EINVAL] flags is other than O_NONBLOCK or O_CLOEXEC.
SEE ALSO
sh(1), fork(2), read(2), socketpair(2), write(2)
STANDARDS
The pipe() function conforms to ISO/IEC 9945-1:1990 (``POSIX.1'').
HISTORY
A pipe() function call appeared in Version 6 AT&T UNIX. The pipe2() function is inspired from Linux and appeared in NetBSD 6.0.
BSD
January 23, 2012 BSD