[comp.unix.wizards] Unblocking filedescriptor

cthulhu@freja.diku.dk (Stefan Krabbe) (01/26/91)

Hi there,
I am programming in a 4.3BSD environment. And I have a problem
I hope that somebody here can help me with. 
 In a program I am currently writing I make a filedescriptor unblocking
this way:
             fcntl(filedescriptor, F_SETFL, FNDELAY);
.. and it works just fine. But what do I do if I want it make it block-
ing again ? I have noticed that if I from within my program do
             system( ... );
 -then all my previously un-blocking filedescriptors become blocking 
again !?! If you know how to make an un-blocking filedescriptor
blocking again, then please mail me.

Best Regards
            Stefan
                                     ___
  Name:  Stefan Krabbe       .......(o o).......
  Email: cthulhu@diku.dk     ---vvv---U---vvv---
  Institute of Computer Science, University of Copenhagen.

rbj@uunet.UU.NET (Root Boy Jim) (01/27/91)

In article <1991Jan25.235221.21868@odin.diku.dk> cthulhu@freja.diku.dk (Stefan Krabbe) writes:
>I am programming in a 4.3BSD environment...
> In a program I am currently writing I make a filedescriptor unblocking
>this way:
>             fcntl(filedescriptor, F_SETFL, FNDELAY);

What you really want to do to make it unblocking is something like:

	flags = fcntl(fd, F_GETFL, 0);		/* get old flags */
	flags |= FNDELAY;			/* add no delay */
	fcntl(fd, F_SETFL, flags);		/* set new flags */

Your code sets the flags to FNDELAY, and clears any existing flags.
My code adds FNDELAY to the existing flag set.
	
> But what do I do if I want it make it blocking again? 

I think you can take it from here.
-- 

	Root Boy Jim Cottrell <rbj@uunet.uu.net>
	Close the gap of the dark year in between