Sponsored Content
Full Discussion: print all nonempty pipe
Top Forums Programming print all nonempty pipe Post 302574777 by jim mcnamara on Friday 18th of November 2011 10:06:01 AM
Old 11-18-2011
stat only works on Solaris pipes, AFAIK. The OP is on Linux.

If you are going to use C and not a shell script: set the pipe file descriptor non-blocking and then use select() or maybe poll() to see if the file descriptor is available to read or write. Then you do not worry about the "size" of the pipe. Which inofmration is mnot very useful anyway.

Here is some sample code to set the fd non-blocking.
Code:
//error handler 
void errchk(const int val)
{
   if (val == -1)
   {
      perror("Error on pipe");
      exit(1);
   }
}
// set fd to non blocking
void set_no_block(int fd)
{
   int fileflags=fcntl(fd, F_GETFD);

   errchk(fileflags);
   fileflags|=O_NONBLOCK;
   errchk(fcntl(fd, F_SETFD, fileflags));
}

Example use of select (this is a more generic approach for any file descriptor open for read):

The GNU C Library
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

remove a nonempty directory

How can I remove a non empty directory. ' rmdir directory_name ' complains that the directory is not empty. The same problem happens with ' rmdir directory_name/* ' Thanks (2 Replies)
Discussion started by: babayeve
2 Replies

2. UNIX for Advanced & Expert Users

How to delete nonempty directory?

How to delete nonempty directory? Thanks (2 Replies)
Discussion started by: xli3
2 Replies

3. Shell Programming and Scripting

count number of nonempty columns in row

Hi, Suppose i have a inputfile in csv format. How to use awk to count 'the number of nonempty columns in each row' minus one, and add the value as a new column in the end For cosmetic reason, it's even better to include a descriptive label for the last column in the first row. for... (2 Replies)
Discussion started by: grossgermany
2 Replies

4. Shell Programming and Scripting

use awk to replace empty fields with the latest nonempty field

Hi suppose I have a csv file like this count,1977,1978,1979 usa, , , blue japan, red, yellow,green india, , yellow,blue china, blue, yellow, green I want the output to be(replace everything, including empty data, with the most recent data): ... (1 Reply)
Discussion started by: grossgermany
1 Replies

5. UNIX for Dummies Questions & Answers

grep pipe filename print issue

uname -a SunOS mypc 5.10 Generic_141414-07 sun4v sparc SUNW,SPARC-Enterprise-T2000 uname -a SunOS mypc 5.10 Generic_144488-07 sun4v sparc SUNW,SPARC-Enterprise-T5220 find . -name "*.cer" -exec keytool -v -list -printcert -file {} \; | grep -i "Aug 03" Valid from: Mon Jan 29 00:00:00 GMT... (16 Replies)
Discussion started by: shifahim
16 Replies

6. Shell Programming and Scripting

Print pipe separated list as line by line in Korn Shell

Korn Shell in AIX 6.1 I want to print the below shown pipe (|) separated list line by line. line=es349889|nhb882309|ts00293|snh03524|bg578835|bg37900|rnh00297|py882201|sg175883 for i in line do echo "Hello $line " done I wanted to execute the above for loop. But i can't even set the... (3 Replies)
Discussion started by: polavan
3 Replies

7. Shell Programming and Scripting

awk print pipe

Hey fellas, I wrote an script which its output is like this: a 1 T a 1 T a 2 A b 5 G b 5 G b 5 G I wanna print $1 $2 and the total number of $2 value as the third column and after that $3. Sth like this: a 1 2 T a 2 1 A b 5 3 G I know how to do it with a given input... (4 Replies)
Discussion started by: @man
4 Replies

8. Shell Programming and Scripting

The pipe not use "tee" to print on the screen for specific function

I have code fragment like { aa bb cc } > $LOG aa bb cc, all call function "ff", I want "ff" to print on the screen,but others do not print on the scree, is there a method? I can't use "tee", becasue tee I meet the write "error" ff() { echo "hello" } (2 Replies)
Discussion started by: yanglei_fage
2 Replies

9. Shell Programming and Scripting

Use less pipe for grep or awk sed to print the line not include xx yy zz

cat file |grep -v "xx" | grep -v "yy" |grep -v "zz" (3 Replies)
Discussion started by: yanglei_fage
3 Replies

10. Red Hat

Print Date when Broken Pipe happens

Hi all, as i have multiple broken pipes on ssh sessions, i need to find out after how much time it happens, ssh root@testServer root@testServer's password: ssh:notty Last login: Thu Apr 6 06:41:16 2017 from 10.10.10.2 # but when broke pipe happen i don't have any idea after how much... (3 Replies)
Discussion started by: charli1
3 Replies
pipe(2) 							System Calls Manual							   pipe(2)

Name
       pipe - create an interprocess channel

Syntax
       include <limits.h> /*Definition of PIPE_MAX*/
       pipe(fildes)
       int fildes[2];

Arguments
       fildes	 Passing an address as an array of two integers into the system call.

Description
       The system call creates an I/O mechanism called a pipe.	The file descriptors returned can be used in and operations.  Their integer values
       will be the two lowest available at the time of the function call.  The O_NONBLOCK and FD_CLOEXEC flags will be clear on both file descrip-
       tors.

       When the pipe is written using the descriptor fildes[1], up to PIPE_MAX bytes of data are buffered before the writing process is suspended.
       A read using the descriptor fildes[0] picks up the data.

       It is assumed that after the pipe has been set up, two (or more) cooperating processes (created by subsequent calls) pass data through  the
       pipe with and calls.

       The shell has a syntax to set up a linear array of processes connected by pipes.

       For further information on how and calls behave with pipes, see the and reference pages.

       A signal is generated if a write on a pipe with only one end is attempted.

Restrictions
       Should more than 4096 bytes be necessary in any pipe among a loop of processes, deadlock may occur.

       The  underlying	implementation	of  pipes is no longer socket based, but rather implemented through the file system.  Any application that
       needs socket functionality from pipes should use the system call.

Return Values
       The function value zero is returned if the pipe was created; -1 if an error occurred.

Diagnostics
       The call fails if:

       [EMFILE]       Too many descriptors are active.

       [ENFILE]       The system file table is full.

       [EFAULT]       The fildes buffer is in an invalid area of the process's address space.

Environment
       Differs from the System V definition in that ENFILE is not a possible error condition.

See Also
       sh(1), fork(2), read(2), socketpair(2), write(2)

																	   pipe(2)
All times are GMT -4. The time now is 09:15 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy