<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5089197319652425104</id><updated>2011-07-07T16:25:20.106-07:00</updated><category term='C Compilation'/><category term='execvp'/><category term='stdio'/><category term='Linux Script Examples'/><category term='POSIX Testing'/><category term='fcntl manual'/><category term='programming in linux c'/><category term='execve'/><category term='Linux Script Variables'/><category term='waitpid'/><category term='pipe'/><category term='C and C++ Programming'/><category term='down.mutex'/><category term='man page'/><category term='threads examples'/><category term='execle'/><category term='shmctl()'/><category term='sending signals'/><category term='skills every programmer must learn'/><category term='manual for mkfio'/><category term='manual for open'/><category term='threads more'/><category term='attributes'/><category term='Debugging'/><category term='linux c'/><category term='vim'/><category term='write'/><category term='usplash'/><category term='msgget'/><category term='programs'/><category term='serial port'/><category term='manual for shmget'/><category term='system'/><category term='Linux Script Programming'/><category term='threads'/><category term='USYNC_THREAD'/><category term='POSIX semaphores'/><category term='example'/><category term='synchronization'/><category term='__clone2'/><category term='message queues'/><category term='fork'/><category term='Tips on improving Programming Logic'/><category term='kill manual'/><category term='Shell Capabilities'/><category term='fcntl'/><category term='manual for pipe'/><category term='shared memory'/><category term='custom'/><category term='Preprocessing Directives'/><category term='execv'/><category term='up'/><category term='interrupt and signals'/><category term='msgget()'/><category term='manual for read'/><category term='Linux POSIX System Capabilities'/><category term='Viewmod'/><category term='examples'/><category term='Linux Script Test Conditions'/><category term='Introduction'/><category term='dup'/><category term='msgsnd'/><category term='fifo'/><category term='threads library'/><category term='lower level RPC'/><category term='wait'/><category term='Recharge your programming batteries - Tips'/><category term='shmdt()'/><category term='signal'/><category term='common programming mistakes to avoid'/><category term='RPC'/><category term='kill'/><category term='thread attributes'/><category term='linuxprogramminginc'/><category term='execlp'/><category term='remote procedure call'/><category term='shmctl'/><category term='dup2'/><category term='getppid manual'/><category term='USYNC_PROCESS'/><category term='manual for popen'/><category term='detach state'/><category term='waitid'/><category term='ipc'/><category term='shmat()'/><category term='pipes'/><category term='manual'/><category term='man'/><category term='linux programming in c'/><category term='linux programming'/><category term='semaphores'/><category term='sockets'/><category term='process'/><category term='commonly used programs'/><category term='programming'/><category term='manual for shmat'/><category term='execl'/><category term='An example looping script'/><category term='shmop'/><category term='Example using Variables'/><category term='getppid'/><category term='Control and Iteration'/><category term='programming in c'/><category term='queue'/><category term='close'/><category term='mkfifo'/><category term='clone'/><category term='An example that manages and reads files'/><category term='msgrcv'/><category term='shmat'/><category term='treads thoery'/><category term='rpcgen'/><category term='threads basic'/><category term='message passing'/><category term='man pages'/><category term='linuxprogramming'/><category term='shmget'/><title type='text'>Programming in Linux</title><subtitle type='html'>Programming with C in Linux or Unix systems is different compared to that in windows. The compilers used in unix and linux systems are different compared to that used in windows.
Here i deal with basic programming in C and some options available in unix and linux systems..(like pipes,fork(),message quues,shared memory...etc).</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>82</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-1329529352393013456</id><published>2009-06-26T11:48:00.000-07:00</published><updated>2009-06-26T12:09:12.610-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='man pages'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>Man page: Vim</title><content type='html'>NAME&lt;br /&gt;       vim - Vi IMproved, a programmers text editor&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;       vim [options] [file ..]&lt;br /&gt;       vim [options] -&lt;br /&gt;       vim [options] -t tag&lt;br /&gt;       vim [options] -q [errorfile]&lt;br /&gt;&lt;br /&gt;       ex&lt;br /&gt;       view&lt;br /&gt;       gvim gview evim eview&lt;br /&gt;       rvim rview rgvim rgview&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;       Vim is a text editor that is upwards compatible to Vi.  It can&lt;br /&gt;       be used to edit all kinds of plain  text.   It  is  especially&lt;br /&gt;       useful for editing programs.&lt;br /&gt;There  are  a  lot of enhancements above Vi: multi level undo,&lt;br /&gt;       multi windows and buffers, syntax highlighting,  command  line&lt;br /&gt;       editing,  filename completion, on-line help, visual selection,&lt;br /&gt;       etc..  See ":help vi_diff.txt" for a summary  of  the  differ‐&lt;br /&gt;       ences between Vim and Vi.&lt;br /&gt;&lt;br /&gt;       While  running  Vim a lot of help can be obtained from the on-&lt;br /&gt;       line help system, with the ":help" command.  See  the  ON-LINE&lt;br /&gt;       HELP section below.&lt;br /&gt;&lt;br /&gt;       Most  often Vim is started to edit a single file with the com‐&lt;br /&gt;       mand&lt;br /&gt;&lt;br /&gt;            vim file&lt;br /&gt;&lt;br /&gt;       More generally Vim is started with:&lt;br /&gt;&lt;br /&gt;            vim [options] [filelist]&lt;br /&gt;       If the filelist is missing, the  editor  will  start  with  an&lt;br /&gt;       empty buffer.  Otherwise exactly one out of the following four&lt;br /&gt;       may be used to choose one or more files to be edited.&lt;br /&gt;&lt;br /&gt;       file ..     A list of filenames.  The first one  will  be  the&lt;br /&gt;                   current file and read into the buffer.  The cursor&lt;br /&gt;                   will be  positioned  on  the  first  line  of  the&lt;br /&gt;                   buffer.   You  can get to the other files with the&lt;br /&gt;                   ":next" command.  To edit a file that starts  with&lt;br /&gt;                   a dash, precede the filelist with "--".&lt;br /&gt;&lt;br /&gt;       -           The file to edit is read from stdin.  Commands are&lt;br /&gt;                   read from stderr, which should be a tty.&lt;br /&gt;&lt;br /&gt;       -t {tag}    The file to edit and the initial  cursor  position&lt;br /&gt;                   depends  on  a "tag", a sort of goto label.  {tag}&lt;br /&gt;                   is looked up in the tags file, the associated file&lt;br /&gt;                   becomes  the  current file and the associated com‐&lt;br /&gt;                   mand is executed.  Mostly this is used for C  pro‐&lt;br /&gt;                   grams,  in  which  case  {tag} could be a function&lt;br /&gt;                   name.  The effect is that the file containing that&lt;br /&gt;                   function  becomes  the current file and the cursor&lt;br /&gt;                   is positioned on the start of the  function.   See&lt;br /&gt;                   ":help tag-commands".&lt;br /&gt;&lt;br /&gt;       -q [errorfile]&lt;br /&gt;                   Start  in  quickFix mode.  The file [errorfile] is&lt;br /&gt;                   read and the first error is displayed.  If [error‐&lt;br /&gt;                   file]  is  omitted,  the filename is obtained from&lt;br /&gt;                   the ’errorfile’ option (defaults  to  "AztecC.Err"&lt;br /&gt;                   for  the  Amiga,  "errors.err"  on other systems).&lt;br /&gt;                   Further errors can be jumped  to  with  the  ":cn"&lt;br /&gt;                   command.  See ":help quickfix".&lt;br /&gt;&lt;br /&gt;       Vim  behaves differently, depending on the name of the command&lt;br /&gt;       (the executable may still be the same file).&lt;br /&gt;&lt;br /&gt;       vim       The "normal" way, everything is default.&lt;br /&gt;&lt;br /&gt;       ex        Start in Ex mode.  Go to Normal mode with the  ":vi"&lt;br /&gt;                 command.  Can also be done with the "-e" argument.&lt;br /&gt;       view      Start in read-only mode.  You will be protected from&lt;br /&gt;                 writing the files.  Can also be done with  the  "-R"&lt;br /&gt;                 argument.&lt;br /&gt;&lt;br /&gt;       gvim gview&lt;br /&gt;                 The  GUI version.  Starts a new window.  Can also be&lt;br /&gt;                 done with the "-g" argument.&lt;br /&gt;&lt;br /&gt;       evim eview&lt;br /&gt;                 The GUI version in easy mode.  Starts a new  window.&lt;br /&gt;                 Can also be done with the "-y" argument.&lt;br /&gt;&lt;br /&gt;       rvim rview rgvim rgview&lt;br /&gt;                 Like  the above, but with restrictions.  It will not&lt;br /&gt;                 be possible to start shell commands, or suspend Vim.&lt;br /&gt;                 Can also be done with the "-Z" argument.&lt;br /&gt;&lt;br /&gt;OPTIONS&lt;br /&gt;       The  options  may be given in any order, before or after file‐&lt;br /&gt;       names.  Options without an argument can be  combined  after  a&lt;br /&gt;       single dash.&lt;br /&gt;&lt;br /&gt;       +[num]      For  the  first file the cursor will be positioned&lt;br /&gt;                   on line "num".  If "num" is  missing,  the  cursor&lt;br /&gt;                   will be positioned on the last line.&lt;br /&gt;&lt;br /&gt;       +/{pat}     For  the  first file the cursor will be positioned&lt;br /&gt;                   on the first  occurrence  of  {pat}.   See  ":help&lt;br /&gt;                   search-pattern" for the available search patterns.&lt;br /&gt;&lt;br /&gt;       +{command}&lt;br /&gt;&lt;br /&gt;       -c {command}&lt;br /&gt;                   {command} will be executed after  the  first  file&lt;br /&gt;                   has  been read.  {command} is interpreted as an Ex&lt;br /&gt;                   command.  If the {command} contains spaces it must&lt;br /&gt;                   be  enclosed in double quotes (this depends on the&lt;br /&gt;                   shell that  is  used).   Example:  Vim  "+set  si"&lt;br /&gt;                   main.c&lt;br /&gt;                   Note: You can use up to 10 "+" or "-c" commands.&lt;br /&gt;      -S {file}   {file}  will  be  sourced after the first file has&lt;br /&gt;                   been read.   This  is  equivalent  to  -c  "source&lt;br /&gt;                   {file}".  {file} cannot start with ’-’.  If {file}&lt;br /&gt;                   is omitted "Session.vim" is used (only works  when&lt;br /&gt;                   -S is the last argument).&lt;br /&gt;&lt;br /&gt;       --cmd {command}&lt;br /&gt;                   Like  using "-c", but the command is executed just&lt;br /&gt;                   before processing any vimrc file.  You can use  up&lt;br /&gt;                   to  10  of these commands, independently from "-c"&lt;br /&gt;                   commands.&lt;br /&gt;&lt;br /&gt;       -A          If Vim has been compiled with ARABIC  support  for&lt;br /&gt;                   editing  right-to-left  oriented  files and Arabic&lt;br /&gt;                   keyboard mapping, this option starts Vim in Arabic&lt;br /&gt;                   mode,  i.e.  ’arabic’  is set.  Otherwise an error&lt;br /&gt;                   message is given and Vim aborts.&lt;br /&gt;&lt;br /&gt;       -b          Binary mode.  A few options will be set that makes&lt;br /&gt;                   it possible to edit a binary or executable file.&lt;br /&gt;       -C          Compatible.   Set  the  ’compatible’ option.  This&lt;br /&gt;                   will make Vim behave mostly like Vi, even though a&lt;br /&gt;                   .vimrc file exists.&lt;br /&gt;&lt;br /&gt;       -d          Start in diff mode.  There should be two, three or&lt;br /&gt;                   four file name arguments.  Vim will open  all  the&lt;br /&gt;                   files  and  show  differences between them.  Works&lt;br /&gt;                   like vimdiff(1).&lt;br /&gt;&lt;br /&gt;       -d {device} Open {device} for use as a terminal.  Only on  the&lt;br /&gt;                   Amiga.  Example: "-d con:20/30/600/150".&lt;br /&gt;&lt;br /&gt;       -D          Debugging.   Go  to  debugging mode when executing&lt;br /&gt;                   the first command from a script.&lt;br /&gt;&lt;br /&gt;       -e          Start Vim in Ex mode, just like the executable was&lt;br /&gt;                   called "ex".&lt;br /&gt;&lt;br /&gt;       -E          Start  Vim in improved Ex mode, just like the exe‐&lt;br /&gt;                   cutable was called "exim".&lt;br /&gt;       -f          Foreground.  For the GUI  version,  Vim  will  not&lt;br /&gt;                   fork  and detach from the shell it was started in.&lt;br /&gt;                   On the Amiga, Vim is not restarted to open  a  new&lt;br /&gt;                   window.   This  option  should be used when Vim is&lt;br /&gt;                   executed by a program that will wait for the  edit&lt;br /&gt;                   session  to  finish (e.g. mail).  On the Amiga the&lt;br /&gt;                   ":sh" and ":!" commands will not work.&lt;br /&gt;&lt;br /&gt;       --nofork    Foreground.  For the GUI  version,  Vim  will  not&lt;br /&gt;                   fork  and detach from the shell it was started in.&lt;br /&gt;&lt;br /&gt;       -F          If Vim has been compiled with  FKMAP  support  for&lt;br /&gt;                   editing  right-to-left  oriented  files  and Farsi&lt;br /&gt;                   keyboard mapping, this option starts Vim in  Farsi&lt;br /&gt;                   mode,  i.e. ’fkmap’ and ’rightleft’ are set.  Oth‐&lt;br /&gt;                   erwise an error message is given and Vim aborts.&lt;br /&gt;&lt;br /&gt;       -g          If Vim has been compiled with  GUI  support,  this&lt;br /&gt;                   option  enables  the  GUI.   If no GUI support was&lt;br /&gt;                   compiled in, an error message  is  given  and  Vim&lt;br /&gt;                   aborts.&lt;br /&gt;&lt;br /&gt;       -h          Give  a  bit  of help about the command line argu‐&lt;br /&gt;                   ments and options.  After this Vim exits.&lt;br /&gt;&lt;br /&gt;       -H          If Vim has been compiled  with  RIGHTLEFT  support&lt;br /&gt;                   for   editing  right-to-left  oriented  files  and&lt;br /&gt;                   Hebrew keyboard mapping, this option starts Vim in&lt;br /&gt;                   Hebrew mode, i.e. ’hkmap’ and ’rightleft’ are set.&lt;br /&gt;                   Otherwise  an  error  message  is  given  and  Vim&lt;br /&gt;                   aborts.&lt;br /&gt;&lt;br /&gt;       -i {viminfo}&lt;br /&gt;                   When  using  the  viminfo  file  is  enabled, this&lt;br /&gt;                   option sets the filename to use,  instead  of  the&lt;br /&gt;                   default  "~/.viminfo".   This  can also be used to&lt;br /&gt;                   skip the use of the .viminfo file, by  giving  the&lt;br /&gt;                   name "NONE".&lt;br /&gt;&lt;br /&gt;       -L          Same as -r.&lt;br /&gt;&lt;br /&gt;       -l          Lisp   mode.   Sets  the  ’lisp’  and  ’showmatch’&lt;br /&gt;                   options on.&lt;br /&gt;&lt;br /&gt;       -m          Modifying files is disabled.  Resets  the  ’write’&lt;br /&gt;                   option.   You  can  still  modify  the buffer, but&lt;br /&gt;                   writing a file is not possible.&lt;br /&gt;&lt;br /&gt;       -M          Modifications not allowed.  The  ’modifiable’  and&lt;br /&gt;                   ’write’ options will be unset, so that changes are&lt;br /&gt;                   not allowed and files can not  be  written.   Note&lt;br /&gt;                   that  these  options  can  be set to enable making&lt;br /&gt;                   modifications.&lt;br /&gt;&lt;br /&gt;       -N          No-compatible  mode.    Reset   the   ’compatible’&lt;br /&gt;                   option.   This  will make Vim behave a bit better,&lt;br /&gt;                   but less Vi compatible, even though a .vimrc  file&lt;br /&gt;                   does not exist.&lt;br /&gt;&lt;br /&gt;       -n          No swap file will be used.  Recovery after a crash&lt;br /&gt;                   will be impossible.  Handy if you want to  edit  a&lt;br /&gt;                   file  on  a  very  slow medium (e.g. floppy).  Can&lt;br /&gt;                   also be done with ":set uc=0".  Can be undone with&lt;br /&gt;                   ":set uc=200".&lt;br /&gt;&lt;br /&gt;       -nb         Become  an  editor  server  for NetBeans.  See the&lt;br /&gt;                   docs for details.&lt;br /&gt;&lt;br /&gt;       -o[N]       Open N windows stacked.  When N is  omitted,  open&lt;br /&gt;                   one window for each file.&lt;br /&gt;&lt;br /&gt;       -O[N]       Open  N  windows side by side.  When N is omitted,&lt;br /&gt;                   open one window for each file.&lt;br /&gt;&lt;br /&gt;       -p[N]       Open N tab pages.  When N is omitted, open one tab&lt;br /&gt;                   page for each file.&lt;br /&gt;&lt;br /&gt;       -R          Read-only  mode.   The  ’readonly’  option will be&lt;br /&gt;                   set.  You can still edit the buffer, but  will  be&lt;br /&gt;                   prevented  from accidently overwriting a file.  If&lt;br /&gt;                   you do want to overwrite a file, add  an  exclama‐&lt;br /&gt;                   tion  mark to the Ex command, as in ":w!".  The -R&lt;br /&gt;                   option also implies the  -n  option  (see  below).&lt;br /&gt;                   The  ’readonly’  option  can  be  reset with ":set&lt;br /&gt;                   noro".  See ":help ’readonly’".&lt;br /&gt;&lt;br /&gt;       -r          List swap files, with information about using them&lt;br /&gt;                   for recovery.&lt;br /&gt;&lt;br /&gt;       -r {file}   Recovery mode.  The swap file is used to recover a&lt;br /&gt;                   crashed editing session.  The swap file is a  file&lt;br /&gt;                   with  the  same  filename  as  the  text file with&lt;br /&gt;                   ".swp" appended.  See ":help recovery".&lt;br /&gt;&lt;br /&gt;       -s          Silent mode.  Only when started as  "Ex"  or  when&lt;br /&gt;                   the  "-e" option was given before the "-s" option.&lt;br /&gt;&lt;br /&gt;       -s {scriptin}&lt;br /&gt;                   The script file {scriptin} is read.   The  charac‐&lt;br /&gt;                   ters  in  the  file  are interpreted as if you had&lt;br /&gt;                   typed them.  The same can be done with the command&lt;br /&gt;                   ":source!  {scriptin}".  If the end of the file is&lt;br /&gt;                   reached   before   the   editor   exits,   further&lt;br /&gt;                   characters are read from the keyboard.&lt;br /&gt;       -T {terminal}&lt;br /&gt;                   Tells  Vim the name of the terminal you are using.&lt;br /&gt;                   Only required when the automatic way doesn’t work.&lt;br /&gt;                   Should  be  a  terminal  known to Vim (builtin) or&lt;br /&gt;                   defined in the termcap or terminfo file.&lt;br /&gt;&lt;br /&gt;       -u {vimrc}  Use the commands in the file {vimrc} for  initial‐&lt;br /&gt;                   izations.    All  the  other  initializations  are&lt;br /&gt;                   skipped.  Use this  to  edit  a  special  kind  of&lt;br /&gt;                   files.   It  can also be used to skip all initial‐&lt;br /&gt;                   izations by giving the name  "NONE".   See  ":help&lt;br /&gt;                   initialization" within vim for more details.&lt;br /&gt;&lt;br /&gt;       -U {gvimrc} Use the commands in the file {gvimrc} for GUI ini‐&lt;br /&gt;                   tializations.  All the other  GUI  initializations&lt;br /&gt;                   are  skipped.  It can also be used to skip all GUI&lt;br /&gt;                   initializations by giving the  name  "NONE".   See&lt;br /&gt;                   ":help gui-init" within vim for more details.&lt;br /&gt;&lt;br /&gt;       -V[N]       Verbose.   Give  messages  about  which  files are&lt;br /&gt;                   sourced and for  reading  and  writing  a  viminfo&lt;br /&gt;                   file.   The  optional  number  N  is the value for&lt;br /&gt;                   ’verbose’.  Default is 10.&lt;br /&gt;&lt;br /&gt;       -v          Start Vim in Vi mode, just like the executable was&lt;br /&gt;                   called  "vi".   This only has effect when the exe‐&lt;br /&gt;                   cutable is called "ex".&lt;br /&gt;&lt;br /&gt;       -w {scriptout}&lt;br /&gt;                   All the characters that you type are  recorded  in&lt;br /&gt;                   the file {scriptout}, until you exit Vim.  This is&lt;br /&gt;                   useful if you want to create a script file  to  be&lt;br /&gt;                   used   with   "vim  -s"  or  ":source!".   If  the&lt;br /&gt;                   {scriptout} file exists, characters are  appended.&lt;br /&gt;&lt;br /&gt;       -W {scriptout}&lt;br /&gt;                   Like -w, but an existing file is overwritten.&lt;br /&gt;&lt;br /&gt;       -x          Use  encryption  when  writing files.  Will prompt&lt;br /&gt;                   for a crypt key.&lt;br /&gt;&lt;br /&gt;       -X          Don’t connect to the X server.   Shortens  startup&lt;br /&gt;                   time in a terminal, but the window title and clip‐&lt;br /&gt;                   board will not be used.&lt;br /&gt;&lt;br /&gt;       -y          Start Vim in easy mode, just like  the  executable&lt;br /&gt;                   was  called  "evim"  or "eview".  Makes Vim behave&lt;br /&gt;                   like a click-and-type editor.&lt;br /&gt;&lt;br /&gt;       -Z          Restricted mode.  Works like the executable starts&lt;br /&gt;                   with "r".&lt;br /&gt;&lt;br /&gt;       --          Denotes  the  end of the options.  Arguments after&lt;br /&gt;                   this will be handled as a file name.  This can  be&lt;br /&gt;                   used to edit a filename that starts with a ’-’.&lt;br /&gt;&lt;br /&gt;       --echo-wid  GTK GUI only: Echo the Window ID on stdout.&lt;br /&gt;&lt;br /&gt;       --help      Give a help message and exit, just like "-h".&lt;br /&gt;&lt;br /&gt;       --literal   Take  file name arguments literally, do not expand&lt;br /&gt;                   wildcards.  This has no effect on Unix  where  the&lt;br /&gt;                   shell expands wildcards.&lt;br /&gt;&lt;br /&gt;       --noplugin  Skip loading plugins.  Implied by -u NONE.&lt;br /&gt;&lt;br /&gt;       --remote    Connect to a Vim server and make it edit the files&lt;br /&gt;                   given in the rest of the arguments.  If no  server&lt;br /&gt;                   is  found  a  warning  is  given and the files are&lt;br /&gt;                   edited in the current Vim.&lt;br /&gt;&lt;br /&gt;       --remote-expr {expr}&lt;br /&gt;                   Connect to a Vim server, evaluate {expr} in it and&lt;br /&gt;                   print the result on stdout.&lt;br /&gt;&lt;br /&gt;       --remote-send {keys}&lt;br /&gt;                   Connect to a Vim server and send {keys} to it.&lt;br /&gt;&lt;br /&gt;       --remote-silent&lt;br /&gt;                   As  --remote,  but  without  the  warning  when no&lt;br /&gt;                   server is found.&lt;br /&gt;&lt;br /&gt;       --remote-wait&lt;br /&gt;                   As --remote, but Vim does not exit until the files&lt;br /&gt;                   have been edited.&lt;br /&gt;&lt;br /&gt;       --remote-wait-silent&lt;br /&gt;                   As  --remote-wait, but without the warning when no&lt;br /&gt;                   server is found.&lt;br /&gt;&lt;br /&gt;       --serverlist&lt;br /&gt;                   List the names of all  Vim  servers  that  can  be&lt;br /&gt;                   found.&lt;br /&gt;&lt;br /&gt;       --servername {name}&lt;br /&gt;                   Use  {name} as the server name.  Used for the cur‐&lt;br /&gt;                   rent Vim, unless used with  a  --remote  argument,&lt;br /&gt;                   then it’s the name of the server to connect to.&lt;br /&gt;&lt;br /&gt;       --socketid {id}&lt;br /&gt;                   GTK  GUI  only:  Use  the GtkPlug mechanism to run&lt;br /&gt;                   gvim in another window.&lt;br /&gt;&lt;br /&gt;       --version   Print version information and exit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-1329529352393013456?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/1329529352393013456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=1329529352393013456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1329529352393013456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1329529352393013456'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2009/06/man-page-vim.html' title='Man page: Vim'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-6086701639781263253</id><published>2009-04-29T23:23:00.000-07:00</published><updated>2009-06-10T11:18:09.129-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='custom'/><category scheme='http://www.blogger.com/atom/ns#' term='usplash'/><title type='text'>HowTo Create your Own Usplash</title><content type='html'>&lt;div&gt;&lt;b&gt;I have moved the post to &lt;/b&gt;&lt;a href="http://linuxandmicrocontrollertips.blogspot.com/2009/06/howto-create-your-own-usplash.html"&gt;&lt;b&gt;http://linuxandmicrocontrollertips.blogspot.com/2009/06/howto-create-your-own-usplash.html&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-6086701639781263253?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/6086701639781263253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=6086701639781263253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/6086701639781263253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/6086701639781263253'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2009/04/howto-create-your-own-usplash.html' title='HowTo Create your Own Usplash'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-812408036736951864</id><published>2009-04-18T02:56:00.000-07:00</published><updated>2009-06-10T11:28:28.574-07:00</updated><title type='text'>HOWTO create your own GDM Themes</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;b&gt;I have moved this post to &lt;/b&gt;&lt;/span&gt;&lt;a href="http://linuxandmicrocontrollertips.blogspot.com/2009/06/howto-create-your-own-gdm-themes.html"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;b&gt;http://linuxandmicrocontrollertips.blogspot.com/2009/06/howto-create-your-own-gdm-themes.html&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-812408036736951864?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/812408036736951864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=812408036736951864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/812408036736951864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/812408036736951864'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2009/04/howto-creating-your-own-gdm-themes.html' title='HOWTO create your own GDM Themes'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-8207409810009156244</id><published>2008-11-24T18:06:00.000-08:00</published><updated>2008-11-24T18:22:40.445-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='write'/><category scheme='http://www.blogger.com/atom/ns#' term='man page'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>Man page - write</title><content type='html'>&lt;span style="font-weight: bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;       write - write to a file descriptor&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;       #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;&lt;br /&gt;       ssize_t write(int fd, const void *buf, size_t count);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;       write()  writes  up  to  count bytes from the buffer pointed buf to the&lt;br /&gt;       file referred to by the file descriptor fd.&lt;br /&gt;&lt;br /&gt;       The number of bytes written may be less than  count  if,  for  example,&lt;br /&gt;       there  is  insufficient space on the underlying physical medium, or the&lt;br /&gt;       RLIMIT_FSIZE resource limit is encountered (see setrlimit(2)),  or  the&lt;br /&gt;       call was interrupted by a signal handler after having written less than&lt;br /&gt;       count bytes.  (See also pipe(7).)&lt;br /&gt;&lt;br /&gt;       For a seekable file (i.e., one to which lseek(2) may  be  applied,  for&lt;br /&gt;       example,  a  regular file) writing takes place at the current file off&lt;br /&gt;       set, and the file offset is incremented by the number of bytes actually&lt;br /&gt;       written.   If  the file was open(2)ed with O_APPEND, the file offset is&lt;br /&gt;       first set to the end of the file before writing.  The adjustment of the&lt;br /&gt;       file offset and the write operation are performed as an atomic step.&lt;br /&gt;&lt;br /&gt;       POSIX  requires  that  a  read(2)  which can be proved to occur after a&lt;br /&gt;       write() has returned returns the new data.  Note that not all file sys&lt;br /&gt;       tems are POSIX conforming.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RETURN VALUE&lt;/span&gt;&lt;br /&gt;       On  success,  the  number  of bytes written is returned (zero indicates&lt;br /&gt;       nothing was written).  On error, -1  is  returned,  and  errno  is  set&lt;br /&gt;       appropriately.&lt;br /&gt;&lt;br /&gt;       If  count  is  zero  and  fd refers to a regular file, then write() may&lt;br /&gt;       return a failure status if one of the errors below is detected.  If  no&lt;br /&gt;       errors  are  detected,  0  will  be  returned without causing any other&lt;br /&gt;       effect.  If count is zero and fd refers to a file other than a  regular&lt;br /&gt;       file, the results are not specified.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;       EAGAIN The file descriptor fd has been marked non-blocking (O_NONBLOCK)&lt;br /&gt;              and the write would block.&lt;br /&gt;&lt;br /&gt;       EBADF  fd is not a valid file descriptor or is not open for writing.&lt;br /&gt;&lt;br /&gt;       EFAULT buf is outside your accessible address space.&lt;br /&gt;&lt;br /&gt;       EFBIG  An attempt was made to write a file that exceeds the implementa&lt;br /&gt;              tion-defined maximum file size or the processs file size limit,&lt;br /&gt;              or to write at a position past the maximum allowed offset.&lt;br /&gt;&lt;br /&gt;       EINTR  The call was interrupted by a signal before any data  was  writ&lt;br /&gt;              ten.&lt;br /&gt;&lt;br /&gt;       EINVAL fd  is attached to an object which is unsuitable for writing; or&lt;br /&gt;              the file was opened with  the  O_DIRECT  flag,  and  either  the&lt;br /&gt;              address  specified  in buf, the value specified in count, or the&lt;br /&gt;              current file offset is not suitably aligned.&lt;br /&gt;&lt;br /&gt;       EIO    A low-level I/O error occurred while modifying the inode.&lt;br /&gt;&lt;br /&gt;       ENOSPC The device containing the file referred to by fd has no room for&lt;br /&gt;              the data.&lt;br /&gt;&lt;br /&gt;       EPIPE  fd is connected to a pipe or socket whose reading end is closed.&lt;br /&gt;              When this happens the writing process will also receive  a  SIG&lt;br /&gt;              PIPE  signal.  (Thus, the write return value is seen only if the&lt;br /&gt;              program catches, blocks or ignores this signal.)&lt;br /&gt;&lt;br /&gt;       Other errors may occur, depending on the object connected to fd.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CONFORMING TO&lt;/span&gt;&lt;br /&gt;       SVr4, 4.3BSD, POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;       Under SVr4 a write may be interrupted and return EINTR  at  any  point,&lt;br /&gt;       not just before any data is written.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTES&lt;/span&gt;&lt;br /&gt;       A  successful return from write() does not make any guarantee that data&lt;br /&gt;       has been committed to disk.  In fact, on some buggy implementations, it&lt;br /&gt;       does  not  even guarantee that space has successfully been reserved for&lt;br /&gt;       the data.  The only way to be sure is to call fsync(2)  after  you  are&lt;br /&gt;       done writing all your data.&lt;br /&gt;&lt;br /&gt;       If  a  write()  is interrupted by a signal handler before any bytes are&lt;br /&gt;       written, then the call fails with the error EINTR; if it is interrupted&lt;br /&gt;       after  at  least  one  byte  has  been  written, the call succeeds, and&lt;br /&gt;       returns the number of bytes written.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SEE ALSO&lt;/span&gt;&lt;br /&gt;       close(2), fcntl(2), fsync(2), ioctl(2), lseek(2),  open(2),  pwrite(2),&lt;br /&gt;       read(2), select(2), writev(2), fwrite(3)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-8207409810009156244?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/8207409810009156244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=8207409810009156244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/8207409810009156244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/8207409810009156244'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-write.html' title='Man page - write'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-506471580929809852</id><published>2008-11-24T17:44:00.000-08:00</published><updated>2008-11-24T18:03:05.411-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='waitpid'/><category scheme='http://www.blogger.com/atom/ns#' term='waitid'/><category scheme='http://www.blogger.com/atom/ns#' term='man pages'/><category scheme='http://www.blogger.com/atom/ns#' term='wait'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>Man page - wait, waitpid, waitid</title><content type='html'>&lt;span style="font-weight: bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;      wait, waitpid, waitid - wait for process to change state&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;      #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;      #include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;&lt;br /&gt;      pid_t wait(int *status);&lt;br /&gt;&lt;br /&gt;      pid_t waitpid(pid_t pid, int *status, int options);&lt;br /&gt;&lt;br /&gt;      int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);&lt;br /&gt;&lt;br /&gt;  Feature Test Macro Requirements for glibc (see feature_test_macros(7)):&lt;br /&gt;&lt;br /&gt;      waitid(): _SVID_SOURCE || _XOPEN_SOURCE&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;      All of these system calls are used to wait for state changes in a child of the calling process, and obtain information about  the  child  whose&lt;br /&gt;state  has changed.  A state change is considered to be: the child terminated; the child was stopped by a signal; or the child was resumed by a  signal.  In the case of a terminated child, performing a wait allows the system to release the resources associated with  the  child;  if  a wait  is not performed, then terminated the child remains in a "zombie" state (see NOTES below).&lt;br /&gt;&lt;br /&gt;      If a child has already changed state, then these calls  return  immediately.   Otherwise  they  block until either a child changes state or a signal handler interrupts the call (assuming that system calls are  not automatically restarted using the SA_RESTART flag of sigaction(2)).  In the remainder of this page, a child whose state has changed  and  which has  not  yet  been  waited upon by one of these system calls is termed waitable.&lt;br /&gt;&lt;br /&gt;  wait() and waitpid()&lt;br /&gt;      The wait() system call suspends execution of the calling process  until one  of  its children terminates.  The call wait(&amp;amp;status) is equivalent&lt;br /&gt;      to:&lt;br /&gt;          waitpid(-1, &amp;amp;status, 0);&lt;br /&gt;&lt;br /&gt;      The waitpid() system call suspends execution  of  the  calling  process until a child specified by pid argument has changed state.  By default,     waitpid() waits only for terminated children, but this behavior is modifiable via the options argument, as described below.&lt;br /&gt;&lt;br /&gt;      The value of pid can be:&lt;br /&gt;&lt;br /&gt;      &amp;lt; -1   meaning  wait  for  any  child process whose process group ID is equal to the absolute value of pid.&lt;br /&gt;&lt;br /&gt;      -1     meaning wait for any child process.&lt;br /&gt;&lt;br /&gt;      0      meaning wait for any child process whose  process  group  ID  is equal to that of the calling process.&lt;br /&gt;&lt;br /&gt;      &amp;gt; 0    meaning  wait  for  the  child  whose process ID is equal to the value of pid.&lt;br /&gt;&lt;br /&gt;      The value of options is an OR of zero or more  of  the  following  constants:&lt;br /&gt;&lt;br /&gt;      WNOHANG     return immediately if no child has exited.&lt;br /&gt;&lt;br /&gt;      WUNTRACED   also  return  if  a  child  has stopped (but not traced via ptrace(2)).  Status for traced children which have  stopped is provided even if this option is not specified.&lt;br /&gt;&lt;br /&gt;      WCONTINUED  (Since  Linux  2.6.10)  also  return if a stopped child has been resumed by delivery of SIGCONT.&lt;br /&gt;&lt;br /&gt;      (For Linux-only options, see below.)&lt;br /&gt;&lt;br /&gt;      The  WUNTRACED  and  WCONTINUED  options  are  only  effective  if  the SA_NOCLDSTOP  flag  has not been set for the SIGCHLD signal (see sigaction(2)).&lt;br /&gt;&lt;br /&gt;      If status is not NULL, wait() and waitpid() store status information in the  int  to  which  it points.  This integer can be inspected with the    following macros (which take the integer itself as an argument,  not  a pointer to it, as is done in wait() and waitpid()!):&lt;br /&gt;&lt;br /&gt;      WIFEXITED(status)&lt;br /&gt;             returns true if the child terminated normally, that is, by calling exit(3) or _exit(2), or by returning from main().&lt;br /&gt;&lt;br /&gt;      WEXITSTATUS(status)&lt;br /&gt;             returns the exit status of the  child.   This  consists  of  the least  significant  8 bits of the status argument that the child specified in a call to exit(3) or _exit(2) or  as  the  argument for  a  return  statement  in main().  This macro should only be employed if WIFEXITED returned true.&lt;br /&gt;&lt;br /&gt;      WIFSIGNALED(status)&lt;br /&gt;             returns true if the child process was terminated by a signal.&lt;br /&gt;&lt;br /&gt;      WTERMSIG(status)&lt;br /&gt;             returns the number of the signal that caused the  child  process to terminate.  This macro should only be employed if WIFSIGNALED returned true.&lt;br /&gt;&lt;br /&gt;      WCOREDUMP(status)&lt;br /&gt;             returns true if the child produced  a  core  dump.   This  macro should  only  be  employed  if  WIFSIGNALED returned true.  This macro is not specified in POSIX.1-2001 and is not  available  on some  Unix  implementations  (e.g.,  AIX, SunOS).  Only use this enclosed in #ifdef WCOREDUMP ... #endif.&lt;br /&gt;&lt;br /&gt;      WIFSTOPPED(status)&lt;br /&gt;             returns true if the child process was stopped by delivery  of  a signal;  this  is  only possible if the call was done using WUNTRACED or when the child is being traced (see ptrace(2)).&lt;br /&gt;&lt;br /&gt;      WSTOPSIG(status)&lt;br /&gt;             returns the number of the signal which caused the child to stop. This  macro should only be employed if WIFSTOPPED returned true.&lt;br /&gt;&lt;br /&gt;      WIFCONTINUED(status)&lt;br /&gt;             (Since Linux 2.6.10) returns  true  if  the  child  process  was resumed by delivery of SIGCONT.&lt;br /&gt;&lt;br /&gt;  waitid()&lt;br /&gt;      The  waitid()  system  call (available since Linux 2.6.9) provides more precise control over which child state changes to wait for.&lt;br /&gt;&lt;br /&gt;      The idtype and id arguments select the child(ren) to wait for, as  follows:&lt;br /&gt;&lt;br /&gt;      idtype == P_PID&lt;br /&gt;             Wait for the child whose process ID matches id.&lt;br /&gt;&lt;br /&gt;      idtype == P_PGID&lt;br /&gt;             Wait for any child whose process group ID matches id.&lt;br /&gt;&lt;br /&gt;      idtype == P_ALL&lt;br /&gt;             Wait for any child; id is ignored.&lt;br /&gt;&lt;br /&gt;      The  child state changes to wait for are specified by ORing one or more of the following flags in options:&lt;br /&gt;&lt;br /&gt;      WEXITED     Wait for children that have terminated.&lt;br /&gt;&lt;br /&gt;      WSTOPPED    Wait for children that have been stopped by delivery  of  a signal.&lt;br /&gt;&lt;br /&gt;      WCONTINUED  Wait  for  (previously  stopped)  children  that  have been resumed by delivery of SIGCONT.&lt;br /&gt;&lt;br /&gt;      The following flags may additionally be ORed in options:&lt;br /&gt;&lt;br /&gt;      WNOHANG     As for waitpid().&lt;br /&gt;&lt;br /&gt;      WNOWAIT     Leave the child in a waitable state; a later wait call  can be used to again retrieve the child status information.&lt;br /&gt;&lt;br /&gt;      Upon  successful  return, waitid() fills in the following fields of the siginfo_t structure pointed to by infop:&lt;br /&gt;&lt;br /&gt;      si_pid      The process ID of the child.&lt;br /&gt;&lt;br /&gt;      si_uid      The real user ID of the child.  (This field is not  set  on most other implementations.)&lt;br /&gt;&lt;br /&gt;      si_signo    Always set to SIGCHLD.&lt;br /&gt;&lt;br /&gt;      si_status   Either  the  exit status of the child, as given to _exit(2)(or exit(3)), or the signal that caused the child to terminate,  stop, or continue.  The si_code field can be used to determine how to interpret this field.&lt;br /&gt;&lt;br /&gt;      si_code     Set  to  one  of:  CLD_EXITED  (child   called   _exit(2)); CLD_KILLED  (child  killed  by  signal); CLD_STOPPED (child stopped by signal); or CLD_CONTINUED  (child  continued  by SIGCONT).&lt;br /&gt;&lt;br /&gt;      If  WNOHANG  was  specified  in options and there were no children in a waitable state, then waitid() returns 0 immediately and  the  state  of the siginfo_t structure pointed to by infop is unspecified.  To distinguish this case from that where a child was in a waitable  state,  zero out  the  si_pid field before the call and check for a nonzero value in this field after the call returns.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RETURN VALUE&lt;/span&gt;&lt;br /&gt;      wait(): on success, returns the process ID of the terminated child;  on error, -1 is returned.&lt;br /&gt;&lt;br /&gt;      waitpid():  on success, returns the process ID of the child whose state has changed; if WNOHANG was specified and one or more child(ren) speci&lt;br /&gt;      fied  by pid exist, but have not yet changed state, then 0 is returned. On error, -1 is returned.&lt;br /&gt;&lt;br /&gt;      waitid(): returns 0 on success or  if  WNOHANG  was  specified  and  no child(ren)  specified  by  id  has  yet  changed state; on error, -1 is&lt;br /&gt;      returned. Each of these calls sets errno to an appropriate value in the  case  of an error.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;      ECHILD (for  wait()) The calling process does not have any unwaited-for children.&lt;br /&gt;&lt;br /&gt;      ECHILD (for waitpid() or waitid()) The process specified by pid  (waitpid())  or  idtype  and id (waitid()) does not exist or is not a&lt;br /&gt;             child of the calling process.  (This can happen  for  ones  own child if the action for SIGCHLD is set to SIG_IGN.  See also the&lt;br /&gt;             Linux Notes section about threads.)&lt;br /&gt;&lt;br /&gt;      EINTR  WNOHANG was not set and an unblocked signal  or  a  SIGCHLD  was caught.&lt;br /&gt;&lt;br /&gt;      EINVAL The options argument was invalid.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CONFORMING TO&lt;/span&gt;&lt;br /&gt;      SVr4, 4.3BSD, POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTES&lt;/span&gt;&lt;br /&gt;      A  child  that  terminates, but has not been waited for becomes a "zombie".  The kernel maintains a minimal set of information about the zombie process  (PID,  termination status, resource usage information) in order to allow the parent to later perform a wait to obtain information about  the  child.   As long as a zombie is not removed from the system via a wait, it will consume a slot in the kernel process table, and  if this  table fills, it will not be possible to create further processes. If a parent process terminates, then its "zombie" children (if any) are adopted  by  init(8), which automatically performs a wait to remove the zombies.&lt;br /&gt;&lt;br /&gt;      POSIX.1-2001 specifies that if the disposition of  SIGCHLD  is  set  to SIG_IGN or the SA_NOCLDWAIT flag is set for SIGCHLD (see sigaction(2)),&lt;br /&gt;      then children that terminate do not become zombies and a call to wait() or  waitpid()  will  block until all children have terminated, and then&lt;br /&gt;      fail with errno set to ECHILD.  (The original POSIX standard  left  the behavior  of  setting  SIGCHLD to SIG_IGN unspecified.)  Linux 2.6 con&lt;br /&gt;      forms to this specification.  However, Linux  2.4  (and  earlier)  doesnot:  if  a  wait()  or  waitpid()  call is made while SIGCHLD is being&lt;br /&gt;      ignored, the call  behaves  just  as  though  SIGCHLD  were  not  being ignored,  that  is, the call blocks until the next child terminates and&lt;br /&gt;      then returns the process ID and status of that child.&lt;br /&gt;&lt;br /&gt;  Linux Notes&lt;br /&gt;      In the Linux kernel, a kernel-scheduled thread is not a  distinct  construct  from  a process.  Instead, a thread is simply a process that is&lt;br /&gt;      created using the Linux-unique clone(2)  system  call;  other  routines such  as  the  portable  pthread_create(3)  call  are implemented using&lt;br /&gt;      clone(2).  Before Linux 2.4, a thread was just a special case of a process, and as a consequence one thread could not wait on the children of&lt;br /&gt;      another thread, even when the latter belongs to the same thread  group. However,  POSIX  prescribes  such  functionality, and since Linux 2.4 a&lt;br /&gt;      thread can, and by default will, wait on children of other  threads  in the same thread group.&lt;br /&gt;&lt;br /&gt;      The  following Linux-specific options are for use with children created using clone(2); they cannot be used with waitid():&lt;br /&gt;&lt;br /&gt;      __WCLONE&lt;br /&gt;             Wait for "clone" children only.  If omitted then wait for  "non-clone" children only.  (A "clone" child is one which delivers no&lt;br /&gt;             signal, or a signal  other  than  SIGCHLD  to  its  parent  upon termination.)   This  option is ignored if __WALL is also speci&lt;br /&gt;             fied.&lt;br /&gt;&lt;br /&gt;      __WALL (Since Linux 2.4) Wait for  all  children,  regardless  of  type ("clone" or "non-clone").&lt;br /&gt;&lt;br /&gt;      __WNOTHREAD&lt;br /&gt;             (Since  Linux  2.4) Do not wait for children of other threads in the same thread group.  This was the default before Linux 2.4.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EXAMPLE&lt;/span&gt;&lt;br /&gt;      The following program demonstrates the use of  fork(2)  and  waitpid().The  program  creates  a child process.  If no command-line argument is&lt;br /&gt;      supplied to the program, then the child suspends  its  execution  using pause(2),  to  allow the user to send signals to the child.  Otherwise,&lt;br /&gt;      if a command-line argument is supplied, then the  child  exits  immediately,  using the integer supplied on the command line as the exit sta&lt;br /&gt;      tus.  The parent process executes a loop that monitors the child  using waitpid(), and uses the W*() macros described above to analyze the wait&lt;br /&gt;      status value.&lt;br /&gt;&lt;br /&gt;      The following shell session demonstrates the use of the program:&lt;br /&gt;&lt;br /&gt;      $ ./a.out &amp;amp;&lt;br /&gt;      Child PID is 32360&lt;br /&gt;      [1] 32359&lt;br /&gt;      $ kill -STOP 32360&lt;br /&gt;      stopped by signal 19&lt;br /&gt;      $ kill -CONT 32360&lt;br /&gt;      continued&lt;br /&gt;      $ kill -TERM 32360&lt;br /&gt;      killed by signal 15&lt;br /&gt;      [1]+  Done                    ./a.out&lt;br /&gt;      $&lt;br /&gt;&lt;br /&gt;      #include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;      #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;      #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;      #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;      int&lt;br /&gt;      main(int argc, char *argv[])&lt;br /&gt;      {&lt;br /&gt;          pid_t cpid, w;&lt;br /&gt;          int status;&lt;br /&gt;&lt;br /&gt;          cpid = fork();&lt;br /&gt;          if (cpid == -1) {&lt;br /&gt;              perror("fork");&lt;br /&gt;              exit(EXIT_FAILURE);&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          if (cpid == 0) {            /* Code executed by child */&lt;br /&gt;              printf("Child PID is %ld\n", (long) getpid());&lt;br /&gt;              if (argc == 1)&lt;br /&gt;                  pause();                    /* Wait for signals */&lt;br /&gt;              _exit(atoi(argv[1]));&lt;br /&gt;&lt;br /&gt;          } else {                    /* Code executed by parent */&lt;br /&gt;              do {&lt;br /&gt;                  w = waitpid(cpid, &amp;amp;status, WUNTRACED | WCONTINUED);&lt;br /&gt;                  if (w == -1) {&lt;br /&gt;                      perror("waitpid");&lt;br /&gt;                      exit(EXIT_FAILURE);&lt;br /&gt;                  }&lt;br /&gt;&lt;br /&gt;                  if (WIFEXITED(status)) {&lt;br /&gt;                      printf("exited, status=%d\n", WEXITSTATUS(status));&lt;br /&gt;                  } else if (WIFSIGNALED(status)) {&lt;br /&gt;                      printf("killed by signal %d\n", WTERMSIG(status));&lt;br /&gt;                  } else if (WIFSTOPPED(status)) {&lt;br /&gt;                      printf("stopped by signal %d\n", WSTOPSIG(status));&lt;br /&gt;                  } else if (WIFCONTINUED(status)) {&lt;br /&gt;                      printf("continued\n");&lt;br /&gt;                  }&lt;br /&gt;              } while (!WIFEXITED(status) &amp;amp;&amp;amp; !WIFSIGNALED(status));&lt;br /&gt;              exit(EXIT_SUCCESS);&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SEE ALSO&lt;/span&gt;&lt;br /&gt;      _exit(2), clone(2), fork(2),  kill(2),  ptrace(2),  sigaction(2),  signal(2), wait4(2), pthread_create(3), credentials(7), signal(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-506471580929809852?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/506471580929809852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=506471580929809852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/506471580929809852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/506471580929809852'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-wait-waitpid-waitid.html' title='Man page - wait, waitpid, waitid'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-8966239160941956926</id><published>2008-11-24T17:41:00.001-08:00</published><updated>2008-11-24T17:42:45.778-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man page'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><category scheme='http://www.blogger.com/atom/ns#' term='system'/><title type='text'>Man page - system</title><content type='html'>&lt;span style="font-weight: bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;       system - execute a shell command&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;       #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;       int system(const char *command);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;       system()  executes a command specified in command by calling /bin/sh -c&lt;br /&gt;       command, and returns after the command has been completed.  During exe‐&lt;br /&gt;       cution  of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT&lt;br /&gt;       will be ignored.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RETURN VALUE&lt;/span&gt;&lt;br /&gt;       The value returned is -1 on  error  (e.g.   fork(2)  failed),  and  the&lt;br /&gt;       return  status  of the command otherwise.  This latter return status is&lt;br /&gt;       in the format specified in wait(2).  Thus, the exit code of the command&lt;br /&gt;       will  be  WEXITSTATUS(status).   In case /bin/sh could not be executed,&lt;br /&gt;       the exit status will be that of a command that does exit(127).&lt;br /&gt;&lt;br /&gt;       If the value of command is NULL, system() returns nonzero if the  shell&lt;br /&gt;       is available, and zero if not.&lt;br /&gt;&lt;br /&gt;       system() does not affect the wait status of any other children.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CONFORMING TO&lt;/span&gt;&lt;br /&gt;       C89, C99, POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTES&lt;/span&gt;&lt;br /&gt;       If  the  _XOPEN_SOURCE  feature  test macro is defined, then the macros&lt;br /&gt;       described in wait(2) (WEXITSTATUS(),  etc.)  are  made  available  when&lt;br /&gt;       including &amp;lt;stdlib.h&amp;gt;.&lt;br /&gt;&lt;br /&gt;       As  mentioned, system() ignores SIGINT and SIGQUIT.  This may make pro‐&lt;br /&gt;       grams that call it from a loop uninterruptible, unless they  take  care&lt;br /&gt;       themselves to check the exit status of the child.  E.g.&lt;br /&gt;&lt;br /&gt;           while (something) {&lt;br /&gt;               int ret = system("foo");&lt;br /&gt;&lt;br /&gt;               if (WIFSIGNALED(ret) &amp;amp;&amp;amp;&lt;br /&gt;                   (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))&lt;br /&gt;                       break;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;       Do  not  use  system()  from a program with set-user-ID or set-group-ID&lt;br /&gt;       privileges, because strange values for some environment variables might&lt;br /&gt;       be  used  to subvert system integrity.  Use the exec(3) family of func‐&lt;br /&gt;       tions instead, but not execlp(3) or execvp(3).  system() will  not,  in&lt;br /&gt;       fact,  work  properly  from  programs  with set-user-ID or set-group-ID&lt;br /&gt;       privileges on systems on which /bin/sh is bash version 2, since bash  2&lt;br /&gt;       drops  privileges  on startup.  (Debian uses a modified bash which does&lt;br /&gt;       not do this when invoked as sh.)&lt;br /&gt;&lt;br /&gt;       In versions of glibc before 2.1.3, the check for  the  availability  of&lt;br /&gt;       /bin/sh  was not actually performed if command was NULL; instead it was&lt;br /&gt;       always assumed to be available, and system() always returned 1 in  this&lt;br /&gt;       case.   Since glibc 2.1.3, this check is performed because, even though&lt;br /&gt;       POSIX.1-2001 requires a conforming implementation to provide  a  shell,&lt;br /&gt;       that  shell  may  not be available or executable if the calling program&lt;br /&gt;       has  previously  called  chroot(2)   (which   is   not   specified   by&lt;br /&gt;       POSIX.1-2001).&lt;br /&gt;&lt;br /&gt;       It is possible for the shell command to return 127, so that code is not&lt;br /&gt;       a sure indication that the execve(2) call failed.&lt;br /&gt;&lt;br /&gt;       If the _XOPEN_SOURCE feature test macro is  defined,  then  the  macros&lt;br /&gt;       described  in  wait(2)  (WEXITSTATUS(),  etc.)  are made available when&lt;br /&gt;       including &amp;lt;stdlib.h&amp;gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SEE ALSO&lt;/span&gt;&lt;br /&gt;       sh(1), signal(2), wait(2), exec(3)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-8966239160941956926?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/8966239160941956926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=8966239160941956926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/8966239160941956926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/8966239160941956926'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-system.html' title='Man page - system'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-1981008462249744731</id><published>2008-11-24T17:31:00.000-08:00</published><updated>2008-11-24T17:39:35.597-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man pages'/><category scheme='http://www.blogger.com/atom/ns#' term='stdio'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>Man page - stdio</title><content type='html'>&lt;span style="font-weight: bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;       stdio - standard input/output library functions&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;       #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;       FILE *stdin;&lt;br /&gt;       FILE *stdout;&lt;br /&gt;       FILE *stderr;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;       The  standard  I/O  library  provides  a  simple and efficient buffered&lt;br /&gt;       stream I/O interface.  Input and output is  mapped  into  logical  data&lt;br /&gt;       streams  and the physical I/O characteristics are concealed.  The func‐&lt;br /&gt;       tions and macros are listed below; more information is  available  from&lt;br /&gt;       the individual man pages.&lt;br /&gt;&lt;br /&gt;       A  stream  is associated with an external file (which may be a physical&lt;br /&gt;       device) by opening a file, which may involve creating a new file.  Cre‐&lt;br /&gt;       ating  an existing file causes its former contents to be discarded.  If&lt;br /&gt;       a file can support positioning  requests  (such  as  a  disk  file,  as&lt;br /&gt;       opposed  to  a terminal) then a file position indicator associated with&lt;br /&gt;       the stream is positioned at the start of the file (byte  zero),  unless&lt;br /&gt;       the  file  is  opened  with append mode.  If append mode is used, it is&lt;br /&gt;       unspecified whether the position indicator will be placed at the  start&lt;br /&gt;       or the end of the file.  The position indicator is maintained by subse‐&lt;br /&gt;       quent reads, writes and positioning requests.  All input occurs  as  if&lt;br /&gt;       the  characters were read by successive calls to the fgetc(3) function;&lt;br /&gt;       all output takes place as if all characters were written by  successive&lt;br /&gt;       calls to the fputc(3) function.&lt;br /&gt;&lt;br /&gt;       A  file  is  disassociated  from  a stream by closing the file.  Output&lt;br /&gt;       streams are flushed (any unwritten buffer contents are  transferred  to&lt;br /&gt;       the host environment) before the stream is disassociated from the file.&lt;br /&gt;       The value of a pointer to a FILE object is indeterminate after  a  file&lt;br /&gt;       is closed (garbage).&lt;br /&gt;&lt;br /&gt;       A  file  may  be  subsequently reopened, by the same or another program&lt;br /&gt;       execution, and its contents reclaimed or modified (if it can be reposi‐&lt;br /&gt;       tioned  at  the  start).   If the main function returns to its original&lt;br /&gt;       caller, or the exit(3) function is called, all open  files  are  closed&lt;br /&gt;       (hence  all  output  streams  are  flushed) before program termination.&lt;br /&gt;       Other methods of program termination, such as abort(3)  do  not  bother&lt;br /&gt;       about closing files properly.&lt;br /&gt;&lt;br /&gt;       At  program  startup, three text streams are predefined and need not be&lt;br /&gt;       opened explicitly — standard input (for reading conventional input),  —&lt;br /&gt;       standard  output  (for  writing conventional input), and standard error&lt;br /&gt;       (for  writing  diagnostic  output).   These  streams  are   abbreviated&lt;br /&gt;       stdin,stdout and stderr.  When opened, the standard error stream is not&lt;br /&gt;       fully buffered;  the  standard  input  and  output  streams  are  fully&lt;br /&gt;       buffered  if  and only if the streams do not to refer to an interactive&lt;br /&gt;       device.&lt;br /&gt;&lt;br /&gt;       Output streams that refer to terminal devices are always line  buffered&lt;br /&gt;       by  default;  pending  output  to such streams is written automatically&lt;br /&gt;       whenever an input stream that refers to a terminal device is read.   In&lt;br /&gt;       cases  where  a large amount of computation is done after printing part&lt;br /&gt;       of a line on an output terminal, it is necessary to fflush(3) the stan‐&lt;br /&gt;       dard  output  before  going  off  and computing so that the output will&lt;br /&gt;       appear.&lt;br /&gt;&lt;br /&gt;       The stdio library is a part of the library libc and routines are  auto‐&lt;br /&gt;       matically  loaded as needed by the compilers cc(1) and pc(1).  The SYN‐&lt;br /&gt;       OPSIS sections of the following manual  pages  indicate  which  include&lt;br /&gt;       files  are  to  be used, what the compiler declaration for the function&lt;br /&gt;       looks like and which external variables are of interest.&lt;br /&gt;&lt;br /&gt;       The following are defined as macros; these names  may  not  be  re-used&lt;br /&gt;       without  first  removing their current definitions with #undef: BUFSIZ,&lt;br /&gt;       EOF, FILENAME_MAX, FOPEN_MAX,  L_cuserid,  L_ctermid,  L_tmpnam,  NULL,&lt;br /&gt;       SEEK_END,  SEEK_SET,  SEE_CUR, TMP_MAX, clearerr, feof, ferror, fileno,&lt;br /&gt;       getc, getchar, putc, putchar, stderr, stdin, stdout.  Function versions&lt;br /&gt;       of  the  macro functions feof, ferror, clearerr, fileno, getc, getchar,&lt;br /&gt;       putc, and putchar exist and will be used if the macros definitions  are&lt;br /&gt;       explicitly removed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;   List of Functions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;       Function  ------    Description&lt;br /&gt;       -------------------------------------------------------------------&lt;br /&gt;       clearerr ---  check and reset stream status&lt;br /&gt;       fclose -----   close a stream&lt;br /&gt;       fdopen ----  stream open functions&lt;br /&gt;       feof -------  check and reset stream status&lt;br /&gt;       ferror ----- check and reset stream status&lt;br /&gt;       fflush -----  flush a stream&lt;br /&gt;       fgetc ------ get next character or word from input stream&lt;br /&gt;       fgetpos ---  reposition a stream&lt;br /&gt;       fgets -----   get a line from a stream&lt;br /&gt;       fileno -----   return the integer descriptor of the argument stream&lt;br /&gt;       fopen -----  stream open functions&lt;br /&gt;       fprintf ----  formatted output conversion&lt;br /&gt;       fpurge ----  flush a stream&lt;br /&gt;       fputc -----  output a character or word to a stream&lt;br /&gt;       fputs -----  output a line to a stream&lt;br /&gt;       fread ----   binary stream input/output&lt;br /&gt;       freopen ---      stream open functions&lt;br /&gt;       fscanf ---       input format conversion&lt;br /&gt;       fseek ---        reposition a stream&lt;br /&gt;       fsetpos ---      reposition a stream&lt;br /&gt;       ftell  ---       reposition a stream&lt;br /&gt;       fwrite  ---      binary stream input/output&lt;br /&gt;       getc  ---        get next character or word from input stream&lt;br /&gt;       getchar ---      get next character or word from input stream&lt;br /&gt;       gets  ---        get a line from a stream&lt;br /&gt;       getw  ---        get next character or word from input stream&lt;br /&gt;       mktemp ---       make temporary filename (unique)&lt;br /&gt;       perror  ---      system error messages&lt;br /&gt;       printf ---       formatted output conversion&lt;br /&gt;       putc ---         output a character or word to a stream&lt;br /&gt;       putchar ---       output a character or word to a stream&lt;br /&gt;       puts  ---        output a line to a stream&lt;br /&gt;       putw  ---        output a character or word to a stream&lt;br /&gt;       remove  ---      remove directory entry&lt;br /&gt;       rewind  ---      reposition a stream&lt;br /&gt;       scanf  ---       input format conversion&lt;br /&gt;       setbuf  ---      stream buffering operations&lt;br /&gt;       setbuffer  ---    stream buffering operations&lt;br /&gt;       setlinebuf  ---   stream buffering operations&lt;br /&gt;       setvbuf  ---     stream buffering operations&lt;br /&gt;       sprintf  ---     formatted output conversion&lt;br /&gt;       sscanf  ---      input format conversion&lt;br /&gt;       strerror  ---    system error messages&lt;br /&gt;       sys_errlist ---  system error messages&lt;br /&gt;       sys_nerr  ---    system error messages&lt;br /&gt;       tempnam ---      temporary file routines&lt;br /&gt;       tmpfile ---      temporary file routines&lt;br /&gt;&lt;br /&gt;       tmpnam ---       temporary file routines&lt;br /&gt;       ungetc ---       un-get character from input stream&lt;br /&gt;       vfprintf ---     formatted output conversion&lt;br /&gt;       vfscanf  ---      input format conversion&lt;br /&gt;       vprintf  ---      formatted output conversion&lt;br /&gt;       vscanf  ---      input format conversion&lt;br /&gt;       vsprintf ---     formatted output conversion&lt;br /&gt;       vsscanf ---      input format conversion&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CONFORMING TO&lt;/span&gt;&lt;br /&gt;       The stdio library conforms to C89.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SEE ALSO&lt;/span&gt;&lt;br /&gt;       close(2), open(2), read(2), write(2), stdout(3), unlocked_stdio(3)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-1981008462249744731?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/1981008462249744731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=1981008462249744731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1981008462249744731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1981008462249744731'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-stdio.html' title='Man page - stdio'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-1722239109438667539</id><published>2008-11-24T17:29:00.000-08:00</published><updated>2008-11-24T17:31:37.869-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fcntl manual'/><category scheme='http://www.blogger.com/atom/ns#' term='man page'/><category scheme='http://www.blogger.com/atom/ns#' term='signal'/><title type='text'>Man page - signal</title><content type='html'>&lt;span style="font-weight: bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;       signal - ANSI C signal handling&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;       #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;&lt;br /&gt;       typedef void (*sighandler_t)(int);&lt;br /&gt;&lt;br /&gt;       sighandler_t signal(int signum, sighandler_t handler);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;       The behavior of signal() varies across Unix versions, and has also var&lt;br /&gt;       ied historically across different versions of Linux.   Avoid  its  use:&lt;br /&gt;       use sigaction(2) instead.  See Portability below.&lt;br /&gt;&lt;br /&gt;       signal() sets the disposition of the signal signum to handler, which is&lt;br /&gt;       either SIG_IGN, SIG_DFL, or the address of a  programmer-defined  func&lt;br /&gt;       tion (a "signal handler").&lt;br /&gt;&lt;br /&gt;       If  the signal signum is delivered to the process, then one of the fol&lt;br /&gt;       lowing happens:&lt;br /&gt;&lt;br /&gt;       *  If the disposition is set to SIG_IGN, then the signal is ignored.&lt;br /&gt;&lt;br /&gt;       *  If the disposition is set to SIG_DFL, then the default action  asso&lt;br /&gt;          ciated with the signal (see signal(7)) occurs.&lt;br /&gt;&lt;br /&gt;       *  If  the disposition is set to a function, then first either the dis&lt;br /&gt;          position is reset to SIG_DFL, or the signal is blocked  (see  Porta&lt;br /&gt;          bility  below), and then handler is called with argument signum.  If&lt;br /&gt;          invocation of the handler caused the signal to be blocked, then  the&lt;br /&gt;          signal is unblocked upon return from the handler.&lt;br /&gt;&lt;br /&gt;       The signals SIGKILL and SIGSTOP cannot be caught or ignored.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RETURN VALUE&lt;/span&gt;&lt;br /&gt;       signal()  returns  the previous value of the signal handler, or SIG_ERR&lt;br /&gt;       on error.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;       EINVAL signum is invalid.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CONFORMING TO&lt;/span&gt;&lt;br /&gt;       C89, C99, POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTES&lt;/span&gt;&lt;br /&gt;       The effects of signal() in a multi-threaded process are unspecified.&lt;br /&gt;&lt;br /&gt;       According to POSIX, the behavior of a process  is  undefined  after  it&lt;br /&gt;       ignores  a  SIGFPE, SIGILL, or SIGSEGV signal that was not generated by&lt;br /&gt;       kill(2) or raise(3).  Integer division by zero  has  undefined  result.&lt;br /&gt;       On some architectures it will generate a SIGFPE signal.  (Also dividing&lt;br /&gt;       the most negative integer by -1 may generate  SIGFPE.)   Ignoring  this&lt;br /&gt;       signal might lead to an endless loop.&lt;br /&gt;&lt;br /&gt;       See  sigaction(2)  for  details  on what happens when SIGCHLD is set to&lt;br /&gt;       SIG_IGN.&lt;br /&gt;&lt;br /&gt;       See signal(7) for a list of the async-signal-safe functions that can be&lt;br /&gt;       safely called inside from inside a signal handler.&lt;br /&gt;&lt;br /&gt;       The  use  of sighandler_t is a GNU extension.  Various versions of libc&lt;br /&gt;       predefine this  type;  libc4  and  libc5  define  SignalHandler,  glibc&lt;br /&gt;       defines sig_t and, when _GNU_SOURCE is defined, also sighandler_t.&lt;br /&gt;&lt;br /&gt;   Portability&lt;br /&gt;       The original Unix signal() would reset the handler to SIG_DFL, and Sys&lt;br /&gt;       tem V (and the Linux kernel and libc4,5) does the same.  On  the  other&lt;br /&gt;       hand,  BSD does not reset the handler, but blocks new instances of this&lt;br /&gt;       signal from occurring during a call of the handler.  The glibc2 library&lt;br /&gt;       follows the BSD behavior.&lt;br /&gt;&lt;br /&gt;       If  one on a libc5 system includes &amp;lt;bsd/signal.h&amp;gt; instead of &amp;lt;signal.h&amp;gt;&lt;br /&gt;       then signal() is redefined as __bsd_signal() and signal() has  the  BSD&lt;br /&gt;       semantics.  This is not recommended.&lt;br /&gt;&lt;br /&gt;       If  one  on  a  glibc2  system  defines  a  feature  test macro such as&lt;br /&gt;       _XOPEN_SOURCE or uses a separate sysv_signal(3) function,  one  obtains&lt;br /&gt;       classical behavior.  This is not recommended.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SEE ALSO&lt;/span&gt;&lt;br /&gt;       kill(1), alarm(2), kill(2), killpg(2), pause(2), sigaction(2), sigpend&lt;br /&gt;       ing(2),  sigprocmask(2),  sigqueue(2),  sigsuspend(2),   bsd_signal(3),&lt;br /&gt;       raise(3),  siginterrupt(3),  sigsetops(3),  sigvec(3),  sysv_signal(3),&lt;br /&gt;       feature_test_macros(7), signal(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-1722239109438667539?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/1722239109438667539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=1722239109438667539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1722239109438667539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1722239109438667539'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-signal.html' title='Man page - signal'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-3862964891355066133</id><published>2008-11-24T17:24:00.000-08:00</published><updated>2008-11-24T17:29:28.569-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man page'/><category scheme='http://www.blogger.com/atom/ns#' term='shmdt()'/><category scheme='http://www.blogger.com/atom/ns#' term='shmat'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><category scheme='http://www.blogger.com/atom/ns#' term='shmop'/><title type='text'>Man page - shmop, shmat, shmdt</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;       shmop, shmat, shmdt - shared memory operations&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;       #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;       #include &amp;lt;sys/shm.h&amp;gt;&lt;br /&gt;&lt;br /&gt;       void *shmat(int shmid, const void *shmaddr, int shmflg);&lt;br /&gt;&lt;br /&gt;       int shmdt(const void *shmaddr);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;       shmat()  attaches  the shared memory segment identified by shmid to the&lt;br /&gt;       address space of the calling process.  The attaching address is  speci‐&lt;br /&gt;       fied by shmaddr with one of the following criteria:&lt;br /&gt;&lt;br /&gt;       If  shmaddr  is NULL, the system chooses a suitable (unused) address at&lt;br /&gt;       which to attach the segment.&lt;br /&gt;&lt;br /&gt;       If shmaddr isn’t NULL and SHM_RND is specified in  shmflg,  the  attach&lt;br /&gt;       occurs at the address equal to shmaddr rounded down to the nearest mul‐&lt;br /&gt;       tiple of SHMLBA.  Otherwise shmaddr must be a page-aligned  address  at&lt;br /&gt;       which the attach occurs.&lt;br /&gt;&lt;br /&gt;       If SHM_RDONLY is specified in shmflg, the segment is attached for read‐&lt;br /&gt;       ing and the process must have read permission for the segment.   Other‐&lt;br /&gt;       wise  the  segment  is attached for read and write and the process must&lt;br /&gt;       have read and write permission for the segment.  There is no notion  of&lt;br /&gt;       a write-only shared memory segment.&lt;br /&gt;&lt;br /&gt;       The (Linux-specific) SHM_REMAP flag may be specified in shmflg to indi‐&lt;br /&gt;       cate that the mapping of the segment should replace any  existing  map‐&lt;br /&gt;       ping  in  the  range starting at shmaddr and continuing for the size of&lt;br /&gt;       the segment.  (Normally an EINVAL  error  would  result  if  a  mapping&lt;br /&gt;       already  exists in this address range.)  In this case, shmaddr must not&lt;br /&gt;       be NULL.&lt;br /&gt;&lt;br /&gt;       The brk(2) value of the calling process is not altered by  the  attach.&lt;br /&gt;       The  segment  will automatically be detached at process exit.  The same&lt;br /&gt;       segment may be attached as a read and as a  read-write  one,  and  more&lt;br /&gt;       than once, in the process’s address space.&lt;br /&gt;&lt;br /&gt;       A successful shmat() call updates the members of the shmid_ds structure&lt;br /&gt;       (see shmctl(2)) associated with the shared memory segment as follows:&lt;br /&gt;&lt;br /&gt;              shm_atime is set to the current time.&lt;br /&gt;&lt;br /&gt;              shm_lpid is set to the process-ID of the calling process.&lt;br /&gt;&lt;br /&gt;              shm_nattch is incremented by one.&lt;br /&gt;&lt;br /&gt;       shmdt() detaches the shared memory segment located at the address spec‐&lt;br /&gt;       ified  by  shmaddr  from the address space of the calling process.  The&lt;br /&gt;       to-be-detached segment must be currently attached with shmaddr equal to&lt;br /&gt;       the value returned by the attaching shmat() call.&lt;br /&gt;&lt;br /&gt;       On  a  successful  shmdt()  call  the system updates the members of the&lt;br /&gt;       shmid_ds structure associated with the shared memory  segment  as  fol‐&lt;br /&gt;       lows:&lt;br /&gt;&lt;br /&gt;              shm_dtime is set to the current time.&lt;br /&gt;&lt;br /&gt;              shm_lpid is set to the process-ID of the calling process.&lt;br /&gt;&lt;br /&gt;              shm_nattch  is decremented by one.  If it becomes 0 and the seg‐&lt;br /&gt;              ment is marked for deletion, the segment is deleted.&lt;br /&gt;&lt;br /&gt;       After a fork(2) the child inherits the attached shared memory segments.&lt;br /&gt;&lt;br /&gt;       After  an  execve(2)  all  attached shared memory segments are detached&lt;br /&gt;       from the process.&lt;br /&gt;&lt;br /&gt;       Upon _exit(2) all attached shared memory segments are detached from the&lt;br /&gt;       process.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RETURN VALUE&lt;/span&gt;&lt;br /&gt;       On  success  shmat()  returns the address of the attached shared memory&lt;br /&gt;       segment; on error (void *) -1 is returned, and errno is set to indicate&lt;br /&gt;       the cause of the error.&lt;br /&gt;&lt;br /&gt;       On success shmdt() returns 0; on error -1 is returned, and errno is set&lt;br /&gt;       to indicate the cause of the error.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;       When shmat() fails, errno is set to one of the following:&lt;br /&gt;&lt;br /&gt;       EACCES The calling process does not have the required  permissions  for&lt;br /&gt;              the  requested  attach type, and does not have the CAP_IPC_OWNER&lt;br /&gt;              capability.&lt;br /&gt;&lt;br /&gt;       EINVAL Invalid shmid  value,  unaligned  (i.e.,  not  page-aligned  and&lt;br /&gt;              SHM_RND  was  not  specified) or invalid shmaddr value, or can’t&lt;br /&gt;              attach segment  at  shmaddr,  or  SHM_REMAP  was  specified  and&lt;br /&gt;              shmaddr was NULL.&lt;br /&gt;&lt;br /&gt;       ENOMEM Could  not  allocate  memory  for the descriptor or for the page&lt;br /&gt;              tables.&lt;br /&gt;&lt;br /&gt;       When shmdt() fails, errno is set as follows:&lt;br /&gt;&lt;br /&gt;       EINVAL There is no shared  memory  segment  attached  at  shmaddr;  or,&lt;br /&gt;              shmaddr is not aligned on a page boundary.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CONFORMING TO&lt;/span&gt;&lt;br /&gt;       SVr4, POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;       In  SVID  3  (or  perhaps earlier) the type of the shmaddr argument was&lt;br /&gt;       changed from char * into const void *, and the returned type of shmat()&lt;br /&gt;       from char * into void *.  (Linux libc4 and libc5 have the char * proto‐&lt;br /&gt;       types; glibc2 has void *.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTES&lt;/span&gt;&lt;br /&gt;       Using shmat() with shmaddr equal to NULL is the preferred, portable way&lt;br /&gt;       of  attaching a shared memory segment.  Be aware that the shared memory&lt;br /&gt;       segment attached in this way may be attached at different addresses  in&lt;br /&gt;       different  processes.   Therefore,  any  pointers maintained within the&lt;br /&gt;       shared memory must be made relative (typically to the starting  address&lt;br /&gt;       of the segment), rather than absolute.&lt;br /&gt;&lt;br /&gt;       On  Linux,  it is possible to attach a shared memory segment even if it&lt;br /&gt;       is already marked to be deleted.  However, POSIX.1-2001 does not  spec‐&lt;br /&gt;       ify this behavior and many other implementations do not support it.&lt;br /&gt;&lt;br /&gt;       The following system parameter affects shmat():&lt;br /&gt;&lt;br /&gt;       SHMLBA     Segment   low  boundary  address  multiple.   Must  be  page&lt;br /&gt;                  aligned.  For the current implementation the SHMLBA value is&lt;br /&gt;                  PAGE_SIZE.&lt;br /&gt;&lt;br /&gt;       The implementation places no intrinsic limit on the per-process maximum&lt;br /&gt;       number of shared memory segments (SHMSEG).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SEE ALSO&lt;/span&gt;&lt;br /&gt;       brk(2), mmap(2), shmctl(2), shmget(2), capabilities(7), svipc(7)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-3862964891355066133?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/3862964891355066133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=3862964891355066133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3862964891355066133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3862964891355066133'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-shmop-shmat-shmdt.html' title='Man page - shmop, shmat, shmdt'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-4355165844683027439</id><published>2008-11-10T09:35:00.000-08:00</published><updated>2008-11-10T09:38:24.258-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man page'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='manual for shmget'/><category scheme='http://www.blogger.com/atom/ns#' term='shmget'/><title type='text'>Man page - shmget</title><content type='html'>NAME&lt;br /&gt;       shmget - allocates a shared memory segment&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;       #include &amp;lt;sys/ipc.h&amp;gt;&lt;br /&gt;       #include &amp;lt;sys/shm.h&amp;gt;&lt;br /&gt;&lt;br /&gt;       int shmget(key_t key, size_t size, int shmflg);&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;       shmget() returns the identifier of the shared memory segment associated&lt;br /&gt;       with the value of the argument key.  A new shared memory segment,  with&lt;br /&gt;       size  equal to the value of size rounded up to a multiple of PAGE_SIZE,&lt;br /&gt;       is created if key has the value IPC_PRIVATE or key  isnt  IPC_PRIVATE,&lt;br /&gt;       no  shared memory segment corresponding to key exists, and IPC_CREAT is&lt;br /&gt;       specified in shmflg.&lt;br /&gt;&lt;br /&gt;       If shmflg specifies both IPC_CREAT and IPC_EXCL  and  a  shared  memory&lt;br /&gt;       segment  already  exists for key, then shmget() fails with errno set to&lt;br /&gt;       EEXIST.  (This is analogous to the effect of the combination O_CREAT  |&lt;br /&gt;       O_EXCL for open(2).)&lt;br /&gt;&lt;br /&gt;       The value shmflg is composed of:&lt;br /&gt;&lt;br /&gt;       IPC_CREAT   to  create  a  new segment.  If this flag is not used, then&lt;br /&gt;                   shmget() will find the  segment  associated  with  key  and&lt;br /&gt;                   check  to see if the user has permission to access the seg&lt;br /&gt;                   ment.&lt;br /&gt;&lt;br /&gt;       IPC_EXCL    used with  IPC_CREAT  to  ensure  failure  if  the  segment&lt;br /&gt;                   already exists.&lt;br /&gt;&lt;br /&gt;       mode_flags  (least  significant  9  bits)  specifying  the  permissions&lt;br /&gt;                   granted to the owner, group, and world.   These  bits  have&lt;br /&gt;                   the same format, and the same meaning, as the mode argument&lt;br /&gt;                   of open(2).  Presently, the  execute  permissions  are  not&lt;br /&gt;                   used by the system.&lt;br /&gt;&lt;br /&gt;       SHM_HUGETLB (since Linux 2.6)&lt;br /&gt;                   Allocate  the  segment  using "huge pages."  See the kernel&lt;br /&gt;                   source file  Documentation/vm/hugetlbpage.txt  for  further&lt;br /&gt;                   information.&lt;br /&gt;&lt;br /&gt;       SHM_NORESERVE (since Linux 2.6.15)&lt;br /&gt;                   This  flag serves the same purpose as the mmap(2) MAP_NORE&lt;br /&gt;                   SERVE flag.  Do not reserve swap space  for  this  segment.&lt;br /&gt;                   When  swap space is reserved, one has the guarantee that it&lt;br /&gt;                   is possible to modify the segment.  When swap space is  not&lt;br /&gt;                   reserved  one might get SIGSEGV upon a write if no physical&lt;br /&gt;                   memory is available.  See also the discussion of  the  file&lt;br /&gt;                   /proc/sys/vm/overcommit_memory in proc(5).&lt;br /&gt;&lt;br /&gt;       When  a new shared memory segment is created, its contents are initial&lt;br /&gt;       ized to zero values, and its associated data structure,  shmid_ds  (see&lt;br /&gt;       shmctl(2)), is initialized as follows:&lt;br /&gt;&lt;br /&gt;              shm_perm.cuid  and shm_perm.uid are set to the effective user ID&lt;br /&gt;              of the calling process.&lt;br /&gt;&lt;br /&gt;              shm_perm.cgid and shm_perm.gid are set to the effective group ID&lt;br /&gt;              of the calling process.&lt;br /&gt;&lt;br /&gt;              The  least  significant  9  bits of shm_perm.mode are set to the&lt;br /&gt;              least significant 9 bit of shmflg.&lt;br /&gt;&lt;br /&gt;              shm_segsz is set to the value of size.&lt;br /&gt;&lt;br /&gt;              shm_lpid, shm_nattch, shm_atime and shm_dtime are set to 0.&lt;br /&gt;&lt;br /&gt;              shm_ctime is set to the current time.&lt;br /&gt;&lt;br /&gt;       If the shared memory segment already exists, the permissions are  veri&lt;br /&gt;       fied, and a check is made to see if it is marked for destruction.&lt;br /&gt;&lt;br /&gt;RETURN VALUE&lt;br /&gt;       A valid segment identifier, shmid, is returned on success, -1 on error.&lt;br /&gt;&lt;br /&gt;ERRORS&lt;br /&gt;       On failure, errno is set to one of the following:&lt;br /&gt;&lt;br /&gt;       EACCES      The user does not have permission to access the shared mem&lt;br /&gt;                   ory  segment,  and does not have the CAP_IPC_OWNER capabil&lt;br /&gt;                   ity.&lt;br /&gt;&lt;br /&gt;       EEXIST      IPC_CREAT | IPC_EXCL was specified and the segment  exists.&lt;br /&gt;&lt;br /&gt;       EINVAL      A new segment was to be created and size &amp;lt; SHMMIN or size &amp;gt;&lt;br /&gt;                   SHMMAX, or no new segment was to be created, a segment with&lt;br /&gt;                   given  key  existed,  but  size is greater than the size of&lt;br /&gt;                   that segment.&lt;br /&gt;&lt;br /&gt;       ENFILE      The system limit on the total number of open files has been&lt;br /&gt;                   reached.&lt;br /&gt;&lt;br /&gt;       ENOENT      No  segment exists for the given key, and IPC_CREAT was not&lt;br /&gt;                   specified.&lt;br /&gt;&lt;br /&gt;       ENOMEM      No memory could be allocated for segment overhead.&lt;br /&gt;&lt;br /&gt;       ENOSPC      All possible shared memory IDs have been taken (SHMMNI), or&lt;br /&gt;                   allocating  a segment of the requested size would cause the&lt;br /&gt;                   system to exceed the system-wide  limit  on  shared  memory&lt;br /&gt;                   (SHMALL).&lt;br /&gt;&lt;br /&gt;       EPERM       The  SHM_HUGETLB flag was specified, but the caller was not&lt;br /&gt;                   privileged (did not have the CAP_IPC_LOCK capability).&lt;br /&gt;&lt;br /&gt;CONFORMING TO&lt;br /&gt;       SVr4, POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;       SHM_HUGETLB is a non-portable Linux extension.&lt;br /&gt;&lt;br /&gt;NOTES&lt;br /&gt;       IPC_PRIVATE isnt a flag field but a key_t type.  If this special value&lt;br /&gt;       is  used for key, the system call ignores everything but the least sig&lt;br /&gt;       nificant 9 bits of shmflg and creates a new shared memory  segment  (on&lt;br /&gt;       success).&lt;br /&gt;&lt;br /&gt;       The  following  limits  on  shared  memory segment resources affect the&lt;br /&gt;       shmget() call:&lt;br /&gt;&lt;br /&gt;       SHMALL     System wide maximum of shared memory pages (on  Linux,  this&lt;br /&gt;                  limit can be read and modified via /proc/sys/kernel/shmall).&lt;br /&gt;&lt;br /&gt;       SHMMAX     Maximum size in bytes for a shared  memory  segment:  policy&lt;br /&gt;                  dependent (on Linux, this limit can be read and modified via&lt;br /&gt;                  /proc/sys/kernel/shmmax).&lt;br /&gt;&lt;br /&gt;       SHMMIN     Minimum size in bytes for a shared memory segment: implemen&lt;br /&gt;                  tation  dependent (currently 1 byte, though PAGE_SIZE is the&lt;br /&gt;                  effective minimum size).&lt;br /&gt;&lt;br /&gt;       SHMMNI     System wide maximum number of shared memory segments: imple&lt;br /&gt;                  mentation  dependent  (currently  4096, was 128 before Linux&lt;br /&gt;                  2.3.99; on Linux, this limit can be read  and  modified  via&lt;br /&gt;                  /proc/sys/kernel/shmmni).&lt;br /&gt;&lt;br /&gt;       The  implementation  has no specific limits for the per-process maximum&lt;br /&gt;       number of shared memory segments (SHMSEG).&lt;br /&gt;&lt;br /&gt;   Linux Notes&lt;br /&gt;       Until version 2.3.30 Linux would return  EIDRM  for  a  shmget()  on  a&lt;br /&gt;       shared memory segment scheduled for deletion.&lt;br /&gt;&lt;br /&gt;BUGS&lt;br /&gt;       The name choice IPC_PRIVATE was perhaps unfortunate, IPC_NEW would more&lt;br /&gt;       clearly show its function.&lt;br /&gt;&lt;br /&gt;SEE ALSO&lt;br /&gt;       shmat(2), shmctl(2), shmdt(2), ftok(3), capabilities(7), svipc(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-4355165844683027439?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/4355165844683027439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=4355165844683027439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/4355165844683027439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/4355165844683027439'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-shmget.html' title='Man page - shmget'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-4038788615112299627</id><published>2008-11-10T09:31:00.000-08:00</published><updated>2008-11-10T09:34:38.171-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shmctl'/><category scheme='http://www.blogger.com/atom/ns#' term='man page'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><title type='text'>Man page - shmctl</title><content type='html'>NAME&lt;br /&gt;       shmctl - shared memory control&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;       #include &amp;lt;sys/ipc.h&amp;gt;&lt;br /&gt;       #include &amp;lt;sys/shm.h&amp;gt;&lt;br /&gt;&lt;br /&gt;       int shmctl(int shmid, int cmd, struct shmid_ds *buf);&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;       shmctl()  performs the control operation specified by cmd on the shared&lt;br /&gt;       memory segment whose identifier is given in shmid.&lt;br /&gt;&lt;br /&gt;       The buf argument is a pointer  to  a  shmid_ds  structure,  defined  in&lt;br /&gt;       &amp;lt;sys/shm.h&amp;gt; as follows:&lt;br /&gt;&lt;br /&gt;           struct shmid_ds {&lt;br /&gt;               struct ipc_perm shm_perm;    /* Ownership and permissions */&lt;br /&gt;               size_t          shm_segsz;   /* Size of segment (bytes) */&lt;br /&gt;               time_t          shm_atime;   /* Last attach time */&lt;br /&gt;               time_t          shm_dtime;   /* Last detach time */&lt;br /&gt;               time_t          shm_ctime;   /* Last change time */&lt;br /&gt;               pid_t           shm_cpid;    /* PID of creator */&lt;br /&gt;               pid_t           shm_lpid;    /* PID of last shmat(2)/shmdt(2) */&lt;br /&gt;               shmatt_t        shm_nattch;  /* No. of current attaches */&lt;br /&gt;               ...&lt;br /&gt;           };&lt;br /&gt;&lt;br /&gt;       The  ipc_perm structure is defined in &amp;lt;sys/ipc.h&amp;gt; as follows (the high&lt;br /&gt;       lighted fields are settable using IPC_SET):&lt;br /&gt;&lt;br /&gt;           struct ipc_perm {&lt;br /&gt;               key_t key;            /* Key supplied to shmget(2) */&lt;br /&gt;               uid_t uid;            /* Effective UID of owner */&lt;br /&gt;               gid_t gid;            /* Effective GID of owner */&lt;br /&gt;               uid_t cuid;           /* Effective UID of creator */&lt;br /&gt;               gid_t cgid;           /* Effective GID of creator */&lt;br /&gt;               unsigned short mode;  /* Permissions + SHM_DEST and&lt;br /&gt;                                        SHM_LOCKED flags */&lt;br /&gt;               unsigned short seq;   /* Sequence number */&lt;br /&gt;           };&lt;br /&gt;&lt;br /&gt;       Valid values for cmd are:&lt;br /&gt;&lt;br /&gt;       IPC_STAT    Copy information from the kernel data structure  associated&lt;br /&gt;                   with  shmid  into the shmid_ds structure pointed to by buf.&lt;br /&gt;                   The caller must have read permission on the  shared  memory&lt;br /&gt;                   segment.&lt;br /&gt;&lt;br /&gt;       IPC_SET     Write  the values of some members of the shmid_ds structure&lt;br /&gt;                   pointed to by buf to the kernel data  structure  associated&lt;br /&gt;                   with   this   shared  memory  segment,  updating  also  its&lt;br /&gt;                   shm_ctime member.  The following  fields  can  be  changed:&lt;br /&gt;                   shm_perm.uid,  shm_perm.gid,  and  (the least significant 9&lt;br /&gt;                   bits of) shm_perm.mode.  The effective UID of  the  calling&lt;br /&gt;                   process  must  match  the  owner  (shm_perm.uid) or creator&lt;br /&gt;                   (shm_perm.cuid) of the shared memory segment, or the caller&lt;br /&gt;                   must be privileged.&lt;br /&gt;&lt;br /&gt;       IPC_RMID    Mark  the  segment  to be destroyed.  The segment will only&lt;br /&gt;                   actually be destroyed after the last  process  detaches  it&lt;br /&gt;                   (i.e.,   when  the  shm_nattch  member  of  the  associated&lt;br /&gt;                   structure shmid_ds is zero).  The caller must be the  owner&lt;br /&gt;                   or creator, or be privileged.  If a segment has been marked&lt;br /&gt;                   for destruction, then the (non-standard) SHM_DEST  flag  of&lt;br /&gt;                   the  shm_perm.mode  field  in the associated data structure&lt;br /&gt;                   retrieved by IPC_STAT will be set.&lt;br /&gt;&lt;br /&gt;       The caller must ensure that a segment is eventually  destroyed;  other&lt;br /&gt;       wise its pages that were faulted in will remain in memory or swap.&lt;br /&gt;&lt;br /&gt;       IPC_INFO (Linux-specific)&lt;br /&gt;              Returns  information  about system-wide shared memory limits and&lt;br /&gt;              parameters in the structure pointed to by buf.   This  structure&lt;br /&gt;              is  of  type  shminfo  (thus,  a  cast  is required), defined in&lt;br /&gt;              &amp;lt;sys/shm.h&amp;gt; if the _GNU_SOURCE feature test macro is defined:&lt;br /&gt;&lt;br /&gt;                  struct  shminfo {&lt;br /&gt;                      unsigned long shmmax; /* Max. segment size */&lt;br /&gt;                      unsigned long shmmin; /* Min. segment size; always 1 */&lt;br /&gt;                      unsigned long shmmni; /* Max. # of segments */&lt;br /&gt;                      unsigned long shmseg; /* Max. # of segments that a&lt;br /&gt;                                               process can attach; unused */&lt;br /&gt;                      unsigned long shmall; /* Max. # of pages of shared&lt;br /&gt;                                               memory, system-wide */&lt;br /&gt;                  };&lt;br /&gt;&lt;br /&gt;              The shmmni, shmmax, and shmall settings can be changed via /proc&lt;br /&gt;              files of the same name; see proc(5) for details.&lt;br /&gt;&lt;br /&gt;       SHM_INFO (Linux-specific)&lt;br /&gt;              Returns  a  shm_info  structure whose fields contain information&lt;br /&gt;              about system resources consumed by shared memory.   This  struc&lt;br /&gt;              ture  is  defined in &amp;lt;sys/shm.h&amp;gt; if the _GNU_SOURCE feature test&lt;br /&gt;              macro is defined:&lt;br /&gt;&lt;br /&gt;                  struct shm_info {&lt;br /&gt;                      int used_ids;           /* # of currently existing&lt;br /&gt;                                                 segments */&lt;br /&gt;                      unsigned long shm_tot;  /* Total number of shared&lt;br /&gt;                                                 memory pages */&lt;br /&gt;                      unsigned long shm_rss;  /* # of resident shared&lt;br /&gt;                                                 memory pages */&lt;br /&gt;                      unsigned long shm_swp;  /* # of swapped shared&lt;br /&gt;                                                 memory pages */&lt;br /&gt;                      unsigned long swap_attempts;  /* Unused since Linux 2.4 */&lt;br /&gt;                      unsigned long swap_successes; /* Unused since Linux 2.4 */&lt;br /&gt;                  };&lt;br /&gt;&lt;br /&gt;       SHM_STAT (Linux-specific)&lt;br /&gt;              Returns a shmid_ds structure  as  for  IPC_STAT.   However,  the&lt;br /&gt;              shmid argument is not a segment identifier, but instead an index&lt;br /&gt;              into the kernels  internal  array  that  maintains  information&lt;br /&gt;              about all shared memory segments on the system.&lt;br /&gt;&lt;br /&gt;       The  caller  can  prevent  or allow swapping of a shared memory segment&lt;br /&gt;       with the following cmd values:&lt;br /&gt;&lt;br /&gt;       SHM_LOCK (Linux-specific)&lt;br /&gt;                   Prevent swapping of the shared memory segment.  The  caller&lt;br /&gt;                   must  fault  in  any  pages that are required to be present&lt;br /&gt;                   after locking is enabled.  If a segment  has  been  locked,&lt;br /&gt;                   then    the   (non-standard)   SHM_LOCKED   flag   of   the&lt;br /&gt;                   shm_perm.mode  field  in  the  associated  data   structure&lt;br /&gt;                   retrieved by IPC_STAT will be set.&lt;br /&gt;&lt;br /&gt;       SHM_UNLOCK (Linux-specific)&lt;br /&gt;                   Unlock the segment, allowing it to be swapped out.&lt;br /&gt;&lt;br /&gt;       In  kernels  before  2.6.10,  only  a  privileged  process could employ&lt;br /&gt;       SHM_LOCK and SHM_UNLOCK.  Since kernel 2.6.10, an unprivileged  process&lt;br /&gt;       can  employ  these operations if its effective UID matches the owner or&lt;br /&gt;       creator UID of the segment, and (for SHM_LOCK) the amount of memory  to&lt;br /&gt;       be  locked  falls  within  the RLIMIT_MEMLOCK resource limit (see setr&lt;br /&gt;       limit(2)).&lt;br /&gt;&lt;br /&gt;RETURN VALUE&lt;br /&gt;       A successful IPC_INFO or SHM_INFO operation returns the  index  of  the&lt;br /&gt;       highest used entry in the kernels internal array recording information&lt;br /&gt;       about all shared memory segments.  (This information can be  used  with&lt;br /&gt;       repeated  SHM_STAT  operations  to  obtain information about all shared&lt;br /&gt;       memory segments  on  the  system.)   A  successful  SHM_STAT  operation&lt;br /&gt;       returns  the  identifier  of  the shared memory segment whose index was&lt;br /&gt;       given in shmid.  Other operations return 0 on success.&lt;br /&gt;&lt;br /&gt;       On error, -1 is returned, and errno is set appropriately.&lt;br /&gt;&lt;br /&gt;ERRORS&lt;br /&gt;       EACCES     IPC_STAT or SHM_STAT is requested and shm_perm.mode does not&lt;br /&gt;                  allow  read  access  for shmid, and the calling process does&lt;br /&gt;                  not have the CAP_IPC_OWNER capability.&lt;br /&gt;&lt;br /&gt;       EFAULT     The argument cmd has  value  IPC_SET  or  IPC_STAT  but  the&lt;br /&gt;                  address pointed to by buf isnt accessible.&lt;br /&gt;&lt;br /&gt;       EIDRM      shmid points to a removed identifier.&lt;br /&gt;&lt;br /&gt;       EINVAL     shmid  is not a valid identifier, or cmd is not a valid com&lt;br /&gt;                  mand.  Or: for a SHM_STAT operation, the index value  speci&lt;br /&gt;                  fied  in  shmid  referred to an array slot that is currently&lt;br /&gt;                  unused.&lt;br /&gt;&lt;br /&gt;       ENOMEM     (In kernels since 2.6.9), SHM_LOCK  was  specified  and  the&lt;br /&gt;                  size  of  the to-be-locked segment would mean that the total&lt;br /&gt;                  bytes in locked shared  memory  segments  would  exceed  the&lt;br /&gt;                  limit  for  the  real  user ID of the calling process.  This&lt;br /&gt;                  limit is defined by the RLIMIT_MEMLOCK soft  resource  limit&lt;br /&gt;                  (see setrlimit(2)).&lt;br /&gt;&lt;br /&gt;       EOVERFLOW  IPC_STAT is attempted, and the GID or UID value is too large&lt;br /&gt;                  to be stored in the structure pointed to by buf.&lt;br /&gt;&lt;br /&gt;       EPERM      IPC_SET or IPC_RMID is attempted, and the effective user  ID&lt;br /&gt;                  of  the calling process is not that of the creator (found in&lt;br /&gt;                  shm_perm.cuid), or the owner (found  in  shm_perm.uid),  and&lt;br /&gt;                  the  process  was  not  privileged  (Linux: did not have the&lt;br /&gt;                  CAP_SYS_ADMIN capability).&lt;br /&gt;&lt;br /&gt;                  Or (in kernels before 2.6.9),  SHM_LOCK  or  SHM_UNLOCK  was&lt;br /&gt;                  specified,  but  the  process was not privileged (Linux: did&lt;br /&gt;                  not have the CAP_IPC_LOCK capability).  (Since Linux  2.6.9,&lt;br /&gt;                  this error can also occur if the RLIMIT_MEMLOCK is 0 and the&lt;br /&gt;                  caller is not privileged.)&lt;br /&gt;&lt;br /&gt;CONFORMING TO&lt;br /&gt;       SVr4, POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;NOTES&lt;br /&gt;       The IPC_INFO, SHM_STAT and SHM_INFO operations are used by the  ipcs(8)&lt;br /&gt;       program  to  provide information on allocated resources.  In the future&lt;br /&gt;       these may modified or moved to a /proc file system interface.&lt;br /&gt;&lt;br /&gt;       Linux permits a process to attach (shmat(2)) a  shared  memory  segment&lt;br /&gt;       that has already been marked for deletion using shmctl(IPC_RMID).  This&lt;br /&gt;       feature is not available on other Unix implementations; portable appli&lt;br /&gt;       cations should avoid relying on it.&lt;br /&gt;&lt;br /&gt;       Various fields in a struct shmid_ds were typed as short under Linux 2.2&lt;br /&gt;       and have become long under Linux 2.4.  To take  advantage  of  this,  a&lt;br /&gt;       recompilation  under glibc-2.1.91 or later should suffice.  (The kernel&lt;br /&gt;       distinguishes old and new calls by an IPC_64 flag in cmd.)&lt;br /&gt;&lt;br /&gt;SEE ALSO&lt;br /&gt;       mlock(2), setrlimit(2), shmget(2), shmop(2), capabilities(7), svipc(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-4038788615112299627?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/4038788615112299627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=4038788615112299627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/4038788615112299627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/4038788615112299627'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-shmctl.html' title='Man page - shmctl'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-769687033549472215</id><published>2008-11-10T07:48:00.000-08:00</published><updated>2008-11-10T09:20:16.513-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C and C++ Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='Viewmod'/><title type='text'>C and C++ Programming: An Example : Viewmod</title><content type='html'>&lt;span style="font-size:85%;"&gt;#include &amp;lt;termios.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;dirent.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;sys/signal.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#define _POSIX_SOURCE 1   //POSIX compliant source&lt;br /&gt;&lt;br /&gt;#define FALSE 0&lt;br /&gt;&lt;br /&gt;#define TRUE 1&lt;br /&gt;&lt;br /&gt;#define MAX_DEVICES 64&lt;br /&gt;&lt;br /&gt;#define MAX_IDS 64&lt;br /&gt;&lt;br /&gt;#define LINE_LENGTH 1128&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;FILE *output;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char input_fname[80];   //printer file name&lt;br /&gt;&lt;br /&gt;FILE *input_file;&lt;br /&gt;&lt;br /&gt;mode_t mode;&lt;br /&gt;&lt;br /&gt;char Char;  //character for individual character processing&lt;br /&gt;&lt;br /&gt;int display;  &lt;br /&gt;/* "-D" options: 0-ASC,1-ASC/HEX, 2-Hex 3-dec 4-dec/asc&lt;br /&gt;   5-DOS text 6-UNIX text 7- strip all non-asc  */&lt;br /&gt;&lt;br /&gt;int out_length;  //-L options&lt;br /&gt;&lt;br /&gt;int display_col; //display column counter&lt;br /&gt;&lt;br /&gt;int char_len;&lt;br /&gt;&lt;br /&gt;int asc_char;  //0-non-asc, 1-asc, 2-CR, 3-LF&lt;br /&gt;&lt;br /&gt;int nospace;&lt;br /&gt;&lt;br /&gt;int last_char; //type of last char&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int get_linestring(char *file_line, char *label_name,&lt;br /&gt;                                        int qty_statements, int strno);&lt;br /&gt;&lt;br /&gt;int freadln(FILE *handle,char *outputline);  //read a line from a file&lt;br /&gt;&lt;br /&gt;void Process_Bufchar(); &lt;br /&gt;//process characters (Char) read into the serial buffer one at a time&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;main(int Parm_Count, char *Parms[])&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;char message[90];&lt;br /&gt;&lt;br /&gt;int start_options, in_source, done;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char *lastslash;  //string address where last slash is&lt;br /&gt;&lt;br /&gt;char dirname[80];       //directory name used to confirm directory existence&lt;br /&gt;&lt;br /&gt;DIR *current_directory;&lt;br /&gt;&lt;br /&gt;int i;&lt;br /&gt;&lt;br /&gt;char In1, Key;&lt;br /&gt;&lt;br /&gt;char buf[255];     //buffer for where data is put&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;out_length = 80;&lt;br /&gt;&lt;br /&gt;display = 1;  //default to HEX/ASC display, break after CR, CR/LF, LF&lt;br /&gt;&lt;br /&gt;start_options=0;&lt;br /&gt;&lt;br /&gt;in_source = 0; //default, standard input&lt;br /&gt;&lt;br /&gt;if (Parm_Count&amp;gt;1)  //if have parameters after the program name&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;start_options = 1;&lt;br /&gt;&lt;br /&gt;strcpy(message,Parms[1]);&lt;br /&gt;&lt;br /&gt;if (message[0]!='-')  //if is an input file name&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;if ((input_file = fopen(Parms[1], "rb")) == NULL)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;fprintf(stderr,"%s: Unable to open the input file %s\n",Parms[0],Parms[1]);&lt;br /&gt;&lt;br /&gt;exit(1);   //exit the program with an error&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  in_source = 1;  //file&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}  //end if is an input file name&lt;br /&gt;&lt;br /&gt;}  //end if have parameters on the command line&lt;br /&gt;&lt;br /&gt;//get the parameters&lt;br /&gt;&lt;br /&gt;if (start_options&amp;lt;Parm_Count)  //if start options may exist&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;for (i=1; i&amp;lt;Parm_Count; i++)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;strcpy(message, Parms[i]);&lt;br /&gt;&lt;br /&gt;if (message[0]=='-')&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;if ((message[1]=='D') || (message[1]=='d'))  //if display option&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  if (message[2]=='0') display=0;&lt;br /&gt;&lt;br /&gt;  if (message[2]=='1') display=1;&lt;br /&gt;&lt;br /&gt;  if (message[2]=='2') display=2;&lt;br /&gt;&lt;br /&gt;  if (message[2]=='3') display=3;&lt;br /&gt;&lt;br /&gt;  if (message[2]=='4') display=4;&lt;br /&gt;&lt;br /&gt;  if (message[2]=='5') display=5;&lt;br /&gt;&lt;br /&gt;  if (message[2]=='6') display=6;&lt;br /&gt;&lt;br /&gt;  if (message[2]=='7') display=7;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ((message[1]=='L') || (message[1]=='l'))  //if length option&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;   out_length=atoi(&amp;amp;message[2]);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}  //end if start options may exist&lt;br /&gt;&lt;br /&gt;done = 0;&lt;br /&gt;&lt;br /&gt;display_col=0;&lt;br /&gt;&lt;br /&gt;nospace = 1;  //we don't need space&lt;br /&gt;&lt;br /&gt;last_char=4;&lt;br /&gt;&lt;br /&gt;while (!done)&lt;br /&gt;&lt;br /&gt; {&lt;br /&gt;&lt;br /&gt;  if (in_source==1) //read a char from a file&lt;br /&gt;&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;    if ((Char=fgetc(input_file))==EOF)&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;      done = 1;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  else    //read a char from standard input&lt;br /&gt;&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;    Char=getchar();&lt;br /&gt;&lt;br /&gt;    if (Char==EOF)&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;      done = 1;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (done==0)   //output the character to std output&lt;br /&gt;&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;    asc_char=0;    //assume not asc char&lt;br /&gt;&lt;br /&gt;    if ((Char&amp;gt;31) &amp;amp;&amp;amp; (Char &amp;lt; 127)) asc_char = 1;&lt;br /&gt;&lt;br /&gt;    if (Char==13) asc_char = 2;&lt;br /&gt;&lt;br /&gt;    if (Char==10) asc_char = 3;&lt;br /&gt;&lt;br /&gt;     switch (display)&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;    case 0:  //ASC&lt;br /&gt;&lt;br /&gt;      if (asc_char &amp;lt; 2) char_len=1;&lt;br /&gt;&lt;br /&gt;      else char_len=0;&lt;br /&gt;&lt;br /&gt;      if (display_col+char_len&amp;gt;out_length)&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(10);  //scroll the line if will be too long&lt;br /&gt;&lt;br /&gt;       display_col=0;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      putchar(Char);&lt;br /&gt;&lt;br /&gt;      display_col++;&lt;br /&gt;&lt;br /&gt;      if (asc_char==3) display_col=0;&lt;br /&gt;&lt;br /&gt;      break;&lt;br /&gt;&lt;br /&gt;    case 1:  //ASC/HEX&lt;br /&gt;&lt;br /&gt;    default:&lt;br /&gt;&lt;br /&gt;      if (asc_char==1) char_len=1;&lt;br /&gt;&lt;br /&gt;      else char_len=2;&lt;br /&gt;&lt;br /&gt;      if ((display_col==0) || (last_char==4) || ((last_char==1)&lt;br /&gt;                &amp;amp;&amp;amp; (asc_char==1)))  nospace=1;    //dont need space&lt;br /&gt;&lt;br /&gt;     else nospace=0;&lt;br /&gt;&lt;br /&gt;      if (nospace==0) char_len++;  //if we need a space&lt;br /&gt;&lt;br /&gt;      if (display_col+char_len&amp;gt;out_length)&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(10);  //scroll the line if will be too long&lt;br /&gt;&lt;br /&gt;       display_col=0;&lt;br /&gt;&lt;br /&gt;       if (nospace==0)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;         nospace=1;&lt;br /&gt;&lt;br /&gt;         char_len--;&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (nospace==0)  //add a space&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(' ');&lt;br /&gt;&lt;br /&gt;       display_col++;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (asc_char==1)&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(Char);&lt;br /&gt;&lt;br /&gt;       display_col++;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      else&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       sprintf(message,"%2x",Char);&lt;br /&gt;&lt;br /&gt;       fputs(message,stdout);&lt;br /&gt;&lt;br /&gt;        display_col +=2;&lt;br /&gt;&lt;br /&gt;       if (asc_char==3)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;         putchar(10);&lt;br /&gt;&lt;br /&gt;         display_col=0;&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if ((last_char==2) &amp;amp;&amp;amp; (asc_char!=3))  //if had a CR with no LF&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(10);&lt;br /&gt;&lt;br /&gt;       display_col=0;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      last_char=asc_char;&lt;br /&gt;&lt;br /&gt;      break;&lt;br /&gt;&lt;br /&gt;    case 2:  //hex&lt;br /&gt;&lt;br /&gt;      char_len=2;&lt;br /&gt;&lt;br /&gt;      if (display_col==0) nospace = 1;&lt;br /&gt;&lt;br /&gt;      else nospace = 0;&lt;br /&gt;&lt;br /&gt;      if (nospace == 0) char_len++;   //if we need a space&lt;br /&gt;&lt;br /&gt;      if (display_col+char_len&amp;gt;out_length)&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(10);  //scroll the line if will be too long&lt;br /&gt;&lt;br /&gt;       display_col=0;&lt;br /&gt;&lt;br /&gt;       if (nospace==0)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;         nospace=1;&lt;br /&gt;&lt;br /&gt;         char_len--;&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (nospace==0)  //add a space&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(' ');&lt;br /&gt;&lt;br /&gt;       display_col++;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      sprintf(message,"%2x",Char);&lt;br /&gt;&lt;br /&gt;      fputs(message,stdout);&lt;br /&gt;&lt;br /&gt;      display_col +=2;&lt;br /&gt;&lt;br /&gt;      break;&lt;br /&gt;&lt;br /&gt;    case 5:  //unix text - adjusts to dos text, adds CR before all LF&lt;br /&gt;&lt;br /&gt;      if (Char==10) putchar(13);&lt;br /&gt;&lt;br /&gt;      putchar(Char);&lt;br /&gt;&lt;br /&gt;      break;&lt;br /&gt;&lt;br /&gt;    case 6:  //dos text - strips to unix, strips all CR&lt;br /&gt;&lt;br /&gt;      if ((last_char==2) &amp;amp;&amp;amp; (asc_char !=3))  putchar(10);&lt;br /&gt;       /* if this char is not a LF and the last one was CR,&lt;br /&gt;           need a line feed for unix */&lt;br /&gt;&lt;br /&gt;      if (Char!=13) putchar(Char);&lt;br /&gt;&lt;br /&gt;      last_char=asc_char;&lt;br /&gt;&lt;br /&gt;      break;&lt;br /&gt;&lt;br /&gt;    case 3:  //decimal&lt;br /&gt;&lt;br /&gt;      char_len=3;&lt;br /&gt;&lt;br /&gt;      if (display_col==0) nospace = 1;&lt;br /&gt;&lt;br /&gt;      else nospace = 0;&lt;br /&gt;&lt;br /&gt;      if (nospace == 0) char_len++;   //if we need a space&lt;br /&gt;&lt;br /&gt;      if (display_col+char_len&amp;gt;out_length)&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(10);  //scroll the line if will be too long&lt;br /&gt;&lt;br /&gt;       display_col=0;&lt;br /&gt;&lt;br /&gt;       if (nospace==0)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;         nospace=1;&lt;br /&gt;&lt;br /&gt;         char_len--;&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (nospace==0)  //add a space&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(' ');&lt;br /&gt;&lt;br /&gt;       display_col++;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      sprintf(message,"%3d",Char);&lt;br /&gt;&lt;br /&gt;      fputs(message,stdout);&lt;br /&gt;&lt;br /&gt;      display_col +=2;&lt;br /&gt;&lt;br /&gt;      break;&lt;br /&gt;&lt;br /&gt;    case 4:  //decimal asc&lt;br /&gt;&lt;br /&gt;      if (asc_char==1) char_len=1;&lt;br /&gt;&lt;br /&gt;      else char_len=3;&lt;br /&gt;&lt;br /&gt;     if ((display_col==0) || (last_char==4) ||&lt;br /&gt;               ((last_char==1) &amp;amp;&amp;amp; (asc_char==1))) &lt;br /&gt;         nospace=1;         //dont need space&lt;br /&gt;&lt;br /&gt;      else nospace=0;&lt;br /&gt;&lt;br /&gt;      if (nospace==0) char_len++;  //if we need a space&lt;br /&gt;&lt;br /&gt;      if (display_col+char_len&amp;gt;out_length)&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(10);  //scroll the line if will be too long&lt;br /&gt;&lt;br /&gt;       display_col=0;&lt;br /&gt;&lt;br /&gt;       if (nospace==0)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;         nospace=1;&lt;br /&gt;&lt;br /&gt;         char_len--;&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (nospace==0)  //add a space&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(' ');&lt;br /&gt;&lt;br /&gt;       display_col++;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (asc_char==1)&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(Char);&lt;br /&gt;&lt;br /&gt;       display_col++;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      else&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       sprintf(message,"%3d",Char);&lt;br /&gt;&lt;br /&gt;       fputs(message,stdout);&lt;br /&gt;&lt;br /&gt;       display_col +=2;&lt;br /&gt;&lt;br /&gt;       if (asc_char==3)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;         putchar(10);&lt;br /&gt;&lt;br /&gt;         display_col=0;&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if ((last_char==2) &amp;amp;&amp;amp; (asc_char!=3))  //if had a CR with no LF&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;       putchar(10);&lt;br /&gt;&lt;br /&gt;       display_col=0;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      last_char=asc_char;&lt;br /&gt;&lt;br /&gt;      break;&lt;br /&gt;&lt;br /&gt;    case 7:    //strips all non-asc chars to Unix file (all but ASC and LF)&lt;br /&gt;&lt;br /&gt;      if ((asc_char==1) || (asc_char==3)) putchar(Char);&lt;br /&gt;&lt;br /&gt;      break;&lt;br /&gt;&lt;br /&gt;    }  //end of switch display&lt;br /&gt;&lt;br /&gt;  }  //end of if not done&lt;br /&gt;&lt;br /&gt; }  //end of while not done&lt;br /&gt;&lt;br /&gt;}  //end of main&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-769687033549472215?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/769687033549472215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=769687033549472215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/769687033549472215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/769687033549472215'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/c-and-c-programming-example-viewmod.html' title='C and C++ Programming: An Example : Viewmod'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-7762041808385334640</id><published>2008-11-10T07:45:00.000-08:00</published><updated>2008-11-10T09:27:00.123-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serial port'/><category scheme='http://www.blogger.com/atom/ns#' term='C and C++ Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><title type='text'>C and C++ Programming: A Linux serial port test program</title><content type='html'>&lt;span style="font-size:85%;"&gt;#include &amp;lt;termios.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;sys/signal.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#define BAUDRATE B38400&lt;br /&gt;&lt;br /&gt;#define MODEMDEVICE "/dev/ttyS1"&lt;br /&gt;&lt;br /&gt;#define _POSIX_SOURCE 1  //POSIX compliant source&lt;br /&gt;&lt;br /&gt;#define FALSE 0&lt;br /&gt;&lt;br /&gt;#define TRUE 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;volatile int STOP=FALSE;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void signal_handler_IO (int status);  //definition of signal handler&lt;br /&gt;&lt;br /&gt;int wait_flag=TRUE;  //TRUE while no signal received&lt;br /&gt;&lt;br /&gt;char devicename[80];&lt;br /&gt;&lt;br /&gt;long Baud_Rate = 38400;  // default Baud Rate (110 through 38400)&lt;br /&gt;&lt;br /&gt;long BAUD;  // derived baud rate from command line&lt;br /&gt;&lt;br /&gt;long DATABITS;&lt;br /&gt;&lt;br /&gt;long STOPBITS;&lt;br /&gt;&lt;br /&gt;long PARITYON;&lt;br /&gt;&lt;br /&gt;long PARITY;&lt;br /&gt;&lt;br /&gt;int Data_Bits = 8; // Number of data bits&lt;br /&gt;&lt;br /&gt;int Stop_Bits = 1; // Number of stop bits&lt;br /&gt;&lt;br /&gt;int Parity = 0;   // Parity as follows:&lt;br /&gt;&lt;br /&gt;// 00 = NONE, 01 = Odd, 02 = Even, 03 = Mark, 04 = Space&lt;br /&gt;&lt;br /&gt;int Format = 4;&lt;br /&gt;&lt;br /&gt;FILE *input;&lt;br /&gt;&lt;br /&gt;FILE *output;&lt;br /&gt;&lt;br /&gt;int status;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;main(int Parm_Count, char *Parms[])&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;char version[80] =&lt;br /&gt;" POSIX compliant Communications test program version 1.00 4-25-1999\r\n";&lt;br /&gt;&lt;br /&gt;char version1[80] =&lt;br /&gt;"  Copyright(C) Mark Zehner/Peter Baumann 1999\r\n";&lt;br /&gt;&lt;br /&gt;char version2[80] =&lt;br /&gt;" This code is based on a DOS based test program by Mark Zehner and a Serial\r\n";&lt;br /&gt;&lt;br /&gt;char version3[80] =&lt;br /&gt;" Programming POSIX howto by Peter Baumann, integrated by Mark Zehner\r\n";&lt;br /&gt;&lt;br /&gt;char version4[80] =&lt;br /&gt;" This program allows you to send characters out the specified port by typing\r\n";&lt;br /&gt;&lt;br /&gt;char version5[80] =&lt;br /&gt;" on the keyboard. Characters typed will be echoed to the console, and \r\n";&lt;br /&gt;&lt;br /&gt;char version6[80] =&lt;br /&gt;" characters received will be echoed to the console.\r\n";&lt;br /&gt;&lt;br /&gt;char version7[80] =&lt;br /&gt;" The setup parameters for the device name, receive data format, baud rate\r\n";&lt;br /&gt;&lt;br /&gt;char version8[80] =&lt;br /&gt;" and other serial port parameters must be entered on the command line \r\n";&lt;br /&gt;&lt;br /&gt;char version9[80] =&lt;br /&gt;" To see how to do this, just type the name of this program. \r\n";&lt;br /&gt;&lt;br /&gt;char version10[80] =&lt;br /&gt;" This program is free software; you can redistribute it and/or modify it\r\n";&lt;br /&gt;&lt;br /&gt;char version11[80] =&lt;br /&gt;" under the terms of the GNU General Public License as published by the \r\n";&lt;br /&gt;&lt;br /&gt;char version12[80] = " Free Software Foundation, version 2.\r\n";&lt;br /&gt;&lt;br /&gt;char version13[80] =&lt;br /&gt;" This program comes with ABSOLUTELY NO WARRANTY.\r\n";&lt;br /&gt;&lt;br /&gt;char instr[100] =&lt;br /&gt;"\r\nOn the command you must include six items in the following order, they are:\r\n";&lt;br /&gt;&lt;br /&gt;char instr1[80] =&lt;br /&gt;"  1. The device name   Ex: ttyS0 for com1, ttyS1 for com2, etc\r\n";&lt;br /&gt;&lt;br /&gt;char instr2[80] =&lt;br /&gt;"  2. Baud Rate   Ex: 38400 \r\n";&lt;br /&gt;&lt;br /&gt;char instr3[80] ="  3. Number of Data Bits Ex: 8 \r\n";&lt;br /&gt;&lt;br /&gt;char instr4[80] ="  4. Number of Stop Bits Ex: 0 or 1\r\n";&lt;br /&gt;&lt;br /&gt;char instr5[80] ="  5. Parity  Ex: 0=none, 1=odd, 2=even\r\n";&lt;br /&gt;&lt;br /&gt;char instr6[80] =&lt;br /&gt;"  6. Format of data received: 1=hex, 2=dec, 3=hex/asc, 4=dec/asc, 5=asc\r\n";&lt;br /&gt;&lt;br /&gt;char instr7[80] =" Example command line: com ttyS0 38400 8 0 0 4 \r\n";&lt;br /&gt;&lt;br /&gt;char Param_strings[7][80];&lt;br /&gt;&lt;br /&gt;char message[90];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int fd, tty, c, res, i, error;&lt;br /&gt;&lt;br /&gt;char In1, Key;&lt;br /&gt;&lt;br /&gt;struct termios oldtio, newtio; //place for old and new port settings for serial port&lt;br /&gt;&lt;br /&gt;struct termios oldkey, newkey; //place tor old and new port settings for keyboard teletype&lt;br /&gt;&lt;br /&gt;struct sigaction saio;  //definition of signal action&lt;br /&gt;&lt;br /&gt;char buf[255];   //buffer for where data is put&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;input = fopen("/dev/tty", "r");   //open the terminal keyboard&lt;br /&gt;&lt;br /&gt;output = fopen("/dev/tty", "w");   //open the terminal screen&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (!input || !output)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;fprintf(stderr, "Unable to open /dev/tty\n");&lt;br /&gt;&lt;br /&gt;exit(1);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;error=0;&lt;br /&gt;&lt;br /&gt;fputs(version,output);  //display the program introduction&lt;br /&gt;&lt;br /&gt;fputs(version1,output);&lt;br /&gt;&lt;br /&gt;fputs(version2,output);&lt;br /&gt;&lt;br /&gt;fputs(version3,output);&lt;br /&gt;&lt;br /&gt;fputs(version4,output);&lt;br /&gt;&lt;br /&gt;fputs(version5,output);&lt;br /&gt;&lt;br /&gt;fputs(version6,output);&lt;br /&gt;&lt;br /&gt;fputs(version7,output);&lt;br /&gt;&lt;br /&gt;fputs(version8,output);&lt;br /&gt;&lt;br /&gt;fputs(version9,output);&lt;br /&gt;&lt;br /&gt;fputs(version10,output);&lt;br /&gt;&lt;br /&gt;fputs(version11,output);&lt;br /&gt;&lt;br /&gt;fputs(version12,output);&lt;br /&gt;&lt;br /&gt;fputs(version13,output);&lt;br /&gt;&lt;br /&gt;//read the parameters from the command line&lt;br /&gt;&lt;br /&gt;if (Parm_Count==7)&lt;br /&gt;//if there are the right number of parameters on the command line&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;for (i=1; i&lt;parm_count; for="" all="" wild="" search="" parameters=""&gt;&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;strcpy(Param_strings[i-1],Parms[i]);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;i=sscanf(Param_strings[0],"%s",devicename);&lt;br /&gt;&lt;br /&gt;if (i != 1) error=1;&lt;br /&gt;&lt;br /&gt;i=sscanf(Param_strings[1],"%li",&amp;amp;Baud_Rate);&lt;br /&gt;&lt;br /&gt;if (i != 1) error=1;&lt;br /&gt;&lt;br /&gt;i=sscanf(Param_strings[2],"%i",&amp;amp;Data_Bits);&lt;br /&gt;&lt;br /&gt;if (i != 1) error=1;&lt;br /&gt;&lt;br /&gt;i=sscanf(Param_strings[3],"%i",&amp;amp;Stop_Bits);&lt;br /&gt;&lt;br /&gt;if (i != 1) error=1;&lt;br /&gt;&lt;br /&gt;i=sscanf(Param_strings[4],"%i",&amp;amp;Parity);&lt;br /&gt;&lt;br /&gt;if (i != 1) error=1;&lt;br /&gt;&lt;br /&gt;i=sscanf(Param_strings[5],"%i",&amp;amp;Format);&lt;br /&gt;&lt;br /&gt;if (i != 1) error=1;&lt;br /&gt;&lt;br /&gt;sprintf(message,"Device=%s, Baud=%li\r\n",devicename, Baud_Rate);&lt;br /&gt;//output the received setup parameters&lt;br /&gt;&lt;br /&gt;fputs(message,output);&lt;br /&gt;&lt;br /&gt;sprintf(message,"Data Bits=%i Stop Bits=%i Parity=%i Format=%i\r\n",&lt;br /&gt;Data_Bits, Stop_Bits, Parity, Format);&lt;br /&gt;&lt;br /&gt;fputs(message,output);&lt;br /&gt;&lt;br /&gt;} //end of if param_count==7&lt;br /&gt;&lt;br /&gt;if ((Parm_Count==7) &amp;amp;&amp;amp; (error==0))&lt;br /&gt;//if the command line entries were correct&lt;br /&gt;&lt;br /&gt;{   //run the program&lt;br /&gt;&lt;br /&gt;tty = open("/dev/tty", O_RDWR | O_NOCTTY | O_NONBLOCK);&lt;br /&gt;//set the user console port up&lt;br /&gt;&lt;br /&gt;tcgetattr(tty,&amp;amp;oldkey); // save current port settings&lt;br /&gt;//so commands are interpreted right for this program&lt;br /&gt;&lt;br /&gt;// set new port settings for non-canonical input processing //must be NOCTTY&lt;br /&gt;&lt;br /&gt;newkey.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;&lt;br /&gt;&lt;br /&gt;newkey.c_iflag = IGNPAR;&lt;br /&gt;&lt;br /&gt;newkey.c_oflag = 0;&lt;br /&gt;&lt;br /&gt;newkey.c_lflag = 0; //ICANON;&lt;br /&gt;&lt;br /&gt;newkey.c_cc[VMIN]=1;&lt;br /&gt;&lt;br /&gt;newkey.c_cc[VTIME]=0;&lt;br /&gt;&lt;br /&gt;tcflush(tty, TCIFLUSH);&lt;br /&gt;&lt;br /&gt;tcsetattr(tty,TCSANOW,&amp;amp;newkey);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;switch (Baud_Rate)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;case 38400:&lt;br /&gt;&lt;br /&gt;default:&lt;br /&gt;&lt;br /&gt;BAUD = B38400;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 19200:&lt;br /&gt;&lt;br /&gt;BAUD = B19200;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 9600:&lt;br /&gt;&lt;br /&gt;BAUD = B9600;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 4800:&lt;br /&gt;&lt;br /&gt;BAUD = B4800;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 2400:&lt;br /&gt;&lt;br /&gt;BAUD = B2400;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 1800:&lt;br /&gt;&lt;br /&gt;BAUD = B1800;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 1200:&lt;br /&gt;&lt;br /&gt;BAUD = B1200;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 600:&lt;br /&gt;&lt;br /&gt;BAUD = B600;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 300:&lt;br /&gt;&lt;br /&gt;BAUD = B300;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 200:&lt;br /&gt;&lt;br /&gt;BAUD = B200;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 150:&lt;br /&gt;&lt;br /&gt;BAUD = B150;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 134:&lt;br /&gt;&lt;br /&gt;BAUD = B134;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 110:&lt;br /&gt;&lt;br /&gt;BAUD = B110;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 75:&lt;br /&gt;&lt;br /&gt;BAUD = B75;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 50:&lt;br /&gt;&lt;br /&gt;BAUD = B50;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;} //end of switch baud_rate&lt;br /&gt;&lt;br /&gt;switch (Data_Bits)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;case 8:&lt;br /&gt;&lt;br /&gt;default:&lt;br /&gt;&lt;br /&gt;DATABITS = CS8;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 7:&lt;br /&gt;&lt;br /&gt;DATABITS = CS7;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 6:&lt;br /&gt;&lt;br /&gt;DATABITS = CS6;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 5:&lt;br /&gt;&lt;br /&gt;DATABITS = CS5;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;} //end of switch data_bits&lt;br /&gt;&lt;br /&gt;switch (Stop_Bits)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;case 1:&lt;br /&gt;&lt;br /&gt;default:&lt;br /&gt;&lt;br /&gt;STOPBITS = 0;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 2:&lt;br /&gt;&lt;br /&gt;STOPBITS = CSTOPB;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;} //end of switch stop bits&lt;br /&gt;&lt;br /&gt;switch (Parity)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;case 0:&lt;br /&gt;&lt;br /&gt;default:   //none&lt;br /&gt;&lt;br /&gt;PARITYON = 0;&lt;br /&gt;&lt;br /&gt;PARITY = 0;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 1:   //odd&lt;br /&gt;&lt;br /&gt;PARITYON = PARENB;&lt;br /&gt;&lt;br /&gt;PARITY = PARODD;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 2:   //even&lt;br /&gt;&lt;br /&gt;PARITYON = PARENB;&lt;br /&gt;&lt;br /&gt;PARITY = 0;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;} //end of switch parity&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//open the device(com port) to be non-blocking (read will return immediately)&lt;br /&gt;&lt;br /&gt;fd = open(devicename, O_RDWR | O_NOCTTY | O_NONBLOCK);&lt;br /&gt;&lt;br /&gt;if (fd &amp;lt; 0)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;perror(devicename);&lt;br /&gt;&lt;br /&gt;exit(-1);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//install the serial handler before making the device asynchronous&lt;br /&gt;&lt;br /&gt;saio.sa_handler = signal_handler_IO;&lt;br /&gt;&lt;br /&gt;sigemptyset(&amp;amp;saio.sa_mask);  //saio.sa_mask = 0;&lt;br /&gt;&lt;br /&gt;saio.sa_flags = 0;&lt;br /&gt;&lt;br /&gt;saio.sa_restorer = NULL;&lt;br /&gt;&lt;br /&gt;sigaction(SIGIO,&amp;amp;saio,NULL);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// allow the process to receive SIGIO&lt;br /&gt;&lt;br /&gt;fcntl(fd, F_SETOWN, getpid());&lt;br /&gt;&lt;br /&gt;// Make the file descriptor asynchronous (the manual page says only&lt;br /&gt;&lt;br /&gt;// O_APPEND and O_NONBLOCK, will work with F_SETFL...)&lt;br /&gt;&lt;br /&gt;fcntl(fd, F_SETFL, FASYNC);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;tcgetattr(fd,&amp;amp;oldtio); // save current port settings&lt;br /&gt;&lt;br /&gt;// set new port settings for canonical input processing&lt;br /&gt;&lt;br /&gt;newtio.c_cflag = BAUD | CRTSCTS | DATABITS | STOPBITS |&lt;br /&gt;                                     PARITYON | PARITY | CLOCAL | CREAD;&lt;br /&gt;&lt;br /&gt;newtio.c_iflag = IGNPAR;&lt;br /&gt;&lt;br /&gt;newtio.c_oflag = 0;&lt;br /&gt;&lt;br /&gt;newtio.c_lflag = 0; //ICANON;&lt;br /&gt;&lt;br /&gt;newtio.c_cc[VMIN]=1;&lt;br /&gt;&lt;br /&gt;newtio.c_cc[VTIME]=0;&lt;br /&gt;&lt;br /&gt;tcflush(fd, TCIFLUSH);&lt;br /&gt;&lt;br /&gt;tcsetattr(fd,TCSANOW,&amp;amp;newtio);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// loop while waiting for input. normally we would do something useful here&lt;br /&gt;&lt;br /&gt;while (STOP==FALSE)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;status = fread(&amp;amp;Key,1,1,input);&lt;br /&gt;&lt;br /&gt;if (status==1) //if a key was hit&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;switch (Key)&lt;br /&gt;&lt;br /&gt;{ /* branch to appropiate key handler */&lt;br /&gt;&lt;br /&gt;case 0x1b: /* Esc */&lt;br /&gt;&lt;br /&gt;STOP=TRUE;&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;default:&lt;br /&gt;&lt;br /&gt;fputc((int) Key,output);&lt;br /&gt;&lt;br /&gt;//   sprintf(message,"%x ",Key); //debug&lt;br /&gt;&lt;br /&gt;//   fputs(message,output);&lt;br /&gt;&lt;br /&gt;write(fd,&amp;amp;Key,1);  //write 1 byte to the port&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;} //end of switch key&lt;br /&gt;&lt;br /&gt;} //end if a key was hit&lt;br /&gt;&lt;br /&gt;// after receiving SIGIO, wait_flag = FALSE, input is available and can be read&lt;br /&gt;&lt;br /&gt;if (wait_flag==FALSE) //if input is available&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;res = read(fd,buf,255);&lt;br /&gt;&lt;br /&gt;if (resɬ)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;for (i=0; i&amp;lt;res; i++) //for all chars in string&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;In1 = buf[i];&lt;br /&gt;&lt;br /&gt;switch (Format)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;case 1:  //hex&lt;br /&gt;&lt;br /&gt;sprintf(message,"%x ",In1);&lt;br /&gt;&lt;br /&gt;fputs(message,output);&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 2:  //decimal&lt;br /&gt;&lt;br /&gt;sprintf(message,"%d ",In1);&lt;br /&gt;&lt;br /&gt;fputs(message,output);&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 3:  //hex and asc&lt;br /&gt;&lt;br /&gt;if ((In1ថ) || (In1))&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;sprintf(message,"%x",In1);&lt;br /&gt;&lt;br /&gt;fputs(message,output);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;else fputc ((int) In1, output);&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 4:  //decimal and asc&lt;br /&gt;&lt;br /&gt;default:&lt;br /&gt;&lt;br /&gt;if ((In1ថ) || (In1))&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;sprintf(message,"%d",In1);&lt;br /&gt;&lt;br /&gt;fputs(message,output);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;else fputc ((int) In1, output);&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 5:  //asc&lt;br /&gt;&lt;br /&gt;fputc ((int) In1, output);&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;} //end of switch format&lt;br /&gt;&lt;br /&gt;} //end of for all chars in string&lt;br /&gt;&lt;br /&gt;} //end if resɘ&lt;br /&gt;&lt;br /&gt;//   buf[res]=0;&lt;br /&gt;&lt;br /&gt;//   printf(":%s:%d\n", buf, res);&lt;br /&gt;&lt;br /&gt;//   if (res==1) STOP=TRUE; /* stop loop if only a CR was input */&lt;br /&gt;&lt;br /&gt;wait_flag = TRUE;   /* wait for new input */&lt;br /&gt;&lt;br /&gt;} //end if wait flag == FALSE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;} //while stop==FALSE&lt;br /&gt;&lt;br /&gt;// restore old port settings&lt;br /&gt;&lt;br /&gt;tcsetattr(fd,TCSANOW,&amp;amp;oldtio);&lt;br /&gt;&lt;br /&gt;tcsetattr(tty,TCSANOW,&amp;amp;oldkey);&lt;br /&gt;&lt;br /&gt;close(tty);&lt;br /&gt;&lt;br /&gt;close(fd); //close the com port&lt;br /&gt;&lt;br /&gt;} //end if command line entrys were correct&lt;br /&gt;&lt;br /&gt;else //give instructions on how to use the command line&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;fputs(instr,output);&lt;br /&gt;&lt;br /&gt;fputs(instr1,output);&lt;br /&gt;&lt;br /&gt;fputs(instr2,output);&lt;br /&gt;&lt;br /&gt;fputs(instr3,output);&lt;br /&gt;&lt;br /&gt;fputs(instr4,output);&lt;br /&gt;&lt;br /&gt;fputs(instr5,output);&lt;br /&gt;&lt;br /&gt;fputs(instr6,output);&lt;br /&gt;&lt;br /&gt;fputs(instr7,output);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fclose(input);&lt;br /&gt;&lt;br /&gt;fclose(output);&lt;br /&gt;&lt;br /&gt;} //end of main&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/***************************************************************************&lt;br /&gt;&lt;br /&gt;* signal handler. sets wait_flag to FALSE, to indicate above loop that   *&lt;br /&gt;&lt;br /&gt;* characters have been received. *&lt;br /&gt;&lt;br /&gt;***************************************************************************/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void signal_handler_IO (int status)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;//  printf("received SIGIO signal.\n");&lt;br /&gt;&lt;br /&gt;wait_flag = FALSE;&lt;br /&gt;&lt;br /&gt;}              &lt;/parm_count;&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-7762041808385334640?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/7762041808385334640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=7762041808385334640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/7762041808385334640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/7762041808385334640'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/c-and-c-programming-linux-serial-port.html' title='C and C++ Programming: A Linux serial port test program'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-2026956766091915105</id><published>2008-11-10T07:40:00.000-08:00</published><updated>2008-11-10T07:41:04.094-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='Debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Debugging Linux Programs</title><content type='html'>&lt;h3&gt;gdb debugger commands&lt;/h3&gt; &lt;p&gt; See the gdb(1) man page for more information on the gdb program.  Below are listed some commands: &lt;/p&gt; &lt;ul&gt;&lt;li&gt;file - Loads the exe file. &lt;/li&gt;&lt;li&gt;kill - Terminates the program being debugged. &lt;/li&gt;&lt;li&gt;list - List sections of the source code. &lt;/li&gt;&lt;li&gt;next - Advances one line of source code in the current function and steps into other functions. &lt;/li&gt;&lt;li&gt;run - Executes the program that is being debugged. &lt;/li&gt;&lt;li&gt;quit - Ends gdb. &lt;/li&gt;&lt;li&gt;watch - Enables you to tell the value of a variable when it changes. &lt;/li&gt;&lt;li&gt;break - Set a break point. &lt;/li&gt;&lt;li&gt;make - Remake the exe program without quitting gdb. &lt;/li&gt;&lt;li&gt;shell - Run a UNIX shell command without leaving gdb. &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-2026956766091915105?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/2026956766091915105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=2026956766091915105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/2026956766091915105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/2026956766091915105'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/debugging-linux-programs.html' title='Debugging Linux Programs'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-43773359848922594</id><published>2008-11-10T07:27:00.000-08:00</published><updated>2008-11-10T07:38:21.756-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C and C++ Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='POSIX Testing'/><title type='text'>C and C++ Programming: More Linux POSIX Testing</title><content type='html'>&lt;p style="text-align: justify;"&gt;The machine on which a program may run will have different capabilities depending   to its setup and how the kernel was compiled. To test the POSIX capability of   the machine at runtime to support POSIX use the following procedures: &lt;/p&gt;&lt;div style="text-align: justify;"&gt;   &lt;/div&gt;&lt;ol style="text-align: justify;" start="1" type="1"&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;long        sysconf(int name); &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;long        pathconf(const char *pathname, int name); &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;long        fpathconf(int fd, int name); &lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;   &lt;/div&gt;&lt;p style="text-align: justify;"&gt;See the sysconf(3), pathconf(3), and fpathconf(3) man pages for   information on the values supported by the function. &lt;/p&gt;&lt;div style="text-align: justify;"&gt;   &lt;/div&gt;&lt;h2 style="text-align: justify;"&gt;System POSIX Options&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;   &lt;/div&gt;&lt;h3 style="text-align: justify;"&gt;POSIX.1 Option values&lt;/h3&gt;&lt;div style="text-align: justify;"&gt;   &lt;/div&gt;&lt;ul style="text-align: justify;" type="disc"&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_JOB_CONTROL        &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_SAVED_JOBS        &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_VERSION        &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_ARG_MAX        &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_CHILD_MAX        &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_CLK_TCK        &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_NGROUPS_MAX        &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_OPEN_MAX        &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_STREAM_MAX        &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_TZNAME_MAX        &lt;span style="font-size:12;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;     &lt;br /&gt;    &lt;/div&gt;&lt;h3 style="text-align: justify;"&gt;POSIX.4 Option Values&lt;/h3&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;ul style="text-align: justify;" type="disc"&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_ASYNCHRONOUS_IO      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_MAPPED_FILES      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_MEMLOCK      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_MEMLOCK_RANGE      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_MEMORY_PROTECTION      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_MESSAGE_PASSING      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_PRIORITIZED_IO      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_PRIORITY_SCHEDULING      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_REALTIME_SIGNALS      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_SEMAPHORES      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_FSYNC      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_SHARED_MEMORY_OBJECTS      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_SYNCHRONIZED_IO      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_TIMERS      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_AIO_LIST_IO_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_AIO_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_AIO_PRIO_DELTA_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_DELAYTIMER_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_MQ_OPEN_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_MQ_PRIO_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_PAGESIZE      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_RTSIG_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_SEM_NSEMS_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_SEM_VALUE_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_SIGQUEUE_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_SC_TIMER_MAX      &lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;h2 style="text-align: justify;"&gt;File and Directory Related POSIX Options&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;h3 style="text-align: justify;"&gt;POSIX.1 Option Values&lt;/h3&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;ul style="text-align: justify;" type="disc"&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_CHOWN_RESTRICTED      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_NO_TRUNC      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_VDISABLE      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_LINK_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_MAX_CANNON      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_MAX_INPUT      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_NAME_INPUT      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_PATH_MAX      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_PIPE_BUF      &lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;h3 style="text-align: justify;"&gt;POSIX.4 Option Values&lt;/h3&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;ul style="text-align: justify;" type="disc"&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_ASYNC_IO      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_PRIO_IO      &lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;_PC_SYNC_IO      &lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-43773359848922594?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/43773359848922594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=43773359848922594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/43773359848922594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/43773359848922594'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/c-and-c-programming-more-linux-posix.html' title='C and C++ Programming: More Linux POSIX Testing'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-1336907682218855082</id><published>2008-11-10T07:11:00.000-08:00</published><updated>2008-11-10T07:31:10.249-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C and C++ Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux POSIX System Capabilities'/><title type='text'>C and C++ Programming: Linux POSIX System Capabilities</title><content type='html'>This section explains how to determine if various parts of POSIX are supported by your system. The easiest way to do this is to look at /usr/include/unistd.h on the system. This file will define the _POSIX_SOURCE versions. It may include other header files which include POSIX definitions. One that you should look at is /usr/include/bits/posix_opt.h which should have most of the POSIX definitions. All the below parameters are listed there. However, the most sure way is to run the below program. This is because the /usr/include/inistd.h file may not be the only one available and it may not be used by your system. Also you need to be aware your kernel may not support all the listed functions. It will depend on the library used to compile it and the options used at the compile time. The kernel will have a great affect on the support of POSIX.4 functions since it controls memory allocation and processes, including the signals between them. &lt;h3&gt;The Test Program&lt;/h3&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;The   program listing below will output values based on what your system supports.   I call it "posixtst.c". This is a tar and gz version of the source   and binary program with a small README file with install instructions. &lt;b&gt;&lt;a href="http://www.comptechdoc.org/os/linux/programming/c/posixtst_1_0_0_tar.gz"&gt;&lt;span style="color: blue;"&gt;posixtst-1.0.0&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;#define _POSIX_SOURCE&lt;br /&gt;  #define _POSIX_C_SOURCE 199309&lt;br /&gt;  #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt; &lt;br /&gt;  long val;&lt;br /&gt;  int errno;&lt;br /&gt; &lt;br /&gt;  main()&lt;br /&gt;  {&lt;br /&gt;  #ifndef _POSIX_VERSION&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;printf("No support for POSIX on   this system!\n");&lt;br /&gt;  #else&lt;span style=""&gt;     &lt;/span&gt;//see what POSIX version&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;printf("POSIX_VERSION =   %d.\n",_POSIX_VERSION);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;printf("POSIX2_VERSION =   %d.\n",_POSIX2_VERSION);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;printf("POSIX2_C_VERSION =   %d.\n",_POSIX2_C_VERSION);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#if _POSIX_VERSION == 199009&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("This system supports   POSIX.1 without support for POSIX.4.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#if _POSIX_VERSION &amp;gt;=   199309&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf ("This system   supports POSIX.1 and POSIX.4. \n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("This system   supports a strange POSIX version between 199009 and 199309.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;        &lt;/span&gt;//DO POSIX.4 tests&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf ("POSIX.4 Options   Test Results:\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_REALTIME_SIGNALS&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Additional real time signals are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef _POSIX_RTSIG_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;_POSIX_RTSIG_MAX=%d Max real time   signals.\n",_POSIX_RTSIG_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_RTSIG_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef _POSIX_SIGQUEUE_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;_POSIX_SIGQUEUE_MAX=%d Max real time&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;             signals at once per process.\n",_POSIX_RTQUEUE_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_SIGQUEUE_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Additional real time signals are   not&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;                                                   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_PRIORITY_SCHEDULING&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Priority scheduling is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Priority scheduling is not   supported.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;                                                             \n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_TIMERS&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Clocks and timers are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef _POSIX_TIMER_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;_POSIX_TIMER_MAX=%d Max number of   concur&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;             rent timers a process can have.\n",_POSIX_TIMER_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_TIMER_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef _POSIX_DELAYTIMER_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;_POSIX_DELAYTIMER_MAX=%d Max number of&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;                times a timer can have a detectable overrun.\n",            _POSIX_DELAYTIMER_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_DELAYTIMER_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Clocks and timers are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_ASYNCHRONOUS_IO&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Asynchronous I/O is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef _POSIX_AIO_LISTIO_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;_POSIX_AIO_LISTIO_MAX=%d Max operations   in one call\n",_POSIX_AIO_LISTIO_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_AIO_LISTIO_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;          &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef _POSIX_AIO_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;_POSIX_AIO_MAX=%d Max concurrent Async   I/Os\n",_POSIX_AIO_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_AIO_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Asynchronous I/O is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef   _POSIX_SYNCHRONIZED_IO&lt;span style=""&gt;  &lt;/span&gt;//Only   supported if Asynchronous I/O is supported&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Synchronized I/O is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Synchronized I/O is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_PRIORITIZED_IO&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Prioritized asynchronous I/O is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef   _POSIX_AIO_PRIO_DELTA_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;_POSIX_AIO_PRIO_DELTA_MAX=%d Max amount   AIO priority can be decreased.\n",_POSIX_AIO_PRIO_DELTA_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_AIO_PRIO_DELTA_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Prioritized asynchronous I/O is   not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_FSYNC&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 The fsync function is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 The fsync function is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_MAPPED_FILES&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Mapping files as memory is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Mapping files as memory is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_MEMLOCK&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Locking memory is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;       &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Locking memory is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_MEMLOCK_RANGE&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Locking memory ranges is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Locking memory ranges is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_MEMORY_PROTECTION&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Setting memory protection is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Setting memory protection is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_MESSAGE_PASSING&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Message Queues are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef _POSIX_MQ_OPEN_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;_POSIX_MQ_OPEN_MAX=%d Max # of message   queues per process.\n",_POSIX_MQ_OPEN_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;       &lt;/span&gt;&lt;span style=""&gt;     &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_MQ_OPEN_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef _POSIX_MQ_PRIO_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;_POSIX_MQ_PRIO_MAX=%d Max # of message   priorities.\n",_POSIX_MQ_PRIO_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_MQ_PRIO_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Message Queues are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_SEMAPHORES&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Semaphores are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef _POSIX_SEM_NSEMS_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;_POSIX_SEM_NSEMS_MAX=%d Max # of open   semaphores per process.\n",_POSIX_SEM_NSEMS_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_SEM_NSEMS_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#ifdef _POSIX_SEM_VALUE_MAX&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;_POSIX_SEM_VALUE_MAX=%d Maximum   semaphore value.\n",_POSIX_SEM_VALUE_MAX);&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;            &lt;/span&gt;printf("&lt;span style=""&gt;     &lt;/span&gt;No _POSIX_SEM_VALUE_MAX value   exists.\n");&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Semaphores are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef   _POSIX_SHARED_MEMORY_OBJECTS&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Shared memory objects are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Shared memory objects are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt; &lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_THREADS&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1c pthreads are supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1c pthreads are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef   _POSIX_THREAD_ATTR_STACKADDRTHREAD_ATTR_STACKADDR&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Thread stack address attribute   option is supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Thread stack address attribute   option is not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef   _POSIX_THREAD_ATTR_STACKSIZE&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Thread stack size attribute option   is supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Thread stack size attribute option   is not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef   _POSIX_THREAD_SAFE_FUNCTIONS&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Thread-safe functions are supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Thread-safe functions are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef   _POSIX_THREAD_PRIORITY_SCHEDULING&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;POSIX.1c   thread execution scheduling is supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;POSIX.1c   thread execution scheduling is not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_THREAD_PRIO_INHERIT&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Thread priority inheritance option   is supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Thread priority inheritance option   is not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef   _POSIX_THREAD_PROCESS_SHARED&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Process-shared synchronization is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.4 Process-shared synchronization is   not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_POSIX_PII&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Protocol-independent interfaces are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Protocol-independent interfaces are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_PII_XTI&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;XTI protocol-indep. interfaces are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;XTI protocol-indep. interfaces are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_PII_SOCKET&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Socket protocol-indep. interfaces are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Socket protocol-indep. interfaces are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_PII_INTERNET&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Internet family of protocols is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Internet family of protocols is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_PII_INTERNET_STREAM&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Connection-mode Internet protocol is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Connection-mode Internet protocol is not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_PII_INTERNET_DGRAM&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Connectionless Internet protocol is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Connectionless Internet protocol is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_PII_OSI&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;ISO/OSI   family of protocols is supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;ISO/OSI   family of protocols is not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_PII_OSI_COTS&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Connection-mode ISO/OSI service is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Connection-mode ISO/OSI service is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_PII_OSI_CLTS&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Connectionless ISO/OSI service is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Connectionless ISO/OSI service is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_POLL&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Implementation supports `poll'   function.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;poll function is not&lt;span style=""&gt;  &lt;/span&gt;supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _POSIX_SELECT&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Implementation supports `select' and   `pselect'.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;Implementation does not support `select'   and `pselect'.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _XOPEN_REALTIME&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;X/Open realtime support is   available.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;X/Open realtime support is not   available..\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _XOPEN_REALTIME_THREADS&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;X/Open realtime thread support is   available.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;X/Open realtime thread support is not   available.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _XOPEN_SHM&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;XPG4.2 Shared memory interface is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;XPG4.2 Shared memory interface is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _XBS5_ILP32_OFF32&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;32-bit int, long, pointer, and off_t types   are supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;32-bit int, long, pointer, and off_t types   are not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _XBS5_ILP32_OFFBIG&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;32-bit int, long, and pointer and off_t   with at least 64 bits is supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;32-bit int, long, and pointer and off_t   with at least 64 bits is not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _XBS5_LP64_OFF64&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;32-bit int, and 64-bit long, pointer, and   off_t types are supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;32-bit int, and 64-bit long, pointer, and   off_t types are not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#ifdef _XBS5_LPBIG_OFFBIG&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;32 bits int and long, pointer, and off_t   with at least 64 bits are supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;         &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;32 bits int and long, pointer, and off_t   with at least 64 bits are not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;#endif&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;//Do POSIX.1 tests&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;printf ("POSIX.1 Options Test   Results:\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#ifdef _POSIX_JOB_CONTROL&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Job control is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Job control is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#ifdef _POSIX_CHOWN_RESTRICTED&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Chown restrictions are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Chown restrictions are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#ifdef _POSIX_SAVED_IDS&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Process saved IDs are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Process saved IDs are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#ifdef _POSIX_NO_TRUNC&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Long pathname errors are   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Long pathname errors are not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#ifdef _POSIX_VDISABLE&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Some terminal charactistics   disabling is supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Some terminal charactistics   disabling is not supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#endif&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#ifdef NGROUPS_MAX&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Supplementary group IDs is   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#else&lt;br /&gt;  &lt;span style=""&gt;      &lt;/span&gt;printf("&lt;span style=""&gt;   &lt;/span&gt;POSIX.1 Supplementary group IDs is not   supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;#endif&lt;br /&gt; &lt;br /&gt;  #endif&lt;br /&gt; &lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;//System Run time testing&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;printf("\nSystem run time   tests:\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_JOB_CONTROL);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_JOB_CONTROL\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 JOB CONTROL   not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 JOB CONTROL   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_SAVED_IDS);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_SAVED_IDS\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 SAVED IDS not   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 SAVED IDS   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_VERSION);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_VERSION\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 VERSION not   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 VERSION   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt; &lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_ARG_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_ARG_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 ARG MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_CHILD_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_CHILD_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 CHILD MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_CLK_TCK);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_CLK_TCK\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 CLK TCK   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_NGROUPS_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_NGROUPS_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 NGROUPS MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_OPEN_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_OPEN_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 OPEN MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_STREAM_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_STREAM_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 STREAM MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_TZNAME_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_TZNAME_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.1 TZNAME MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_ASYNCHRONOUS_IO);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_ASYNCHRONOUS_IO\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 ASYNCHRONOUS   IO not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 ASYNCHRONOUS   IO Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_MAPPED_FILES);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_MAPPED_FILES\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 MAPPED FILES   not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 MAPPED FILES   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_MEMLOCK_RANGE);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_MEMLOCK_RANGE\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 MEMLOCK RANGE   not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 MEMLOCK RANGE   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_MEMORY_PROTECTION);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option _SC_MEMORY_PROTECTION\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 MEMORY   PROTECTION not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 MEMORY   PROTECTION Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_MESSAGE_PASSING);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_MESSAGE_PASSING\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 MESSAGE   PASSING not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 MESSAGE   PASSING Supported.\n");&lt;br /&gt;  &lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_PRIORITIZED_IO);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_PRIORITIZED_IO\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 PRIORITIZED   IO not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 PRIORITIZED   IO Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;val=sysconf(_SC_PRIORITY_SCHEDULING);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_PRIORITY_SCHEDULING\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 PRIORITY   SCHEDULING not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 PRIORITY   SCHEDULING Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_REALTIME_SIGNALS);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_REALTIME_SIGNALS\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 REALTIME   SIGNALS not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 REALTIME   SIGNALS Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_SEMAPHORES);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_SEMAPHORES\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 SEMAPHORES   not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 SEMAPHORES   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_FSYNC);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_FSYNC\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 FSYNC not   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 FSYNC   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;  &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;val=sysconf(_SC_SHARED_MEMORY_OBJECTS);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_SHARED_MEMORY_OBJECTS\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4   SHARED_MEMORY_OBJECTS not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4   SHARED_MEMORY_OBJECTS Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;  &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_SYNCHRONIZED_IO);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_SYNCHRONIZED_IO\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;printf("POSIX.4 SYNCHRONIZED IO not Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 SYNCHRONIZED   IO Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;  &lt;/span&gt;errno=0;&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_TIMERS);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if ((val == -1) &amp;amp;&amp;amp;   (errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_TIMERS\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else if ((val == -1) &amp;amp;&amp;amp;   (!errno))&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 TIMERS not   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 TIMERS   Supported.\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt; &lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_AIO_LISTIO_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_AIO_LISTIO_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 AIO LISTIO   MAX Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_AIO_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_AIO_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 AIO MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_AIO_PRIO_DELTA_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_AIO_PRIO_DELTA_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 AIO PRIO   DELTA MAX Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_DELAYTIMER_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_DELAYTIMER_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 DELAYTIMER   MAX Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_MQ_OPEN_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_MQ_OPEN_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 MQ OPEN MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_MQ_PRIO_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_MQ_PRIO_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 MQ PRIO MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_PAGESIZE);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_PAGESIZE\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 PAGESIZE   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_RTSIG_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_RTSIG_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 RTSIG MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_SEM_NSEMS_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_SEM_NSEMS_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 SEM NSEMS MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_SEM_VALUE_MAX);&lt;br /&gt;  &lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_SEM_VALUE_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 SEM VALUE MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_SIGQUEUE_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_SIGQUEUE_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 SIGQUEUE MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;val=sysconf(_SC_TIMER_MAX);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;if (val == -1)&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("Bad option   _SC_TIMER_MAX\n");&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;else&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;{&lt;br /&gt;  &lt;span style=""&gt;     &lt;/span&gt;printf("POSIX.4 TIMER MAX   Value=%d.\n",val);&lt;br /&gt;  &lt;span style=""&gt;   &lt;/span&gt;}&lt;br /&gt; &lt;br /&gt;  }&lt;span style=""&gt;  &lt;/span&gt;//end of main&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;&lt;/td&gt;  &lt;/tr&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 13.5pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Other system limits&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;The "/usr/include/limits.h" file defines the various limits for the system such as SEM_NSEMS_MAX which is the maximum number of semaphores that one process can have open at a time. This file includes the following: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 12pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;#ifdef&lt;span style=""&gt;  &lt;/span&gt;__USE_POSIX&lt;br /&gt;/* POSIX adds things to &amp;lt;limits.h&amp;gt;.&lt;span style=""&gt;  &lt;/span&gt;*/&lt;br /&gt;# include &amp;lt;bits/posix1_lim.h&amp;gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#ifdef&lt;span style=""&gt;  &lt;/span&gt;__USE_POSIX2&lt;br /&gt;# include &amp;lt;bits/posix2_lim.h&amp;gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#ifdef&lt;span style=""&gt;  &lt;/span&gt;__USE_XOPEN&lt;br /&gt;# include &amp;lt;bits/xopen_lim.h&amp;lt;&lt;br /&gt;#endif&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Which means, the files "/usr/include/bits/posix1_lim.h" and "/usr/include/bits/posix2_lim.h" define the system limits. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;&lt;td valign="top"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-1336907682218855082?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/1336907682218855082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=1336907682218855082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1336907682218855082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1336907682218855082'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/c-and-c-programming-linux-posix-system.html' title='C and C++ Programming: Linux POSIX System Capabilities'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-951875160992460651</id><published>2008-11-09T19:46:00.000-08:00</published><updated>2008-11-09T20:02:17.092-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Examples'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Script Programming: Linux Script Examples</title><content type='html'>&lt;h3 style="text-align: justify;"&gt;A makefile script example&lt;/h3&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt; Scripting that checks a file and modifies it if required. Since it is from a makefile, this file is similar to a normal script but is slightly modified with lines that end with ";\" characters. This section demonstrates modification of the rc.local file from a makefile so a script program, "printst", may be run in the background when the system starts. The variable "BINLOC" is defined earlier with the line "BINLOC = /usr/local/tmp". See the section on "Making Packages" under the header "Making makefiles". &lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;pre&gt;&lt;span style="font-size:85%;"&gt;# Add the path for $(BINLOC) to the /etc/rc.d/rc.local file&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;@PATHIN=`grep "path=" /etc/rc.d/rc.local | grep "$(BINLOC)"`; \&lt;/span&gt;&lt;br /&gt;# See if the BINLOC path is set in the rc.local file&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;HEADER=""; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;if \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  [ -z "$$PATHIN" ]; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;then \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  echo Adding $(BINLOC) to path in /etc/rc.d/rc.local; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  echo &gt;&gt; /etc/rc.d/rc.local; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  echo "###### Added by Print Service Install on `date`&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;                        by `whoami`" &gt;&gt; /etc/rc.d.rc.local; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  HEADER=Y; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  echo "export PATH=\$$PATH:$(BINLOC)" &gt;&gt; /etc/rc.d.rc.local; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;else \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  echo $(BINLOC) already set in path in file /etc/rc.d/rc.local; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;fi; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;PRINTST=`grep -i "printst &amp;amp;" /etc/rc.d/rc.local`; \&lt;/span&gt;&lt;br /&gt;# See if the string printst is in the rc.local file&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;if \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  [ -z "$$PRINTST" ]; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;then \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  echo Adding printst command to /etc/rc.d/rc.local file; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  if \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;     [ -z "$$HEADER" ]; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  then \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;     echo &gt;&gt; /etc/rc.d.rc.local; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;     echo "###### Added by Print Service Install on `date`&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;                        by `whoami`" &gt;&gt; /etc/rc.d.rc.local; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;     HEADER=Y; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  fi; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  echo "printst &amp;amp;" &gt;&gt; /etc/rc.d.rc.local; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;else \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  echo Already have printst command in /etc/rc.d/rc.local file; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;fi; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;if \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  [ -n "$$HEADER" ]; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;then \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  echo "###### End of Print Service Install Section ######"  &gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;                                            /etc/rc.d.rc.local; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  echo &gt;&gt; /etc/rc.d.rc.local; \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;fi;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-951875160992460651?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/951875160992460651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=951875160992460651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/951875160992460651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/951875160992460651'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/makefile-script-example-scripting-that.html' title='Script Programming: Linux Script Examples'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-1388104522177812771</id><published>2008-11-09T19:42:00.000-08:00</published><updated>2008-11-09T20:04:01.188-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='An example that manages and reads files'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Script Programming: An example that manages and reads files</title><content type='html'>&lt;table style="text-align: left; margin-left: 0px; margin-right: 0px; width: 460px; height: 395px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="100%"&gt;&lt;pre&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#!/bin/bash&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;# printst     This file manages print files in subdirectories&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#               under the "/var/spool/spooldata" subdirectory.&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#               It loops through each subdirectory, looking&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#               for files that have the sticky bit set.  If it&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#               is set, the file will be sent to the printer,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#               and the sticky bit will be cleared.&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#               Files are sent to the chosen printer based on&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#               the name of the directory and the configuration&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#               file.&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;#&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;if [ -d /var/spool/spooldata ]; then&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;# if this spool subdirectory exists&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;  for dfile in /var/spool/spooldata/*; do&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;# for all files in spooldata&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;    if [ -d $dfile ]; then&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;# if the file is a subdirectory&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;     fname=${dfile#/var/spool/spooldata/}&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;# parameter expansion used to get filename without path&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;# get the printername from the configuration file based&lt;br /&gt;# on the subdirectory name&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;     prname=`grep -i ${fname} /usr/local/etc/spooldata.conf | cut&lt;br /&gt;                                                      -f2 -d" "`&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;     for ifile in $dfile/*; do  &lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;# for all files in the subdirectory&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;       if [ -k $ifile ]; then  &lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;# if the file has the sticky bit set&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;          lpr -P$prname $ifile&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;# print the file&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;          chmod -t $ifile        &lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;# clear the sticky bit&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;       fi&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;     done&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;    fi&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;  done&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;fi&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;  &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;"&gt; Put this file in your cron schedule to be run about once per minute or encase it in the following statements &lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;pre class="indent"&gt;while [ 1 ]&lt;br /&gt;do&lt;br /&gt;sleep 60&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt; Be aware of several things in this file: &lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;Where the variable prname is set, the output is directed with ` rather than '. Using ' will not work!!! This is documented in the bash man page under command expansion. $(command) may also be used &lt;/li&gt;&lt;li&gt; Parameter expansion is used to extract the print name.    &lt;ul&gt;&lt;li&gt;The $ is used to indicate parameter expansion.   &lt;/li&gt;&lt;li&gt;The {} are used to separate parameter expansion.   &lt;/li&gt;&lt;li&gt;The first string or variable is the parameter and the second one is the expansion element   &lt;/li&gt;&lt;li&gt;If a # is used to separate parameter from element, the part of the element not matching the beginning of the parameter is kept.   &lt;/li&gt;&lt;li&gt;If a % is used the part of the element not matching the end of the parameter is kept. &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;If you copy this file or write it using DOS or windows, be sure all carriage returns have been stripped from the script file or it will not run right. Linux does not use carriage returns in files and many programs will not operate correctly when running files that have carriage returns in them. &lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;An example spooldata.conf file with the directory name in /var/spool listed first. The printer that the file is sent to is listed as the second argument on the line. &lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;pre class="indent"&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;print1 lp1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;print2 lp2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;print3 lp3&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-1388104522177812771?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/1388104522177812771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=1388104522177812771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1388104522177812771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1388104522177812771'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/script-programming-example-that-manages.html' title='Script Programming: An example that manages and reads files'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-1959849145593948880</id><published>2008-11-09T19:34:00.000-08:00</published><updated>2008-11-09T19:39:13.107-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='Example using Variables'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Script Programming: Example using Variables</title><content type='html'>&lt;p&gt; &lt;span style="font-weight: bold;"&gt;Adjust time program: &lt;/span&gt;&lt;/p&gt; &lt;pre class="indent"&gt;datenow=`date +%m%d%Y`&lt;br /&gt;month=`echo $datenow | cut -b1-2`&lt;br /&gt;day=`echo $datenow | cut -b3-4`&lt;br /&gt;year=`echo $datenow | cut -b5-8`&lt;br /&gt;echo $month-$day-$year:$1&lt;br /&gt;days=30&lt;br /&gt;adj=$1&lt;br /&gt;while [ $adj -gt 0 ]&lt;br /&gt;do&lt;br /&gt;  case $month in&lt;br /&gt;    04 | 06 | 09 | 11 | 4 | 6 | 9)&lt;br /&gt;     days=`expr 30`&lt;br /&gt;     ;;&lt;br /&gt;    02 | 2)&lt;br /&gt;     days=`expr 28`&lt;br /&gt;     ;;&lt;br /&gt;    * )&lt;br /&gt;     days=`expr 31`&lt;br /&gt;     ;;&lt;br /&gt;  esac&lt;br /&gt;  if [ $adj -ge $day ]; then&lt;br /&gt;     if [ $month -gt 1 ]; then&lt;br /&gt;#         month=`printf "%2d" $(expr $month - 1)`&lt;br /&gt;   month=`expr $month - 1`&lt;br /&gt;     else&lt;br /&gt;        year=`expr $year - 1`&lt;br /&gt;        month=12&lt;br /&gt;     fi&lt;br /&gt;     if [ $adj -ge $days ]; then&lt;br /&gt;        adj=`expr $adj - $days`&lt;br /&gt;     else&lt;br /&gt;  day1=$day&lt;br /&gt;        day=`expr $days + $day - $adj`&lt;br /&gt;        adj=0&lt;br /&gt;     fi&lt;br /&gt;  else&lt;br /&gt;     day=`expr $day - $adj`&lt;br /&gt;     adj=0&lt;br /&gt;  fi&lt;br /&gt;if [ `expr length $month` -lt 2 ]; then&lt;br /&gt; month=`echo 0$month`&lt;br /&gt;fi&lt;br /&gt;if [ `expr length $day` -lt 2 ]; then&lt;br /&gt; day=`echo 0$day`&lt;br /&gt;fi&lt;br /&gt;echo $month-$day-$year:$1:$adj&lt;br /&gt;done&lt;br /&gt;echo $month-$day-$year:$1:$adj&lt;br /&gt;yy=`echo $year | cut -b3-4`&lt;br /&gt;echo $month$day"0000"$yy&lt;br /&gt;touch $month$day0000$yy /tmp/time.then&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-1959849145593948880?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/1959849145593948880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=1959849145593948880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1959849145593948880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1959849145593948880'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/script-programming-example-using.html' title='Script Programming: Example using Variables'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-5155954392077266074</id><published>2008-11-09T19:32:00.000-08:00</published><updated>2008-11-09T19:42:22.677-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='An example looping script'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Script Programming: An example looping script</title><content type='html'>&lt;p&gt; The file below is an example file which demonstrates some of the testing as talked above along with several looping and control statements. &lt;/p&gt; &lt;pre class="indent"&gt;#! /bin/bash&lt;br /&gt;# Use the bash shell to run the script&lt;br /&gt;# This is an example file to take entries from the user&lt;br /&gt;# entries Version 1.0 May 22, 2000&lt;br /&gt;DONE=no&lt;br /&gt;ENTRIES="hello bye ls 1"&lt;br /&gt;while [ $DONE = no ]&lt;br /&gt;do&lt;br /&gt; echo Valid entries are: $ENTRIES&lt;br /&gt; read ENTRY         # Read the variable ENTRY from the user&lt;br /&gt; case $ENTRY in&lt;br /&gt; 1)&lt;br /&gt;     pwd&lt;br /&gt;     ;;&lt;br /&gt; hello)&lt;br /&gt;     echo How are you?&lt;br /&gt;     ;;&lt;br /&gt; bye)&lt;br /&gt;     echo exiting...&lt;br /&gt;     DONE=yes&lt;br /&gt;     ;;&lt;br /&gt; ls)&lt;br /&gt;     ls -al |more&lt;br /&gt;     ;;&lt;br /&gt; *)&lt;br /&gt;     echo $ENTRY is an unrecognized command.&lt;br /&gt;     ;;&lt;br /&gt; esac&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-5155954392077266074?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/5155954392077266074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=5155954392077266074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/5155954392077266074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/5155954392077266074'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/script-programming-example-looping.html' title='Script Programming: An example looping script'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-341328308407032524</id><published>2008-11-09T19:29:00.000-08:00</published><updated>2008-11-09T19:32:09.689-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shell Capabilities'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Script Programming: Shell Capabilities</title><content type='html'>&lt;h3&gt;Redirection&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&amp;lt; Open as stdin&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;gt; Open as stdout &lt;/li&gt;&lt;li&gt;&amp;lt;&amp;lt; Append to the file &lt;/li&gt;&lt;li&gt;| Pipe stdout into stdin &lt;/li&gt;&lt;/ul&gt;  &lt;h3&gt;Parameter Expansion&lt;/h3&gt; &lt;p&gt;  &lt;/p&gt;  &lt;h3&gt;Builtin functions&lt;/h3&gt; &lt;p&gt; Some Bash builtin functions used in script programs: &lt;/p&gt; &lt;ul&gt;&lt;li&gt;alias  &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-341328308407032524?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/341328308407032524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=341328308407032524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/341328308407032524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/341328308407032524'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/script-programming-shell-capabilities.html' title='Script Programming: Shell Capabilities'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-3899353545145346145</id><published>2008-11-09T19:25:00.000-08:00</published><updated>2008-11-09T19:29:15.325-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='commonly used programs'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Script Programming: Commonly used Programs in Linux Script files</title><content type='html'>&lt;p&gt; Some programs supporting script programming: &lt;/p&gt; &lt;ul&gt;&lt;li&gt;date &lt;/li&gt;&lt;li&gt;expr &lt;/li&gt;&lt;li&gt;find &lt;/li&gt;&lt;li&gt;cd &lt;/li&gt;&lt;li&gt;ls &lt;/li&gt;&lt;li&gt;pwd &lt;/li&gt;&lt;li&gt;mkdir &lt;/li&gt;&lt;li&gt;rmdir &lt;/li&gt;&lt;li&gt;cat &lt;/li&gt;&lt;li&gt;cp &lt;/li&gt;&lt;li&gt;csplit &lt;/li&gt;&lt;li&gt;ln &lt;/li&gt;&lt;li&gt;mv &lt;/li&gt;&lt;li&gt;rm &lt;/li&gt;&lt;li&gt;split &lt;/li&gt;&lt;li&gt;awk &lt;/li&gt;&lt;li&gt;cut &lt;/li&gt;&lt;li&gt;diff &lt;/li&gt;&lt;li&gt;grep &lt;/li&gt;&lt;li&gt;head &lt;/li&gt;&lt;li&gt;line &lt;/li&gt;&lt;li&gt;sed &lt;/li&gt;&lt;li&gt;tail &lt;/li&gt;&lt;li&gt;uniq &lt;/li&gt;&lt;li&gt;touch &lt;/li&gt;&lt;li&gt;wc &lt;/li&gt;&lt;li&gt;join &lt;/li&gt;&lt;li&gt;paste &lt;/li&gt;&lt;li&gt;sort &lt;/li&gt;&lt;li&gt;tr &lt;/li&gt;&lt;li&gt;pr &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-3899353545145346145?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/3899353545145346145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=3899353545145346145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3899353545145346145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3899353545145346145'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/script-programming-commonly-used.html' title='Script Programming: Commonly used Programs in Linux Script files'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-1997394860768029958</id><published>2008-11-09T19:22:00.000-08:00</published><updated>2008-11-09T19:25:11.903-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Control and Iteration'/><title type='text'>Script Programming: Control and Iteration</title><content type='html'>&lt;ul&gt;&lt;li&gt;if - Used to execute one or more statements on a condition.  An example: &lt;pre class="indent"&gt;if [ ! -d /mnt ]  # be sure the directory /mnt exists&lt;br /&gt;then&lt;br /&gt;  mkdir /mnt&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;case - Used to execute specific commands based on the value of a variable.  An example: &lt;pre class="indent"&gt;case $NUM&lt;br /&gt;1)&lt;br /&gt;  echo The number is 1&lt;br /&gt;  ;;&lt;br /&gt;2)&lt;br /&gt;  echo The number is 2&lt;br /&gt;  ;;&lt;br /&gt;*)&lt;br /&gt;  echo The number is not 1 or 2&lt;br /&gt;  ;;&lt;br /&gt;esac&lt;br /&gt;&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;for - Used to loop for all cases of a condition. In the example below, it is used to copy all files found in /mnt/floppy to the /etc directory. The lines were numbered for reference with descriptions: &lt;ol&gt;&lt;li&gt;The for loop statement will loop until all files have been found. &lt;/li&gt;&lt;li&gt;A test to be sure the file is a normal file and not a directory. &lt;/li&gt;&lt;li&gt;A comment line. &lt;/li&gt;&lt;li&gt;This line extracts the name of the file from its full path pointed to by the variable $i and puts it in the variable $filename. The method used here is called parameter expansion and is documented in the bash man page. For more information on parameter expansion read the "Linux Programmer's Guide". &lt;/li&gt;&lt;li&gt;This line sends a statement to the standard output, telling what file is being copied. &lt;/li&gt;&lt;li&gt;This line performs the copy command using the -p option to preserve file attributes. Note: Much ability to perform script programming is couched in the ability to know and use the various commands, programs and tools available in Linux rather than a strict understanding of syntax. This is obvious to anyone who reads the system startup script files in /etc/rc.d and associated directories. &lt;/li&gt;&lt;li&gt;This line ends the if statement. &lt;/li&gt;&lt;li&gt;This line ends the for statement. &lt;/li&gt;&lt;/ol&gt; &lt;pre class="indent"&gt;1.  for i in /mnt/floppy/*; do&lt;br /&gt;2.     if [ -f $i ]; then&lt;br /&gt;3.     # if the file is there&lt;br /&gt;4.        filename=${i#/mnt/floppy/}&lt;br /&gt;5.        echo copying $i to /etc/$filename&lt;br /&gt;6.        cp -p $i /etc/$filename&lt;br /&gt;7.     fi&lt;br /&gt;8.  done&lt;br /&gt;&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;until - Cycles through a loop until some condition is met.  The syntax for the command is shown below: &lt;pre class="indent"&gt;until [ expression ]&lt;br /&gt;do&lt;br /&gt;  statements&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;while - Cycles through a loop while some condition is met.  The below example will cycle through a loop forever: &lt;pre class="indent"&gt;while [ 1 ]&lt;br /&gt;do&lt;br /&gt;  statement(s)&lt;br /&gt;done&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-1997394860768029958?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/1997394860768029958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=1997394860768029958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1997394860768029958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1997394860768029958'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/script-programming-control-and.html' title='Script Programming: Control and Iteration'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-6425421061148304589</id><published>2008-11-09T19:19:00.002-08:00</published><updated>2008-11-09T19:41:17.924-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Test Conditions'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Script Programming: Linux Script Test Conditions</title><content type='html'>&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="100%"&gt;&lt;p&gt; There is a function provided by bash called test which returns a true or false value depending on the result of the tested expression. Its syntax is: &lt;/p&gt; &lt;p class="indent"&gt; test expression &lt;/p&gt; &lt;p&gt; It can also be implied as follows: &lt;/p&gt; &lt;p class="indent"&gt; [ expression ] &lt;/p&gt; &lt;p&gt; The tests below are test conditions provided by the shell: &lt;/p&gt; &lt;ul&gt;&lt;li&gt;-b file = True if the file exists and is block special file. &lt;/li&gt;&lt;li&gt;-c file = True if the file exists and is character special file. &lt;/li&gt;&lt;li&gt;-d file = True if the file exists and is a directory. &lt;/li&gt;&lt;li&gt;-e file = True if the file exists. &lt;/li&gt;&lt;li&gt;-f file = True if the file exists and is a regular file &lt;/li&gt;&lt;li&gt;-g file = True if the file exists and the set-group-id bit is set. &lt;/li&gt;&lt;li&gt;-k file = True if the files' "sticky" bit is set. &lt;/li&gt;&lt;li&gt;-L file = True if the file exists and is a symbolic link. &lt;/li&gt;&lt;li&gt;-p file = True if the file exists and is a named pipe. &lt;/li&gt;&lt;li&gt;-r file = True if the file exists and is readable. &lt;/li&gt;&lt;li&gt;-s file = True if the file exists and its size is greater than zero. &lt;/li&gt;&lt;li&gt;-s file = True if the file exists and is a socket. &lt;/li&gt;&lt;li&gt;-t fd  = True if the file descriptor is opened on a terminal. &lt;/li&gt;&lt;li&gt;-u file = True if the file exists and its set-user-id bit is set. &lt;/li&gt;&lt;li&gt;-w file = True if the file exists and is writable. &lt;/li&gt;&lt;li&gt;-x file = True if the file exists and is executable. &lt;/li&gt;&lt;li&gt;-O file = True if the file exists and is owned by the effective user id. &lt;/li&gt;&lt;li&gt;-G file = True if the file exists and is owned by the effective group id. &lt;/li&gt;&lt;li&gt;file1 –nt file2 = True if file1 is newer, by modification date, than file2. &lt;/li&gt;&lt;li&gt;file1 ot file2 = True if file1 is older than file2. &lt;/li&gt;&lt;li&gt;file1 ef file2 = True if file1 and file2 have the same device and inode numbers. &lt;/li&gt;&lt;li&gt;-z string = True if the length of the string is 0. &lt;/li&gt;&lt;li&gt;-n string = True if the length of the string is non-zero. &lt;/li&gt;&lt;li&gt;string1 = string2 = True if the strings are equal. &lt;/li&gt;&lt;li&gt;string1 != string2 = True if the strings are not equal. &lt;/li&gt;&lt;li&gt;!expr = True if the expr evaluates to false. &lt;/li&gt;&lt;li&gt;expr1 –a expr2 = True if both expr1 and expr2 are true. &lt;/li&gt;&lt;li&gt;expr1 –o expr2 = True is either expr1 or expr2 is true. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; The syntax is : &lt;/p&gt; &lt;p class="indent"&gt; arg1 OP arg2 &lt;/p&gt; &lt;/td&gt;&lt;td valign="top"&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;where OP is one of –eq, -ne, -lt, -le, -gt, or –ge. Arg1 and arg2 may be positive or negative integers or the special expression "-l string" which evaluates to the length of string. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-6425421061148304589?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/6425421061148304589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=6425421061148304589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/6425421061148304589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/6425421061148304589'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/linux-script-test-conditions.html' title='Script Programming: Linux Script Test Conditions'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-5491204221066216259</id><published>2008-11-09T19:19:00.001-08:00</published><updated>2008-11-09T19:27:07.390-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Variables'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Script Programming: Linux Script Variables</title><content type='html'>&lt;p&gt; When variables are used they are referred to with the $ symbol in front of them. There are several useful variables available in the shell program. Here are a few: &lt;/p&gt; &lt;ul&gt;&lt;li&gt;$$ = The PID number of the process executing the shell. &lt;/li&gt;&lt;li&gt;$? = Exit status variable. &lt;/li&gt;&lt;li&gt;$0 = The name of the command you used to call a program. &lt;/li&gt;&lt;li&gt;$1 = The first argument on the command line. &lt;/li&gt;&lt;li&gt;$2 = The second argument on the command line. &lt;/li&gt;&lt;li&gt;$n = The nth argument on the command line. &lt;/li&gt;&lt;li&gt;$* = All the arguments on the command line. &lt;/li&gt;&lt;li&gt;$# The number of command line arguments. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The "shift" command can be used to shift command line arguments to the left, ie $1 becomes the value of $2, $3 shifts into $2, etc. The command, "shift 2" will shift 2 places meaning the new value of $1 will be the old value of $3 and so forth. &lt;/p&gt; &lt;h3&gt;Variable assignment&lt;/h3&gt; &lt;p&gt; Variables are assigned in a script program as follows: &lt;/p&gt; &lt;p class="indent"&gt; DONE=no &lt;/p&gt; &lt;p&gt; They are used in this manner: &lt;/p&gt; &lt;p class="indent"&gt; while [ $DONE = no ]&lt;br /&gt;&lt;/p&gt;&lt;p class="indent"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-5491204221066216259?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/5491204221066216259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=5491204221066216259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/5491204221066216259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/5491204221066216259'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/linux-script-variables.html' title='Script Programming: Linux Script Variables'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-5616394146212128298</id><published>2008-11-09T19:17:00.000-08:00</published><updated>2008-11-09T19:18:43.986-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Script Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Linux Script Programming</title><content type='html'>&lt;p&gt; Script programming is highly dependent upon the operating system shell such as bash along with the various functions (programs) installed on the system. Script programming in this section is mainly about the bash shell. The knowledge required to write script programs can be categorized into the following areas: &lt;/p&gt; &lt;ol&gt;&lt;li&gt;Working with variables &lt;/li&gt;&lt;li&gt;Using control and iteration statements such as "if", "while", and "until". &lt;/li&gt;&lt;li&gt;Performing test condition comparisons and what they mean. &lt;/li&gt;&lt;li&gt;Using programs installed on the system in script programs. &lt;/li&gt;&lt;li&gt;Using the shell capabilities:  &lt;ol&gt;&lt;li&gt;Builtin commands  &lt;/li&gt;&lt;li&gt;redirection and piping  &lt;/li&gt;&lt;li&gt;parameter expansion  &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-5616394146212128298?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/5616394146212128298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=5616394146212128298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/5616394146212128298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/5616394146212128298'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/linux-script-programming.html' title='Linux Script Programming'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-9028594592391792958</id><published>2008-11-09T19:09:00.000-08:00</published><updated>2008-11-09T19:16:06.528-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='Introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Introduction</title><content type='html'>&lt;h3 style="text-align: justify;"&gt;Static Definition&lt;/h3&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;  &lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;h3 style="text-align: justify;"&gt;Blocking Definition&lt;/h3&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt; A blocking function is one which will pause until the criteria of the function is met. A non-blocking function will perform the operation requested if possible, but will not wait until the function is possible to carry out. An example is the reading of a port. If a blocking instruction tries to read from a port and no data is available, it will wait or block. If data is available, it will perform the read. If a non-blocking instruction tries to read a port, if no data is available, it will normally return an error or status indicator and allow the program to continue. &lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;This section will start with a description of the Portable Operating System Interface (POSIX). The reason for the POSIX standards is to make source code portable between various operating system platforms. The POSIX standards are produced by the Institute of Electrical and Electronics Engineers (IEEE). The standards are standardized by the &lt;a href="http://www.iso.ch/"&gt;International Organization for Standardization (ISO) &lt;/a&gt; and &lt;a href="http://www.ansi.org/"&gt;American National Standards Institute (ANSI)&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: justify;" class="center"&gt;&lt;h3&gt;POSIX Numbering&lt;/h3&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;div style="text-align: justify;" class="center"&gt;&lt;table style="text-align: left; margin-left: 0px; margin-right: 0px;" cellspacing="10" rules="all"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;standard&lt;/td&gt;&lt;td&gt;New Document #&lt;/td&gt;&lt;td&gt;ISO Number&lt;/td&gt;&lt;td&gt;Description&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.1&lt;/td&gt;&lt;td&gt;1003.1&lt;/td&gt;&lt;td&gt;ISO 9945-1&lt;/td&gt;&lt;td&gt;Basic Interfaces&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.1a&lt;/td&gt;&lt;td&gt;1003.1&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Extensions&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.2&lt;/td&gt;&lt;td&gt;1003.1&lt;/td&gt;&lt;td&gt;ISO &lt;/td&gt;&lt;td&gt;Commands&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.3&lt;/td&gt;&lt;td&gt;1003.1&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Test methods&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.4&lt;/td&gt;&lt;td&gt;1003.1b&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Real time&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.4a&lt;/td&gt;&lt;td&gt;1003.1c&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Threads&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.4b&lt;/td&gt;&lt;td&gt;1003.1d&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;More Real time&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.5&lt;/td&gt;&lt;td&gt;1003.1&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ADA Binding&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.6&lt;/td&gt;&lt;td&gt;1003.1e&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Security&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.7&lt;/td&gt;&lt;td&gt;1003.1&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;System Administration&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.8&lt;/td&gt;&lt;td&gt;1003.1f&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Network File Access&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.9&lt;/td&gt;&lt;td&gt;1003.1&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Fortran-77 Binding&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.10&lt;/td&gt;&lt;td&gt;1003.1&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Supercomputing&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.12&lt;/td&gt;&lt;td&gt;1003.1g&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Sockets&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.13&lt;/td&gt;&lt;td&gt;1003.1&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Real Time Profiles&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.15&lt;/td&gt;&lt;td&gt;1003.1&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Batch/supercomputer extensions&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;POSIX.17&lt;/td&gt;&lt;td&gt;IEEE 1224.2&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Network Directory/name services&lt;/td&gt;&lt;/tr&gt;  &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt; POSIX depends on:&lt;br /&gt;&lt;/p&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;A compiler &lt;/li&gt;&lt;li&gt;Headers usually in /usr/include &lt;/li&gt;&lt;li&gt;Libraries &lt;/li&gt;&lt;li&gt;An operating system that supports real time applications &lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;h3 style="text-align: justify;"&gt;POSIX Functionality&lt;/h3&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt; POSIX.1 Options&lt;br /&gt;&lt;/p&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;_POSIX_JOB_CONTROL - setpgid, tcgetgrp, tcsetpgrp &lt;/li&gt;&lt;li&gt;_POSIX_CHOWN_RESTRICTED - The ability to do a chown function is more restrictive &lt;/li&gt;&lt;li&gt;_POSIX_SAVED_IDS - A saved set-user-id and set-group-id are maintained by processes.  Affects setgid, kill, fork, and setuid. &lt;/li&gt;&lt;li&gt;_POSIX_NO_TRUNC - Pathnames that are too long are not truncated but cause an error. &lt;/li&gt;&lt;li&gt;_POSIX_VDISABLE - Some special terminal characters can be disabled. &lt;/li&gt;&lt;li&gt;NGROUPS_MAX - Supplementary group IDs for each process can exist which may help determine file access permission. &lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt; POSIX.4 - The first item is required for POSIX.4 and the rest are options &lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Real time queued signals. SA_SIGINFO, SIGRTMIN, SIGRTMAX &lt;/li&gt;&lt;li&gt;_POSIX_REALTIME_SIGNALS - sigtimedwait, sigqueus, sigwaitinfo &lt;/li&gt;&lt;li&gt;_POSIX_PRIORITY_SCHEDULING - sched_getparam, sched_setparam, sched_getscheduler, sched_setscheduler, sched_rr_get_interval, sched_get_priority_min, sched_get_priority_max, sched_yield &lt;/li&gt;&lt;li&gt;_POSIX_TIMERS - clock_gettime, clock_settime, timer_gettime, timer_settime,clock_getres, timer_create, timer_delete, timer_getoverrun, nanosleep &lt;/li&gt;&lt;li&gt;_POSIX_ASYNCHRONOUS_IO - air_read, air_write, aio_error, aio_fsync, aio_cancel, aio_return, aio_suspend, lio_listio &lt;/li&gt;&lt;li&gt;_POSIX_PRIORITIZED_IO - Sets priorities for asynchronous I/O &lt;/li&gt;&lt;li&gt;_POSIX_SYNCHRONIZED_IO - If _POSIX_MAPPED_FILES (msync, fdatasync). &lt;/li&gt;&lt;li&gt;_POSIX_FSYNC - fsync &lt;/li&gt;&lt;li&gt;_POSIX_MAPPED_FILES - If _POSIX_SYNCHRONIZED_IO (mmap, munmap, msync, ftruncate) &lt;/li&gt;&lt;li&gt;_POSIX_MEMLOCK - mlockall, munlockall &lt;/li&gt;&lt;li&gt;_POSIX_MEMLOCK_RANGE - mlock, munlock &lt;/li&gt;&lt;li&gt;_POSIX_MEMORY_PROTECTION - mprotect &lt;/li&gt;&lt;li&gt;_POSIX_MESSAGE_PASSING - mq_getattr, mqset_attr, mq_open, mq_close, mq_notify, mq_send, mq_receive, mq_unlink &lt;/li&gt;&lt;li&gt;_POSIX_SEMAPHORES - sem_close, sem_destroy, sem_init, sem_open, sem_trywait, sem_unlink, sem_wait, sem_getvalue, sem_post. &lt;/li&gt;&lt;li&gt;_POSIX_SHARED_MEMORY_OBJECTS - mmap, munmap, sbm_close, sbm_open, ftruncate, sbm_unlink.  &lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt; The line: &lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;" class="indent"&gt; &lt;span style="color: rgb(0, 0, 153);"&gt;#define _POSIX_SOURCE &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt; Indicates that the program is POSIX.1 compliant, the 1990 version of POSIX.  The line: &lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="color: rgb(0, 0, 153); text-align: justify;" class="indent"&gt; #define _POSIX_C_SOURCE 199309 &lt;/p&gt;&lt;div style="text-align: justify;"&gt;  Indicates the program is POSIX.4 compliant.  These lines mean only POSIX functions and symbols are used.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-9028594592391792958?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/9028594592391792958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=9028594592391792958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/9028594592391792958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/9028594592391792958'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/introduction.html' title='Introduction'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-8107104292210973331</id><published>2008-11-08T23:28:00.000-08:00</published><updated>2008-11-10T09:37:30.360-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man'/><category scheme='http://www.blogger.com/atom/ns#' term='man page'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='shmdt()'/><category scheme='http://www.blogger.com/atom/ns#' term='shmat()'/><category scheme='http://www.blogger.com/atom/ns#' term='shmat'/><category scheme='http://www.blogger.com/atom/ns#' term='manual for shmat'/><title type='text'>Man page - shmat, shmat, shmdt</title><content type='html'>&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;       shmop, shmat, shmdt - shared memory operations&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;       #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;       #include &amp;lt;sys/shm.h&amp;gt;&lt;br /&gt;&lt;br /&gt;       void *shmat(int shmid, const void *shmaddr, int shmflg);&lt;br /&gt;&lt;br /&gt;       int shmdt(const void *shmaddr);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;       shmat()  attaches  the shared memory segment identified by shmid to the&lt;br /&gt;       address space of the calling process.  The attaching address is  speci‐&lt;br /&gt;       fied by shmaddr with one of the following criteria:&lt;br /&gt;&lt;br /&gt;       If  shmaddr  is NULL, the system chooses a suitable (unused) address at&lt;br /&gt;       which to attach the segment.&lt;br /&gt;&lt;br /&gt;       If shmaddr isn’t NULL and SHM_RND is specified in  shmflg,  the  attach&lt;br /&gt;       occurs at the address equal to shmaddr rounded down to the nearest mul‐&lt;br /&gt;       tiple of SHMLBA.  Otherwise shmaddr must be a page-aligned  address  at&lt;br /&gt;       which the attach occurs.&lt;br /&gt;&lt;br /&gt;       If SHM_RDONLY is specified in shmflg, the segment is attached for read‐&lt;br /&gt;       ing and the process must have read permission for the segment.   Other‐&lt;br /&gt;       wise  the  segment  is attached for read and write and the process must&lt;br /&gt;       have read and write permission for the segment.  There is no notion  of&lt;br /&gt;       a write-only shared memory segment.&lt;br /&gt;&lt;br /&gt;       The (Linux-specific) SHM_REMAP flag may be specified in shmflg to indi‐&lt;br /&gt;       cate that the mapping of the segment should replace any  existing  map‐&lt;br /&gt;       ping  in  the  range starting at shmaddr and continuing for the size of&lt;br /&gt;       the segment.  (Normally an EINVAL  error  would  result  if  a  mapping&lt;br /&gt;       already  exists in this address range.)  In this case, shmaddr must not&lt;br /&gt;       be NULL.&lt;br /&gt;&lt;br /&gt;       The brk(2) value of the calling process is not altered by  the  attach.&lt;br /&gt;       The  segment  will automatically be detached at process exit.  The same&lt;br /&gt;       segment may be attached as a read and as a  read-write  one,  and  more&lt;br /&gt;       than once, in the process’s address space.&lt;br /&gt;&lt;br /&gt;       A successful shmat() call updates the members of the shmid_ds structure&lt;br /&gt;       (see shmctl(2)) associated with the shared memory segment as follows:&lt;br /&gt;&lt;br /&gt;              shm_atime is set to the current time.&lt;br /&gt;&lt;br /&gt;              shm_lpid is set to the process-ID of the calling process.&lt;br /&gt;&lt;br /&gt;              shm_nattch is incremented by one.&lt;br /&gt;&lt;br /&gt;       shmdt() detaches the shared memory segment located at the address spec‐&lt;br /&gt;       ified  by  shmaddr  from the address space of the calling process.  The&lt;br /&gt;       to-be-detached segment must be currently attached with shmaddr equal to&lt;br /&gt;       the value returned by the attaching shmat() call.&lt;br /&gt;&lt;br /&gt;       On  a  successful  shmdt()  call  the system updates the members of the&lt;br /&gt;       shmid_ds structure associated with the shared memory  segment  as  fol‐&lt;br /&gt;       lows:&lt;br /&gt;&lt;br /&gt;              shm_dtime is set to the current time.&lt;br /&gt;&lt;br /&gt;              shm_lpid is set to the process-ID of the calling process.&lt;br /&gt;&lt;br /&gt;              shm_nattch  is decremented by one.  If it becomes 0 and the seg‐&lt;br /&gt;              ment is marked for deletion, the segment is deleted.&lt;br /&gt;&lt;br /&gt;       After a fork(2) the child inherits the attached shared memory segments.&lt;br /&gt;&lt;br /&gt;       After  an  execve(2)  all  attached shared memory segments are detached&lt;br /&gt;       from the process.&lt;br /&gt;&lt;br /&gt;       Upon _exit(2) all attached shared memory segments are detached from the&lt;br /&gt;       process.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RETURN&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;VALUE&lt;/span&gt;&lt;br /&gt;       On  success  shmat()  returns the address of the attached shared memory&lt;br /&gt;       segment; on error (void *) -1 is returned, and errno is set to indicate&lt;br /&gt;       the cause of the error.&lt;br /&gt;&lt;br /&gt;       On success shmdt() returns 0; on error -1 is returned, and errno is set&lt;br /&gt;       to indicate the cause of the error.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;       When shmat() fails, errno is set to one of the following:&lt;br /&gt;&lt;br /&gt;       EACCES The calling process does not have the required  permissions  for&lt;br /&gt;              the  requested  attach type, and does not have the CAP_IPC_OWNER&lt;br /&gt;              capability.&lt;br /&gt;&lt;br /&gt;       EINVAL Invalid shmid  value,  unaligned  (i.e.,  not  page-aligned  and&lt;br /&gt;              SHM_RND  was  not  specified) or invalid shmaddr value, or can’t&lt;br /&gt;              attach segment  at  shmaddr,  or  SHM_REMAP  was  specified  and&lt;br /&gt;              shmaddr was NULL.&lt;br /&gt;&lt;br /&gt;       ENOMEM Could  not  allocate  memory  for the descriptor or for the page&lt;br /&gt;              tables.&lt;br /&gt;&lt;br /&gt;       When shmdt() fails, errno is set as follows:&lt;br /&gt;&lt;br /&gt;       EINVAL There is no shared  memory  segment  attached  at  shmaddr;  or,&lt;br /&gt;              shmaddr is not aligned on a page boundary.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CONFORMING&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;TO&lt;/span&gt;&lt;br /&gt;       SVr4, POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;       In  SVID  3  (or  perhaps earlier) the type of the shmaddr argument was&lt;br /&gt;       changed from char * into const void *, and the returned type of shmat()&lt;br /&gt;       from char * into void *.  (Linux libc4 and libc5 have the char * proto‐&lt;br /&gt;       types; glibc2 has void *.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTES&lt;/span&gt;&lt;br /&gt;       Using shmat() with shmaddr equal to NULL is the preferred, portable way&lt;br /&gt;       of  attaching a shared memory segment.  Be aware that the shared memory&lt;br /&gt;       segment attached in this way may be attached at different addresses  in&lt;br /&gt;       different  processes.   Therefore,  any  pointers maintained within the&lt;br /&gt;       shared memory must be made relative (typically to the starting  address&lt;br /&gt;       of the segment), rather than absolute.&lt;br /&gt;&lt;br /&gt;       On  Linux,  it is possible to attach a shared memory segment even if it&lt;br /&gt;       is already marked to be deleted.  However, POSIX.1-2001 does not  spec‐&lt;br /&gt;       ify this behavior and many other implementations do not support it.&lt;br /&gt;&lt;br /&gt;       The following system parameter affects shmat():&lt;br /&gt;&lt;br /&gt;       SHMLBA     Segment   low  boundary  address  multiple.   Must  be  page&lt;br /&gt;                  aligned.  For the current implementation the SHMLBA value is&lt;br /&gt;                  PAGE_SIZE.&lt;br /&gt;&lt;br /&gt;       The implementation places no intrinsic limit on the per-process maximum&lt;br /&gt;       number of shared memory segments (SHMSEG).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SEE&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;ALSO&lt;/span&gt;&lt;br /&gt;       brk(2), mmap(2), shmctl(2), shmget(2), capabilities(7), svipc(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-8107104292210973331?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/8107104292210973331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=8107104292210973331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/8107104292210973331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/8107104292210973331'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-shmat.html' title='Man page - shmat, shmat, shmdt'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-1587696589758855145</id><published>2008-11-08T06:51:00.000-08:00</published><updated>2008-11-08T23:17:43.285-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips on improving Programming Logic'/><category scheme='http://www.blogger.com/atom/ns#' term='linuxprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Tips on improving Programming Logic</title><content type='html'>&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="text-align: justify;"&gt;A lot of colleagues, friends and strangers (that I meet in meetups, etc) have asked me to explain how can they improve their programming logic.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Though programming is mainly associated with the field of Computer Science, but writing good and optimized code is mainly an art. Like all art forms requires tremendous patience and rigorous practice, building gray cells for programming logic is not much different.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I present this post/article to you on how you could too improve your programming logic.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;Tip 1: Learn the language ‘C’&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;You might be an expert .NET, Java or PHP developer, but I would recommend that you &lt;strong&gt;MUST&lt;/strong&gt; learn ‘C. We all know why ‘C’ is the most powerful programming language, but I am not recommending learning ‘C’ to you because of its power in programming.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;‘C’ offers you a structured style of programming. You have one file with the main() method and the execution begins from there and the execution flow proceeds as you have directed it to.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;The main advantage in ‘C’ is that it allows you to play around with memory directly. This I believe is very important if you need to understand how data is passed from one memory block to another. The reason is that you start to visualize in your minds eye how data moves in your program.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;The next step is to develop programs that will help you improve your logic.&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Tip 2: Develop programs that test your mind skills &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Ever heard of the Fibonacci series?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Ever built a program that will allow the user to type his/her name and allow to bounce off that name on the screen from one corner to another like a ball?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Ever thought of creating a library for a Menu Bar system?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;All these are examples of programs that you can develop to improve your mind and programming skills.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;I remember the time I was at college and I would spends nights after nights to build my own library for screen interface for menu bars, windows, text fields, etc. In a UNIX box I would use the ncurses library and build it. I would then try and replicate the same in Windows using the conio.h file and some assembly code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Try to develop as many programs as possible in ‘C’, this will help you improve your programming logic.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Following are some programs that I can help you with:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol start="1" type="1"&gt;&lt;li class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Write      a program (WAP) to find the max, min, average and total of numbers entered      by the user&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;WAP      to accept a string from the user and find the number of vowels and the      vowels that got repeated the most.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;WAP      to accept an array of numbers and sort the same using Bubble Sort      Algorithm.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;WAP      to accept a string from the user and print all its permutations and      combinations.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;WAP      to accept to accept a number from the user and test if it is a Fibonacci      number or not.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;I can go on and on with such questions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Tip 3: Locate code and try to understand why it was written that way&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Use the internet or college library to locate code written by another developer. Try to understand why it was written that way and understand it completely. Once you have understood why it was written they way it is written, check to see if you could improve that logic.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;The main objective of this exercise is to get your brain thinking.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;Tip 4: Solve logic puzzles &lt;/strong&gt;Check your local newspaper. One section of your newspaper will be filled with series of logic puzzles and riddles. Try solving them. Don’t get disheartened if you can’t solve them or take a long time to solve them. Remember that you are in the learning and improving stage. Things will be slow, but you will make progress.Your brain will be trained to think differently with every puzzle that you try to solve. This is because now you know a new method of solving. You could apply the same thinking pattern to your programs as well.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;As a standard prescription, I would prescribe solving Suduku puzzles. Will help you improve your logic, concentration and skills of grouping and organizing.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;Tip 5: Help other people build logic&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Once you start feeling confident about yourself and your logic capabilities, you should immediately start helping people. Subscribe to a forum and start helping people there. The benefit of helping people on forums is that you get to learn new problems that people face. This immensely adds to your knowledge. Just imagine the power you would have once you start to learn problems faced by other people and how you or someone else resolved it.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I have seen friends following this advice but shying at the last moment. Why? Because they don’t want to be ridiculed in the forum. Don’t be scared of other people ridiculing you. Look at it as a learning experience. People who ridicule you would be the one’s with more experience… and learning from people who are experienced is no harm at all.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I hope this article was helpful to you.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-1587696589758855145?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/1587696589758855145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=1587696589758855145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1587696589758855145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1587696589758855145'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/tips-on-improving-programming-logic.html' title='Tips on improving Programming Logic'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-8451010586406868172</id><published>2008-11-08T06:49:00.001-08:00</published><updated>2008-11-08T23:20:09.973-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='skills every programmer must learn'/><category scheme='http://www.blogger.com/atom/ns#' term='linuxprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>5 skills every programmer must learn</title><content type='html'>&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;p style="text-align: justify;"&gt;You might be the best programmer with an unbeatable logic, but there are some skills that you must obtain before it is too late.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;As your age picks up, it is a bit difficult to catch up with so many technical advancements and languages that you can do when you are young. But as your grow up, your preferences would change and so would your likes towards programming and development. You slowly will look at managing than developing. You would aim to become a Project Manager or a Delivery Manager or a Vice President of a corporation. At this level programming skills become less relevant and other managerial skills become more important.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Once you reach that level, it is necessary to have some managerial skills to prove yourself in the area of management as well. Following are the skills that I feel that every programmer should aim at to grow up the corporate ladder.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;1. Communication skills&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Once you become a manage or start to lead a team, having good communication skills is very important. Both written and verbal. Communication is a two way process. You should learn to speak effectively and also listen. The first step is to improve your English language skills. Read this article on &lt;a href="http://www.careercurry.com/article/how-to-learn-and-improve-english" target="_blank" title="How to learn and improve English"&gt;How to learn and improve English&lt;/a&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;2. Inter-personal skills&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Inter-personal skills is the manner in which you deal and interact with others people. These people could be your clients, team mates, colleagues, seniors or your friends.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I have been a programmer myself and understand what it means to have an ‘Ego’ and ‘Shyness’. Shed these two attributes and treat each individual as you would want them to treat you. This will not only help you gain more friends, but you will also be easily accepted in various groups.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;3. Time Management Skills&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Like all other skills, this is also important and cannot be left aside. Every individual has 24 hours in a day. The key part of that skill is how to manage those 24 hours. We are always bombarded with work and family responsibilities. The skill is how to manage the show properly and stike a good balance to achieve all priority tasks.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I personally recommend reading the section on Time management from 7 habits of highly effective people by Steven Covey. He mentions that you should learn to schedule your priority rather than prioritize your schedule. A must read.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;4. Task management skills&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;This skill becomes very important once you elevate yourself from being a programmer to a manager. You should learn to keep track of various tasks, not only for yourself but also of your team members.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;The first step is to manage your tasks well when you are a programmer. To manage tasks you should take notes when you are given a task. Maintain a book/calender where you jot down your tasks and prioritize them. Once you complete a task; strike it off. Follow this process and it will automatically become a habit.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;5. Presentation Skills&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Another important skill to possess is presentation skills. As your experience grows and you start designing applications, your corporation would want you to present development ideas to clients or members of another team. You could also be asked to train internal people in skills that you are good at. In situations like these you should have good presentation skills.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Presentation skills does not get improved in a day. It requires a series of miserable failures to succeed. You should feel comfortable standing in front of a large group of people to deliver a good presentation. I would recommend that you seek opportunities withing your corporation to train people and help improve your presentation skills.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I recommend reading this article on &lt;a href="http://www.careercurry.com/article/how-to-power-up-your-presentation" target="_blank" title="How to power up your presentation"&gt;How to power your presentation&lt;/a&gt;.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br /&gt;All these skills mentioned above require a considerable amount of time, practice and failing to master. I would recommend that you start now. If you feel shy or are nervous standing in front of people and presenting, then I recommend that you seek opportunity with your current company to present an idea to a group of people or seek opportunity to train internal people; which will help you eliminate your fear of public speaking.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;No matter what, don’t worry at all of what your friends or colleagues would think about you. They might mock at you or insult you, don’t worry at all. Over the next 5 years you probably wont meet them at all… so what are you scared of.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Learn, practice and improve… Best of Luck!!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-8451010586406868172?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/8451010586406868172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=8451010586406868172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/8451010586406868172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/8451010586406868172'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/5-skills-every-programmer-must-learn_08.html' title='5 skills every programmer must learn'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-4854230181446221576</id><published>2008-11-08T06:49:00.000-08:00</published><updated>2008-11-08T06:51:39.234-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='skills every programmer must learn'/><category scheme='http://www.blogger.com/atom/ns#' term='linuxprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>5 skills every programmer must learn</title><content type='html'>&lt;p style="text-align: justify;"&gt;You might be the best programmer with an unbeatable logic, but there are some skills that you must obtain before it is too late.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;As your age picks up, it is a bit difficult to catch up with so many technical advancements and languages that you can do when you are young. But as your grow up, your preferences would change and so would your likes towards programming and development. You slowly will look at managing than developing. You would aim to become a Project Manager or a Delivery Manager or a Vice President of a corporation. At this level programming skills become less relevant and other managerial skills become more important.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Once you reach that level, it is necessary to have some managerial skills to prove yourself in the area of management as well. Following are the skills that I feel that every programmer should aim at to grow up the corporate ladder.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;1. Communication skills&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Once you become a manage or start to lead a team, having good communication skills is very important. Both written and verbal. Communication is a two way process. You should learn to speak effectively and also listen. The first step is to improve your English language skills. Read this article on &lt;a href="http://www.careercurry.com/article/how-to-learn-and-improve-english" target="_blank" title="How to learn and improve English"&gt;How to learn and improve English&lt;/a&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;2. Inter-personal skills&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Inter-personal skills is the manner in which you deal and interact with others people. These people could be your clients, team mates, colleagues, seniors or your friends.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I have been a programmer myself and understand what it means to have an ‘Ego’ and ‘Shyness’. Shed these two attributes and treat each individual as you would want them to treat you. This will not only help you gain more friends, but you will also be easily accepted in various groups.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;3. Time Management Skills&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Like all other skills, this is also important and cannot be left aside. Every individual has 24 hours in a day. The key part of that skill is how to manage those 24 hours. We are always bombarded with work and family responsibilities. The skill is how to manage the show properly and stike a good balance to achieve all priority tasks.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I personally recommend reading the section on Time management from 7 habits of highly effective people by Steven Covey. He mentions that you should learn to schedule your priority rather than prioritize your schedule. A must read.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;4. Task management skills&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;This skill becomes very important once you elevate yourself from being a programmer to a manager. You should learn to keep track of various tasks, not only for yourself but also of your team members.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;The first step is to manage your tasks well when you are a programmer. To manage tasks you should take notes when you are given a task. Maintain a book/calender where you jot down your tasks and prioritize them. Once you complete a task; strike it off. Follow this process and it will automatically become a habit.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;5. Presentation Skills&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Another important skill to possess is presentation skills. As your experience grows and you start designing applications, your corporation would want you to present development ideas to clients or members of another team. You could also be asked to train internal people in skills that you are good at. In situations like these you should have good presentation skills.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Presentation skills does not get improved in a day. It requires a series of miserable failures to succeed. You should feel comfortable standing in front of a large group of people to deliver a good presentation. I would recommend that you seek opportunities withing your corporation to train people and help improve your presentation skills.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I recommend reading this article on &lt;a href="http://www.careercurry.com/article/how-to-power-up-your-presentation" target="_blank" title="How to power up your presentation"&gt;How to power your presentation&lt;/a&gt;.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br /&gt;All these skills mentioned above require a considerable amount of time, practice and failing to master. I would recommend that you start now. If you feel shy or are nervous standing in front of people and presenting, then I recommend that you seek opportunity with your current company to present an idea to a group of people or seek opportunity to train internal people; which will help you eliminate your fear of public speaking.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;No matter what, don’t worry at all of what your friends or colleagues would think about you. They might mock at you or insult you, don’t worry at all. Over the next 5 years you probably wont meet them at all… so what are you scared of.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Learn, practice and improve… Best of Luck!!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-4854230181446221576?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/4854230181446221576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=4854230181446221576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/4854230181446221576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/4854230181446221576'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/5-skills-every-programmer-must-learn.html' title='5 skills every programmer must learn'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-8368094071386911843</id><published>2008-11-08T06:44:00.001-08:00</published><updated>2008-11-08T06:49:46.062-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='common programming mistakes to avoid'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='linuxprogramminginc'/><category scheme='http://www.blogger.com/atom/ns#' term='linuxprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Twelve common programming mistakes to avoid</title><content type='html'>&lt;p style="text-align: justify;"&gt;Programming is an art and science and like all art and science the only way to learn is from mistakes. I have made many… and I would like to share with you the mistakes that I have made over my journey with development.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;These are some of the most common programming mistakes made by developers (including me) and how to avoid them (not listed in any specific order)&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;1. Improper or No comments&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Can you imagine a program without comments. Just imagine how difficult it would be to read someone else’s code without comments. The reason why we as developers miss out on comments is because when we write code, we are so engrossed in developing logic that we forget this essential step. I recommend that let you develop with the flow of logic that you have and plug in comments after you finish coding. Write comments for any and all complicated logic and SQL queries. Comments will help you a long way in reviewing your code.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;2. Not reviewing your code&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Once you get that big ‘AAha’ feeling looking at your code after you have completed it, it’s best to review your code immediately and try finding issues if any. You should not only review your logic but also your SQL queries. Look for instances where you have executed SELECT/UPDATE/DELETE without a WHERE clause (not a joke… this happens). For logic that is complicated you should dry run that piece of code to test if it works well.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;3. Assuming Business Logic&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;What do we all do when we have no one from the business side to help us with Business Logic… we assume. Being proactive is good, but it could cost the client his business if you assume business logic. In situation like these its best to escalate your issues and concerns along with your assumptions to the business side and seek clarifications.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;4. Not refactoring code&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;A silly question to ask, but here it is. How many times have our clients asked to take our sweet time to deliver a code? Well, never for me. So what do we do as developers? Develop code at the speed of thought, which results in the code being completely messed up and duplication of functions being created. I recommend that once you are done with your project and before the phase of QA begins, spend some time to refactor your code and optimize it as much as possible. This will ensure that your code is stable, reliable and reusable.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;5. Not unit testing your code&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Completing your code and getting ready for integration is the good part, but not unit testing your code bounces back on you when you start getting a series of integration errors. Its always better to unit test your code before you move ahead with SIT (System Integration Testing). Test functions and code separately to check if it works as desired with a range of parameters and try to automate it. Automating your unit tests will help you to execute tests whenever you make changes to your code.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;6. Not maintaining list of changes&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Not every developer is blessed with a code repository, though it is best to have it. In development environments where code repositories don’t exist it’s important to maintain a list of changes done on the project. Changes to files, configurations, databases, images, environment settings, etc are all important pieces of informaiton that will be required at the time of deploying to staging or production environments and its a must to record these changes in a text file. Without such a text file you can imagine the outcome of deploying to production environments and missing some changes.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;7. Not indenting your code&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Indenting your code is very important, its ultimately you who will maintain it later. Indenting code not only helps you to structure your code better but also helps you to read and debug your code better. You should try and get a code beautifier that will help you indent all your code as per the rules defined, thus saving you time on bigger projects.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;8. Not modularizing code&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Not breaking the functionality into multiple modules/functions is a big crime. Break your code into as little form as possible to complete one logical set of functionality. Your function should do what it is intended to do, nothing more - nothing less. As a rule of thumb your code per function should not exceed one page of your screen. Exceptions to this rule do exist, but keeping this rule in mind from the very beginning of development will ensure that your code as modularized to a great extent.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;9. Hard coding messages and configurations&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Its bad to hard code messages and configuration parameters. This effects the flexibility to change the behaviour of the application at runtime. With scripting languages like PHP it is easy to make such runtime changes. But for applications developed in Java or .NET that are compiled and deployed, it is a daunting task that can take as much as 30 - 40 minutes for deployment.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;10. Not optimizing queries&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I have been guilty of this too. We as developers think that writing the best code and using the most optimum function provided by the API is the only thing to do. But, we don’t realize that the time taken to execute the script is entirely dependant on how sooner your database can serve results. Therefore, I recommend that you check all your queries with the query optimizer tool that comes along with most of the database engines.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;11. Not comparing files&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;You should always compare the modified files with the original source base. This gives you an addition opportunity to review the code and changes done and if it confirms to business logic. Configuration and function files should always be compared to see and validate the changes that have been made.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;12. Not having a backup of files before upload&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Without a source control software it becomes important to that you backup important files before you upload changes. Such files should include but not limited to - configuration, database and important function files.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Please feel free to share your programming experiences and write comments if you would like to share other mistakes not listed above so that developers like you and I can learn from it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-8368094071386911843?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/8368094071386911843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=8368094071386911843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/8368094071386911843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/8368094071386911843'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/twelve-common-programming-mistakes-to.html' title='Twelve common programming mistakes to avoid'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-2012515104075799511</id><published>2008-11-08T06:44:00.000-08:00</published><updated>2008-11-08T06:48:13.356-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='linuxprogramminginc'/><category scheme='http://www.blogger.com/atom/ns#' term='linuxprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Why should every programmer upgrade knowledge</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;In this age of competition and business flourishing, gone are those days when employers would look at someone specialized to execute projects. Though this still holds true for &lt;strong&gt;&lt;span style=";font-family:&amp;quot;;" &gt;Architect&lt;/span&gt;&lt;/strong&gt; level positions, but; employers expect a little more from &lt;strong&gt;&lt;span style=";font-family:&amp;quot;;" &gt;programmers&lt;/span&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;span style=";font-family:&amp;quot;;" &gt;software engineers&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Today knowing an array of technologies help you get a job of your choice and also helps you to negotiate a better pay package. The reason why employers prefer multi-talented employees is because not all projects is to be developed using a particular technology or language. Further, many software installations are the outcome of successful integration of various sub-systems written in different &lt;strong&gt;technologies.&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;So the question is how do you keep adding to your knowledge? How do you learn so many things and retain information? Where do you meet people to share information with you?&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;I recommend the following ways in which knowledge can be enhanced&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;1. Make a plan of action&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;This is the first step towards the path of enhancing your knowledge. The basis of this plan should be, a properly done research on various trends and requirements that companies follow. You need to analyze whether learning &lt;strong&gt;.NET&lt;/strong&gt; is good or &lt;strong&gt;Java&lt;/strong&gt;, or learning &lt;strong&gt;Web Services&lt;/strong&gt; would help you or knowledge of &lt;strong&gt;AJAX&lt;/strong&gt; would help you. Look at various job postings available in Daily Newspapers. Identify a pattern of technologies that various companies have a requirement for. Once you have identified technologies that you wish to learn, make a plan and execute that plan.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;2. Tips on learning many technologies and retaining&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;This is what I do. I always compare each new procedural language to ‘C’ and each &lt;strong&gt;Object Oriented Language&lt;/strong&gt; to ‘&lt;strong&gt;C++&lt;/strong&gt;‘ and ‘&lt;strong&gt;Java&lt;/strong&gt;‘. Use the style of associative learning. Think to yourself, if you have printf() in C - then it resembles to print or echo in PHP. This way you can make associations and retain.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Making notes for each technology so that you can revise it later as required.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;3. Participate in forums&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;Participating in forums&lt;/strong&gt; has a win-win situation. You not only share your knowledge, but also get to learn from it. Help as many people as possible. As a result of helping people you get to understand the subject more in depth, plus if you lack knowledge in some areas; other members of the forum supplement the missing piece of information.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;4. Get into the habit of reading&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Subscribe to &lt;strong&gt;blogs&lt;/strong&gt; or &lt;strong&gt;technical news&lt;/strong&gt; sites that publish learnings and tutorials of various technologies. Schedule time over the weekend to review articles and implement examples.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;5. Participate in Meetups and conferences&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;A good source to add to your knowledge is to participate in &lt;strong&gt;meetups&lt;/strong&gt; and &lt;strong&gt;conferences&lt;/strong&gt;. Attend such events with a broad mind and accept knowledge that has been relayed. Take notes, meet people and discuss with people there. When you meet like-minded people; try to network with them and create a schedule to meetup once a month and discuss learnings.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br /&gt;These are some of the ways in which you could improve your knowledge and skills. Over a period of time you must sharpen your axe. The field of technology is rapidly changing and one cannot always keep up to the changes and new technologies introduced. Following the above mentioned steps will help you in a big way.&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;Please leave behind any comments that you mind have if you have other tips as well.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-2012515104075799511?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/2012515104075799511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=2012515104075799511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/2012515104075799511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/2012515104075799511'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/why-should-every-programmer-upgrade.html' title='Why should every programmer upgrade knowledge'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-3508705729909702303</id><published>2008-11-08T06:21:00.001-08:00</published><updated>2008-11-08T06:43:59.323-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Recharge your programming batteries - Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming in c'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Recharge your programming batteries - Tips</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;Many of us in the field of &lt;b&gt;programming&lt;/b&gt; and &lt;b&gt;development&lt;/b&gt; go through a phase where we completely blank out. Our minds don’t work, our logic seems to have lost its track and we are not able to make any progress with projects. If this has happened to you and continues to happen to you… then you are not alone.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;A lot of &lt;b&gt;programmers&lt;/b&gt; and &lt;b&gt;developers&lt;/b&gt; go through this phase on a continuous basis. I go through it at times. You could blame it on the module, your stress levels, family &amp;amp; personal issues, etc. But, no matter what; we still need to deliver projects on time. Clients are least interested to know what your personal problems are. They want their deliveries on time. Wouldn’t you?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;&lt;br /&gt;Over a period of time, I have come across some tried and tested tips that will help you recharge your &lt;b&gt;programming&lt;/b&gt; batteries. I recommend that these tips be made part of your regular &lt;b&gt;programming&lt;/b&gt; practice, as this not only helps you to get a solution where you are badly stuck; but also relaxes your mind from the stress of thinking too much.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;b&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;1. Switch off the monitor and take your book&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;If you cannot get a solution on your machine; try to resolve a logic issue on a book or a piece of paper. Draw flow charts and other diagrams to help you arrive at logic. Doing this will give you a new direction to look at; probably you missed a point or never thought that way.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;b&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;2. Leave your development environment&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;At times, going away from your &lt;b&gt;computer&lt;/b&gt; helps, as it changes the mood and freshens your mind. Continuous working on the &lt;b&gt;computer&lt;/b&gt; at times drives you to focus on the problem so much that it keeps getting bigger. Changing the environment by either taking a walk, discussing with friends or watching some TV will help you get out of the monotony of breaking your head on a problem.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;b&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;3. Play computer games&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;Yes, this works. Atleast for me, it always has. You can try it too. Like I mentioned earlier, it helps break the monotony of deriving a solution to your problem. Play games that get you to think and react instantaneously. A &lt;b&gt;action game&lt;/b&gt; like &lt;b&gt;Quake&lt;/b&gt;, &lt;b&gt;DOOM&lt;/b&gt;, etc or a strategy based game like &lt;b&gt;Age of Empires&lt;/b&gt;, &lt;b&gt;SimCity&lt;/b&gt;, etc will help you in a big way&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;b&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;4. Meditate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;Close your eyes and &lt;b&gt;meditate&lt;/b&gt;. Taking deep breaths will help you calm down. While meditating, clear your mind of all thoughts (including the problem at hand) and relax. Feel the stress getting out of your body and mind. Think positive thoughts, visualize a place that you would like to visit for vacation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;These are some tips that I follow and hope it helps you as well. I would like to know what you do to recharge your &lt;b&gt;programming&lt;/b&gt; batteries. Please feel free to leave behind comments for questions or if you have some tips of your own, please share; you could help others by sharing.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-3508705729909702303?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/3508705729909702303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=3508705729909702303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3508705729909702303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3508705729909702303'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/recharge-your-programming-batteries.html' title='Recharge your programming batteries - Tips'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-3925496410947243574</id><published>2008-11-07T21:39:00.000-08:00</published><updated>2008-11-07T21:43:16.444-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='man pages'/><category scheme='http://www.blogger.com/atom/ns#' term='manual for read'/><title type='text'>Man Page - read</title><content type='html'>&lt;span style="font-weight:bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;read&amp;nbsp;-&amp;nbsp;read&amp;nbsp;from&amp;nbsp;a&amp;nbsp;file&amp;nbsp;descriptor&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;unistd.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ssize_t&amp;nbsp;read(int&amp;nbsp;fd,&amp;nbsp;void&amp;nbsp;*buf,&amp;nbsp;size_t&amp;nbsp;count);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;read()&amp;nbsp;&amp;nbsp;attempts&amp;nbsp;to&amp;nbsp;read&amp;nbsp;up&amp;nbsp;to&amp;nbsp;count&amp;nbsp;bytes&amp;nbsp;from&amp;nbsp;file&amp;nbsp;descriptor&amp;nbsp;fd&amp;nbsp;into&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;buffer&amp;nbsp;starting&amp;nbsp;at&amp;nbsp;buf.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;count&amp;nbsp;is&amp;nbsp;zero,&amp;nbsp;read()&amp;nbsp;returns&amp;nbsp;zero&amp;nbsp;and&amp;nbsp;has&amp;nbsp;&amp;nbsp;no&amp;nbsp;&amp;nbsp;other&amp;nbsp;&amp;nbsp;results.&amp;nbsp;&amp;nbsp;&amp;nbsp;If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count&amp;nbsp;is&amp;nbsp;greater&amp;nbsp;than&amp;nbsp;SSIZE_MAX,&amp;nbsp;the&amp;nbsp;result&amp;nbsp;is&amp;nbsp;unspecified.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;RETURN&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;VALUE&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On&amp;nbsp;success,&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;bytes&amp;nbsp;read&amp;nbsp;is&amp;nbsp;returned&amp;nbsp;(zero&amp;nbsp;indicates&amp;nbsp;end&amp;nbsp;of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file),&amp;nbsp;and&amp;nbsp;the&amp;nbsp;file&amp;nbsp;position&amp;nbsp;is&amp;nbsp;advanced&amp;nbsp;by&amp;nbsp;this&amp;nbsp;number.&amp;nbsp;&amp;nbsp;It&amp;nbsp;is&amp;nbsp;not&amp;nbsp;&amp;nbsp;an&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error&amp;nbsp;&amp;nbsp;if&amp;nbsp;&amp;nbsp;this&amp;nbsp;&amp;nbsp;number&amp;nbsp;&amp;nbsp;is&amp;nbsp;smaller&amp;nbsp;than&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;bytes&amp;nbsp;requested;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this&amp;nbsp;may&amp;nbsp;happen&amp;nbsp;for&amp;nbsp;example&amp;nbsp;because&amp;nbsp;fewer&amp;nbsp;bytes&amp;nbsp;are&amp;nbsp;actually&amp;nbsp;&amp;nbsp;available&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;right&amp;nbsp;&amp;nbsp;now&amp;nbsp;&amp;nbsp;(maybe&amp;nbsp;&amp;nbsp;because&amp;nbsp;we&amp;nbsp;were&amp;nbsp;close&amp;nbsp;to&amp;nbsp;end-of-file,&amp;nbsp;or&amp;nbsp;because&amp;nbsp;we&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;are&amp;nbsp;reading&amp;nbsp;from&amp;nbsp;a&amp;nbsp;pipe,&amp;nbsp;or&amp;nbsp;from&amp;nbsp;a&amp;nbsp;terminal),&amp;nbsp;&amp;nbsp;or&amp;nbsp;&amp;nbsp;because&amp;nbsp;&amp;nbsp;read()&amp;nbsp;&amp;nbsp;was&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;interrupted&amp;nbsp;&amp;nbsp;by&amp;nbsp;&amp;nbsp;a&amp;nbsp;&amp;nbsp;signal.&amp;nbsp;&amp;nbsp;On&amp;nbsp;error,&amp;nbsp;-1&amp;nbsp;is&amp;nbsp;returned,&amp;nbsp;and&amp;nbsp;errno&amp;nbsp;is&amp;nbsp;set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;appropriately.&amp;nbsp;&amp;nbsp;In&amp;nbsp;this&amp;nbsp;case&amp;nbsp;it&amp;nbsp;is&amp;nbsp;left&amp;nbsp;unspecified&amp;nbsp;&amp;nbsp;whether&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position&amp;nbsp;(if&amp;nbsp;any)&amp;nbsp;changes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EAGAIN&amp;nbsp;Non-blocking&amp;nbsp;&amp;nbsp;I/O&amp;nbsp;has&amp;nbsp;been&amp;nbsp;selected&amp;nbsp;using&amp;nbsp;O_NONBLOCK&amp;nbsp;and&amp;nbsp;no&amp;nbsp;data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;was&amp;nbsp;immediately&amp;nbsp;available&amp;nbsp;for&amp;nbsp;reading.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EBADF&amp;nbsp;&amp;nbsp;fd&amp;nbsp;is&amp;nbsp;not&amp;nbsp;a&amp;nbsp;valid&amp;nbsp;file&amp;nbsp;descriptor&amp;nbsp;or&amp;nbsp;is&amp;nbsp;not&amp;nbsp;open&amp;nbsp;for&amp;nbsp;reading.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EFAULT&amp;nbsp;buf&amp;nbsp;is&amp;nbsp;outside&amp;nbsp;your&amp;nbsp;accessible&amp;nbsp;address&amp;nbsp;space.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EINTR&amp;nbsp;&amp;nbsp;The&amp;nbsp;call&amp;nbsp;was&amp;nbsp;interrupted&amp;nbsp;by&amp;nbsp;a&amp;nbsp;signal&amp;nbsp;before&amp;nbsp;any&amp;nbsp;data&amp;nbsp;was&amp;nbsp;read.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EINVAL&amp;nbsp;fd&amp;nbsp;is&amp;nbsp;attached&amp;nbsp;to&amp;nbsp;an&amp;nbsp;object&amp;nbsp;which&amp;nbsp;is&amp;nbsp;unsuitable&amp;nbsp;for&amp;nbsp;reading;&amp;nbsp;&amp;nbsp;or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;was&amp;nbsp;&amp;nbsp;opened&amp;nbsp;&amp;nbsp;with&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;O_DIRECT&amp;nbsp;flag,&amp;nbsp;and&amp;nbsp;either&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;address&amp;nbsp;specified&amp;nbsp;in&amp;nbsp;buf,&amp;nbsp;the&amp;nbsp;value&amp;nbsp;specified&amp;nbsp;in&amp;nbsp;count,&amp;nbsp;&amp;nbsp;or&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;current&amp;nbsp;file&amp;nbsp;offset&amp;nbsp;is&amp;nbsp;not&amp;nbsp;suitably&amp;nbsp;aligned.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EINVAL&amp;nbsp;fd&amp;nbsp;&amp;nbsp;was&amp;nbsp;&amp;nbsp;created&amp;nbsp;&amp;nbsp;via&amp;nbsp;&amp;nbsp;a&amp;nbsp;call&amp;nbsp;to&amp;nbsp;timerfd_create(2)&amp;nbsp;and&amp;nbsp;the&amp;nbsp;wrong&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size&amp;nbsp;buffer&amp;nbsp;was&amp;nbsp;given&amp;nbsp;to&amp;nbsp;read();&amp;nbsp;see&amp;nbsp;timerfd_create(2)&amp;nbsp;for&amp;nbsp;&amp;nbsp;fur‐&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ther&amp;nbsp;information.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EIO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I/O&amp;nbsp;&amp;nbsp;error.&amp;nbsp;&amp;nbsp;This&amp;nbsp;will&amp;nbsp;happen&amp;nbsp;for&amp;nbsp;example&amp;nbsp;when&amp;nbsp;the&amp;nbsp;process&amp;nbsp;is&amp;nbsp;in&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a&amp;nbsp;background&amp;nbsp;process&amp;nbsp;group,&amp;nbsp;tries&amp;nbsp;to&amp;nbsp;read&amp;nbsp;from&amp;nbsp;&amp;nbsp;its&amp;nbsp;&amp;nbsp;controlling&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tty,&amp;nbsp;&amp;nbsp;and&amp;nbsp;&amp;nbsp;either&amp;nbsp;it&amp;nbsp;is&amp;nbsp;ignoring&amp;nbsp;or&amp;nbsp;blocking&amp;nbsp;SIGTTIN&amp;nbsp;or&amp;nbsp;its&amp;nbsp;pro‐&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cess&amp;nbsp;group&amp;nbsp;is&amp;nbsp;orphaned.&amp;nbsp;&amp;nbsp;It&amp;nbsp;may&amp;nbsp;also&amp;nbsp;occur&amp;nbsp;when&amp;nbsp;there&amp;nbsp;is&amp;nbsp;a&amp;nbsp;&amp;nbsp;low-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;level&amp;nbsp;I/O&amp;nbsp;error&amp;nbsp;while&amp;nbsp;reading&amp;nbsp;from&amp;nbsp;a&amp;nbsp;disk&amp;nbsp;or&amp;nbsp;tape.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EISDIR&amp;nbsp;fd&amp;nbsp;refers&amp;nbsp;to&amp;nbsp;a&amp;nbsp;directory.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Other&amp;nbsp;errors&amp;nbsp;may&amp;nbsp;occur,&amp;nbsp;depending&amp;nbsp;on&amp;nbsp;the&amp;nbsp;object&amp;nbsp;connected&amp;nbsp;to&amp;nbsp;fd.&amp;nbsp;&amp;nbsp;POSIX&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;allows&amp;nbsp;a&amp;nbsp;read()&amp;nbsp;that&amp;nbsp;is&amp;nbsp;interrupted&amp;nbsp;after&amp;nbsp;reading&amp;nbsp;some&amp;nbsp;data&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-1&amp;nbsp;&amp;nbsp;(with&amp;nbsp;&amp;nbsp;errno&amp;nbsp;set&amp;nbsp;to&amp;nbsp;EINTR)&amp;nbsp;or&amp;nbsp;to&amp;nbsp;return&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;bytes&amp;nbsp;already&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;read.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CONFORMING&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;TO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SVr4,&amp;nbsp;4.3BSD,&amp;nbsp;POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;NOTES&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On&amp;nbsp;NFS&amp;nbsp;file&amp;nbsp;systems,&amp;nbsp;reading&amp;nbsp;small&amp;nbsp;amounts&amp;nbsp;of&amp;nbsp;data&amp;nbsp;will&amp;nbsp;only&amp;nbsp;update&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time&amp;nbsp;&amp;nbsp;stamp&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;first&amp;nbsp;&amp;nbsp;time,&amp;nbsp;subsequent&amp;nbsp;calls&amp;nbsp;may&amp;nbsp;not&amp;nbsp;do&amp;nbsp;so.&amp;nbsp;&amp;nbsp;This&amp;nbsp;is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;caused&amp;nbsp;by&amp;nbsp;client&amp;nbsp;side&amp;nbsp;attribute&amp;nbsp;caching,&amp;nbsp;because&amp;nbsp;most&amp;nbsp;if&amp;nbsp;&amp;nbsp;not&amp;nbsp;&amp;nbsp;all&amp;nbsp;&amp;nbsp;NFS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clients&amp;nbsp;&amp;nbsp;leave&amp;nbsp;&amp;nbsp;st_atime&amp;nbsp;&amp;nbsp;(last&amp;nbsp;file&amp;nbsp;access&amp;nbsp;time)&amp;nbsp;updates&amp;nbsp;to&amp;nbsp;the&amp;nbsp;server&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;and&amp;nbsp;client&amp;nbsp;side&amp;nbsp;reads&amp;nbsp;satisfied&amp;nbsp;from&amp;nbsp;the&amp;nbsp;client’s&amp;nbsp;cache&amp;nbsp;will&amp;nbsp;not&amp;nbsp;&amp;nbsp;cause&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st_atime&amp;nbsp;updates&amp;nbsp;on&amp;nbsp;the&amp;nbsp;server&amp;nbsp;as&amp;nbsp;there&amp;nbsp;are&amp;nbsp;no&amp;nbsp;server&amp;nbsp;side&amp;nbsp;reads.&amp;nbsp;&amp;nbsp;UNIX&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;semantics&amp;nbsp;can&amp;nbsp;be&amp;nbsp;obtained&amp;nbsp;by&amp;nbsp;disabling&amp;nbsp;client&amp;nbsp;side&amp;nbsp;&amp;nbsp;attribute&amp;nbsp;&amp;nbsp;caching,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;but&amp;nbsp;in&amp;nbsp;most&amp;nbsp;situations&amp;nbsp;this&amp;nbsp;will&amp;nbsp;substantially&amp;nbsp;increase&amp;nbsp;server&amp;nbsp;load&amp;nbsp;and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;decrease&amp;nbsp;performance.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Many&amp;nbsp;filesystems&amp;nbsp;and&amp;nbsp;disks&amp;nbsp;were&amp;nbsp;considered&amp;nbsp;to&amp;nbsp;be&amp;nbsp;fast&amp;nbsp;enough&amp;nbsp;&amp;nbsp;that&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;O_NONBLOCK&amp;nbsp;&amp;nbsp;was&amp;nbsp;deemed&amp;nbsp;unnecessary.&amp;nbsp;&amp;nbsp;So,&amp;nbsp;O_NONBLOCK&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;may&amp;nbsp;not&amp;nbsp;be&amp;nbsp;available&amp;nbsp;on&amp;nbsp;files&amp;nbsp;and/or&amp;nbsp;disks.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SEE&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;ALSO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;close(2),&amp;nbsp;fcntl(2),&amp;nbsp;ioctl(2),&amp;nbsp;lseek(2),&amp;nbsp;open(2),&amp;nbsp;pread(2),&amp;nbsp;&amp;nbsp;readdir(2),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;readlink(2),&amp;nbsp;readv(2),&amp;nbsp;select(2),&amp;nbsp;write(2),&amp;nbsp;fread(3)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-3925496410947243574?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/3925496410947243574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=3925496410947243574' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3925496410947243574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3925496410947243574'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-read.html' title='Man Page - read'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-766587008494934028</id><published>2008-11-07T21:37:00.000-08:00</published><updated>2008-11-07T21:39:04.084-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='man page'/><category scheme='http://www.blogger.com/atom/ns#' term='manual for popen'/><title type='text'>Man page - popen</title><content type='html'>&lt;span style="font-weight:bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;popen,&amp;nbsp;pclose&amp;nbsp;-&amp;nbsp;process&amp;nbsp;I/O&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILE&amp;nbsp;*popen(const&amp;nbsp;char&amp;nbsp;*command,&amp;nbsp;const&amp;nbsp;char&amp;nbsp;*type);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;pclose(FILE&amp;nbsp;*stream);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;popen()&amp;nbsp;&amp;nbsp;function&amp;nbsp;opens&amp;nbsp;a&amp;nbsp;process&amp;nbsp;by&amp;nbsp;creating&amp;nbsp;a&amp;nbsp;pipe,&amp;nbsp;forking,&amp;nbsp;and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;invoking&amp;nbsp;the&amp;nbsp;shell.&amp;nbsp;&amp;nbsp;Since&amp;nbsp;a&amp;nbsp;pipe&amp;nbsp;is&amp;nbsp;by&amp;nbsp;definition&amp;nbsp;unidirectional,&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;type&amp;nbsp;&amp;nbsp;argument&amp;nbsp;&amp;nbsp;may&amp;nbsp;&amp;nbsp;specify&amp;nbsp;&amp;nbsp;only&amp;nbsp;&amp;nbsp;reading&amp;nbsp;&amp;nbsp;or&amp;nbsp;&amp;nbsp;writing,&amp;nbsp;not&amp;nbsp;both;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resulting&amp;nbsp;stream&amp;nbsp;is&amp;nbsp;correspondingly&amp;nbsp;read-only&amp;nbsp;or&amp;nbsp;write-only.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;command&amp;nbsp;argument&amp;nbsp;is&amp;nbsp;a&amp;nbsp;pointer&amp;nbsp;to&amp;nbsp;a&amp;nbsp;null-terminated&amp;nbsp;string&amp;nbsp;&amp;nbsp;contain‐&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ing&amp;nbsp;&amp;nbsp;a&amp;nbsp;shell&amp;nbsp;command&amp;nbsp;line.&amp;nbsp;&amp;nbsp;This&amp;nbsp;command&amp;nbsp;is&amp;nbsp;passed&amp;nbsp;to&amp;nbsp;/bin/sh&amp;nbsp;using&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-c&amp;nbsp;flag;&amp;nbsp;interpretation,&amp;nbsp;if&amp;nbsp;any,&amp;nbsp;is&amp;nbsp;performed&amp;nbsp;by&amp;nbsp;the&amp;nbsp;shell.&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;type&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;argument&amp;nbsp;&amp;nbsp;is&amp;nbsp;a&amp;nbsp;pointer&amp;nbsp;to&amp;nbsp;a&amp;nbsp;null-terminated&amp;nbsp;string&amp;nbsp;which&amp;nbsp;must&amp;nbsp;be&amp;nbsp;either&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"r"&amp;nbsp;for&amp;nbsp;reading&amp;nbsp;or&amp;nbsp;"w"&amp;nbsp;for&amp;nbsp;writing.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;return&amp;nbsp;value&amp;nbsp;from&amp;nbsp;popen()&amp;nbsp;is&amp;nbsp;a&amp;nbsp;normal&amp;nbsp;standard&amp;nbsp;I/O&amp;nbsp;&amp;nbsp;stream&amp;nbsp;&amp;nbsp;in&amp;nbsp;&amp;nbsp;all&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;respects&amp;nbsp;&amp;nbsp;save&amp;nbsp;&amp;nbsp;that&amp;nbsp;&amp;nbsp;it&amp;nbsp;&amp;nbsp;must&amp;nbsp;&amp;nbsp;be&amp;nbsp;&amp;nbsp;closed&amp;nbsp;&amp;nbsp;with&amp;nbsp;&amp;nbsp;pclose()&amp;nbsp;&amp;nbsp;rather&amp;nbsp;than&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fclose(3).&amp;nbsp;&amp;nbsp;Writing&amp;nbsp;to&amp;nbsp;such&amp;nbsp;a&amp;nbsp;stream&amp;nbsp;writes&amp;nbsp;to&amp;nbsp;the&amp;nbsp;&amp;nbsp;standard&amp;nbsp;&amp;nbsp;input&amp;nbsp;&amp;nbsp;of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;command;&amp;nbsp;&amp;nbsp;the&amp;nbsp;command’s&amp;nbsp;standard&amp;nbsp;output&amp;nbsp;is&amp;nbsp;the&amp;nbsp;same&amp;nbsp;as&amp;nbsp;that&amp;nbsp;of&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process&amp;nbsp;that&amp;nbsp;called&amp;nbsp;popen(),&amp;nbsp;unless&amp;nbsp;this&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;altered&amp;nbsp;&amp;nbsp;by&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;command&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;itself.&amp;nbsp;&amp;nbsp;&amp;nbsp;Conversely,&amp;nbsp;&amp;nbsp;reading&amp;nbsp;&amp;nbsp;from&amp;nbsp;&amp;nbsp;a&amp;nbsp;"popened"&amp;nbsp;stream&amp;nbsp;reads&amp;nbsp;the&amp;nbsp;com‐&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mand’s&amp;nbsp;standard&amp;nbsp;output,&amp;nbsp;and&amp;nbsp;the&amp;nbsp;command’s&amp;nbsp;standard&amp;nbsp;input&amp;nbsp;is&amp;nbsp;the&amp;nbsp;same&amp;nbsp;as&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that&amp;nbsp;of&amp;nbsp;the&amp;nbsp;process&amp;nbsp;that&amp;nbsp;called&amp;nbsp;popen().&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Note&amp;nbsp;that&amp;nbsp;output&amp;nbsp;popen()&amp;nbsp;streams&amp;nbsp;are&amp;nbsp;fully&amp;nbsp;buffered&amp;nbsp;by&amp;nbsp;default.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;pclose()&amp;nbsp;function&amp;nbsp;waits&amp;nbsp;for&amp;nbsp;the&amp;nbsp;associated&amp;nbsp;process&amp;nbsp;to&amp;nbsp;terminate&amp;nbsp;and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns&amp;nbsp;the&amp;nbsp;exit&amp;nbsp;status&amp;nbsp;of&amp;nbsp;the&amp;nbsp;command&amp;nbsp;as&amp;nbsp;returned&amp;nbsp;by&amp;nbsp;wait4(2).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;RETURN&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;VALUE&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;popen()&amp;nbsp;function&amp;nbsp;returns&amp;nbsp;NULL&amp;nbsp;if&amp;nbsp;the&amp;nbsp;fork(2)&amp;nbsp;or&amp;nbsp;pipe(2)&amp;nbsp;calls&amp;nbsp;fail,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;or&amp;nbsp;if&amp;nbsp;it&amp;nbsp;cannot&amp;nbsp;allocate&amp;nbsp;memory.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;pclose()&amp;nbsp;function&amp;nbsp;returns&amp;nbsp;-1&amp;nbsp;if&amp;nbsp;wait4(2)&amp;nbsp;returns&amp;nbsp;an&amp;nbsp;error,&amp;nbsp;or&amp;nbsp;some&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;other&amp;nbsp;error&amp;nbsp;is&amp;nbsp;detected.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;popen()&amp;nbsp;function&amp;nbsp;does&amp;nbsp;not&amp;nbsp;set&amp;nbsp;errno&amp;nbsp;if&amp;nbsp;memory&amp;nbsp;allocation&amp;nbsp;fails.&amp;nbsp;&amp;nbsp;If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;underlying&amp;nbsp;&amp;nbsp;fork(2)&amp;nbsp;&amp;nbsp;or&amp;nbsp;pipe(2)&amp;nbsp;fails,&amp;nbsp;errno&amp;nbsp;is&amp;nbsp;set&amp;nbsp;appropriately.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;the&amp;nbsp;type&amp;nbsp;argument&amp;nbsp;is&amp;nbsp;invalid,&amp;nbsp;and&amp;nbsp;this&amp;nbsp;condition&amp;nbsp;is&amp;nbsp;detected,&amp;nbsp;&amp;nbsp;errno&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is&amp;nbsp;set&amp;nbsp;to&amp;nbsp;EINVAL.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;pclose()&amp;nbsp;cannot&amp;nbsp;obtain&amp;nbsp;the&amp;nbsp;child&amp;nbsp;status,&amp;nbsp;errno&amp;nbsp;is&amp;nbsp;set&amp;nbsp;to&amp;nbsp;ECHILD.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CONFORMING&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;TO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;BUGS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Since&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;standard&amp;nbsp;&amp;nbsp;input&amp;nbsp;&amp;nbsp;of&amp;nbsp;a&amp;nbsp;command&amp;nbsp;opened&amp;nbsp;for&amp;nbsp;reading&amp;nbsp;shares&amp;nbsp;its&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;seek&amp;nbsp;offset&amp;nbsp;with&amp;nbsp;the&amp;nbsp;process&amp;nbsp;that&amp;nbsp;called&amp;nbsp;popen(),&amp;nbsp;if&amp;nbsp;the&amp;nbsp;original&amp;nbsp;&amp;nbsp;pro‐&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cess&amp;nbsp;&amp;nbsp;has&amp;nbsp;done&amp;nbsp;a&amp;nbsp;buffered&amp;nbsp;read,&amp;nbsp;the&amp;nbsp;command’s&amp;nbsp;input&amp;nbsp;position&amp;nbsp;may&amp;nbsp;not&amp;nbsp;be&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;as&amp;nbsp;expected.&amp;nbsp;&amp;nbsp;Similarly,&amp;nbsp;the&amp;nbsp;output&amp;nbsp;from&amp;nbsp;a&amp;nbsp;command&amp;nbsp;opened&amp;nbsp;&amp;nbsp;for&amp;nbsp;&amp;nbsp;writing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;may&amp;nbsp;&amp;nbsp;become&amp;nbsp;intermingled&amp;nbsp;with&amp;nbsp;that&amp;nbsp;of&amp;nbsp;the&amp;nbsp;original&amp;nbsp;process.&amp;nbsp;&amp;nbsp;The&amp;nbsp;latter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;can&amp;nbsp;be&amp;nbsp;avoided&amp;nbsp;by&amp;nbsp;calling&amp;nbsp;fflush(3)&amp;nbsp;before&amp;nbsp;popen().&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Failure&amp;nbsp;to&amp;nbsp;execute&amp;nbsp;the&amp;nbsp;shell&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;indistinguishable&amp;nbsp;&amp;nbsp;from&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;shell’s&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;failure&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;execute&amp;nbsp;command,&amp;nbsp;or&amp;nbsp;an&amp;nbsp;immediate&amp;nbsp;exit&amp;nbsp;of&amp;nbsp;the&amp;nbsp;command.&amp;nbsp;&amp;nbsp;The&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;only&amp;nbsp;hint&amp;nbsp;is&amp;nbsp;an&amp;nbsp;exit&amp;nbsp;status&amp;nbsp;of&amp;nbsp;127.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SEE&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;ALSO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sh(1),&amp;nbsp;fork(2),&amp;nbsp;&amp;nbsp;pipe(2),&amp;nbsp;&amp;nbsp;wait4(2),&amp;nbsp;&amp;nbsp;fclose(3),&amp;nbsp;&amp;nbsp;fflush(3),&amp;nbsp;&amp;nbsp;fopen(3),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stdio(3),&amp;nbsp;system(3)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-766587008494934028?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/766587008494934028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=766587008494934028' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/766587008494934028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/766587008494934028'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-popen.html' title='Man page - popen'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-1061525330560532701</id><published>2008-11-07T21:35:00.000-08:00</published><updated>2008-11-07T21:36:57.503-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fcntl manual'/><category scheme='http://www.blogger.com/atom/ns#' term='manual for pipe'/><category scheme='http://www.blogger.com/atom/ns#' term='man page'/><title type='text'>Man page - pipe</title><content type='html'>&lt;span style="font-weight:bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pipe&amp;nbsp;-&amp;nbsp;create&amp;nbsp;pipe&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;unistd.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;pipe(int&amp;nbsp;pipefd[2]);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pipe()&amp;nbsp;&amp;nbsp;creates&amp;nbsp;&amp;nbsp;a&amp;nbsp;pipe,&amp;nbsp;a&amp;nbsp;unidirectional&amp;nbsp;data&amp;nbsp;channel&amp;nbsp;that&amp;nbsp;can&amp;nbsp;be&amp;nbsp;used&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;interprocess&amp;nbsp;communication.&amp;nbsp;&amp;nbsp;The&amp;nbsp;array&amp;nbsp;pipefd&amp;nbsp;is&amp;nbsp;used&amp;nbsp;to&amp;nbsp;return&amp;nbsp;two&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;descriptors&amp;nbsp;&amp;nbsp;referring&amp;nbsp;to&amp;nbsp;the&amp;nbsp;ends&amp;nbsp;of&amp;nbsp;the&amp;nbsp;pipe.&amp;nbsp;&amp;nbsp;pipefd[0]&amp;nbsp;refers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to&amp;nbsp;the&amp;nbsp;read&amp;nbsp;end&amp;nbsp;of&amp;nbsp;the&amp;nbsp;pipe.&amp;nbsp;&amp;nbsp;pipefd[1]&amp;nbsp;refers&amp;nbsp;to&amp;nbsp;the&amp;nbsp;write&amp;nbsp;end&amp;nbsp;of&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pipe.&amp;nbsp;&amp;nbsp;&amp;nbsp;Data&amp;nbsp;&amp;nbsp;written&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;the&amp;nbsp;write&amp;nbsp;end&amp;nbsp;of&amp;nbsp;the&amp;nbsp;pipe&amp;nbsp;is&amp;nbsp;buffered&amp;nbsp;by&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kernel&amp;nbsp;until&amp;nbsp;it&amp;nbsp;is&amp;nbsp;read&amp;nbsp;from&amp;nbsp;the&amp;nbsp;read&amp;nbsp;end&amp;nbsp;of&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;pipe.&amp;nbsp;&amp;nbsp;&amp;nbsp;For&amp;nbsp;&amp;nbsp;further&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;details,&amp;nbsp;see&amp;nbsp;pipe(7).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;RETURN&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;VALUE&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On&amp;nbsp;&amp;nbsp;success,&amp;nbsp;&amp;nbsp;zero&amp;nbsp;is&amp;nbsp;returned.&amp;nbsp;&amp;nbsp;On&amp;nbsp;error,&amp;nbsp;-1&amp;nbsp;is&amp;nbsp;returned,&amp;nbsp;and&amp;nbsp;errno&amp;nbsp;is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&amp;nbsp;appropriately.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EFAULT&amp;nbsp;pipefd&amp;nbsp;is&amp;nbsp;not&amp;nbsp;valid.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EMFILE&amp;nbsp;Too&amp;nbsp;many&amp;nbsp;file&amp;nbsp;descriptors&amp;nbsp;are&amp;nbsp;in&amp;nbsp;use&amp;nbsp;by&amp;nbsp;the&amp;nbsp;process.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENFILE&amp;nbsp;The&amp;nbsp;system&amp;nbsp;limit&amp;nbsp;on&amp;nbsp;the&amp;nbsp;total&amp;nbsp;number&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;open&amp;nbsp;&amp;nbsp;files&amp;nbsp;&amp;nbsp;has&amp;nbsp;&amp;nbsp;been&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reached.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CONFORMING&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;TO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;EXAMPLE&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;following&amp;nbsp;&amp;nbsp;program&amp;nbsp;&amp;nbsp;creates&amp;nbsp;&amp;nbsp;a&amp;nbsp;pipe,&amp;nbsp;and&amp;nbsp;then&amp;nbsp;fork(2)s&amp;nbsp;to&amp;nbsp;create&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child&amp;nbsp;process;&amp;nbsp;the&amp;nbsp;child&amp;nbsp;inherits&amp;nbsp;a&amp;nbsp;duplicate&amp;nbsp;set&amp;nbsp;of&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;descriptors&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that&amp;nbsp;&amp;nbsp;refer&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;the&amp;nbsp;same&amp;nbsp;pipe.&amp;nbsp;&amp;nbsp;After&amp;nbsp;the&amp;nbsp;fork(2),&amp;nbsp;each&amp;nbsp;process&amp;nbsp;closes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;descriptors&amp;nbsp;that&amp;nbsp;it&amp;nbsp;doesn’t&amp;nbsp;need&amp;nbsp;for&amp;nbsp;the&amp;nbsp;pipe&amp;nbsp;(see&amp;nbsp;&amp;nbsp;pipe(7)).&amp;nbsp;&amp;nbsp;&amp;nbsp;The&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent&amp;nbsp;&amp;nbsp;then&amp;nbsp;&amp;nbsp;writes&amp;nbsp;the&amp;nbsp;string&amp;nbsp;contained&amp;nbsp;in&amp;nbsp;the&amp;nbsp;program’s&amp;nbsp;command-line&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;argument&amp;nbsp;to&amp;nbsp;the&amp;nbsp;pipe,&amp;nbsp;and&amp;nbsp;the&amp;nbsp;child&amp;nbsp;reads&amp;nbsp;this&amp;nbsp;string&amp;nbsp;a&amp;nbsp;byte&amp;nbsp;at&amp;nbsp;a&amp;nbsp;&amp;nbsp;time&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&amp;nbsp;the&amp;nbsp;pipe&amp;nbsp;and&amp;nbsp;echoes&amp;nbsp;it&amp;nbsp;on&amp;nbsp;standard&amp;nbsp;output.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;assert.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;stdio.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;unistd.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;*argv[])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;pipefd[2];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pid_t&amp;nbsp;cpid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char&amp;nbsp;buf;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert(argc&amp;nbsp;==&amp;nbsp;2);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(pipe(pipefd)&amp;nbsp;==&amp;nbsp;-1)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;perror("pipe");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit(EXIT_FAILURE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cpid&amp;nbsp;=&amp;nbsp;fork();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cpid&amp;nbsp;==&amp;nbsp;-1)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;perror("fork");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit(EXIT_FAILURE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cpid&amp;nbsp;==&amp;nbsp;0)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Child&amp;nbsp;reads&amp;nbsp;from&amp;nbsp;pipe&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;close(pipefd[1]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Close&amp;nbsp;unused&amp;nbsp;write&amp;nbsp;end&amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;(read(pipefd[0],&amp;nbsp;&amp;amp;buf,&amp;nbsp;1)&amp;nbsp;&amp;gt;&amp;nbsp;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;write(STDOUT_FILENO,&amp;nbsp;&amp;amp;buf,&amp;nbsp;1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;write(STDOUT_FILENO,&amp;nbsp;"\n",&amp;nbsp;1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;close(pipefd[0]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_exit(EXIT_SUCCESS);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Parent&amp;nbsp;writes&amp;nbsp;argv[1]&amp;nbsp;to&amp;nbsp;pipe&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;close(pipefd[0]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Close&amp;nbsp;unused&amp;nbsp;read&amp;nbsp;end&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;write(pipefd[1],&amp;nbsp;argv[1],&amp;nbsp;strlen(argv[1]));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;close(pipefd[1]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Reader&amp;nbsp;will&amp;nbsp;see&amp;nbsp;EOF&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wait(NULL);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Wait&amp;nbsp;for&amp;nbsp;child&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit(EXIT_SUCCESS);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SEE&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;ALSO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fork(2),&amp;nbsp;read(2),&amp;nbsp;socketpair(2),&amp;nbsp;write(2),&amp;nbsp;popen(3),&amp;nbsp;pipe(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-1061525330560532701?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/1061525330560532701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=1061525330560532701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1061525330560532701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/1061525330560532701'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-pipe.html' title='Man page - pipe'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-3697951491784858997</id><published>2008-11-07T21:29:00.000-08:00</published><updated>2008-11-07T21:35:20.148-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='manual for open'/><category scheme='http://www.blogger.com/atom/ns#' term='man page'/><category scheme='http://www.blogger.com/atom/ns#' term='man pages'/><title type='text'>Man page -open</title><content type='html'>&lt;span style="font-weight:bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;open,&amp;nbsp;creat&amp;nbsp;-&amp;nbsp;open&amp;nbsp;and&amp;nbsp;possibly&amp;nbsp;create&amp;nbsp;a&amp;nbsp;file&amp;nbsp;or&amp;nbsp;device&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;sys/types.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;fcntl.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;open(const&amp;nbsp;char&amp;nbsp;*pathname,&amp;nbsp;int&amp;nbsp;flags);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;open(const&amp;nbsp;char&amp;nbsp;*pathname,&amp;nbsp;int&amp;nbsp;flags,&amp;nbsp;mode_t&amp;nbsp;mode);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;creat(const&amp;nbsp;char&amp;nbsp;*pathname,&amp;nbsp;mode_t&amp;nbsp;mode);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Given&amp;nbsp;a&amp;nbsp;pathname&amp;nbsp;for&amp;nbsp;a&amp;nbsp;file,&amp;nbsp;open()&amp;nbsp;returns&amp;nbsp;a&amp;nbsp;file&amp;nbsp;descriptor,&amp;nbsp;a&amp;nbsp;small,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;non-negative&amp;nbsp;integer&amp;nbsp;for&amp;nbsp;&amp;nbsp;use&amp;nbsp;&amp;nbsp;in&amp;nbsp;&amp;nbsp;subsequent&amp;nbsp;&amp;nbsp;system&amp;nbsp;&amp;nbsp;calls&amp;nbsp;&amp;nbsp;(read(2),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;write(2),&amp;nbsp;lseek(2),&amp;nbsp;fcntl(2),&amp;nbsp;etc.).&amp;nbsp;&amp;nbsp;The&amp;nbsp;file&amp;nbsp;descriptor&amp;nbsp;returned&amp;nbsp;by&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;successful&amp;nbsp;call&amp;nbsp;will&amp;nbsp;be&amp;nbsp;the&amp;nbsp;lowest-numbered&amp;nbsp;file&amp;nbsp;&amp;nbsp;descriptor&amp;nbsp;&amp;nbsp;not&amp;nbsp;&amp;nbsp;cur&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rently&amp;nbsp;open&amp;nbsp;for&amp;nbsp;the&amp;nbsp;process.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;By&amp;nbsp;&amp;nbsp;default,&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;new&amp;nbsp;&amp;nbsp;file&amp;nbsp;descriptor&amp;nbsp;is&amp;nbsp;set&amp;nbsp;to&amp;nbsp;remain&amp;nbsp;open&amp;nbsp;across&amp;nbsp;an&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;execve(2)&amp;nbsp;(i.e.,&amp;nbsp;the&amp;nbsp;&amp;nbsp;FD_CLOEXEC&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;descriptor&amp;nbsp;&amp;nbsp;flag&amp;nbsp;&amp;nbsp;described&amp;nbsp;&amp;nbsp;in&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fcntl(2)&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;initially&amp;nbsp;&amp;nbsp;disabled;&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;Linux-specific&amp;nbsp;O_CLOEXEC&amp;nbsp;flag,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;described&amp;nbsp;below,&amp;nbsp;can&amp;nbsp;be&amp;nbsp;used&amp;nbsp;to&amp;nbsp;change&amp;nbsp;this&amp;nbsp;default).&amp;nbsp;&amp;nbsp;The&amp;nbsp;file&amp;nbsp;&amp;nbsp;offset&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is&amp;nbsp;set&amp;nbsp;to&amp;nbsp;the&amp;nbsp;beginning&amp;nbsp;of&amp;nbsp;the&amp;nbsp;file&amp;nbsp;(see&amp;nbsp;lseek(2)).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A&amp;nbsp;&amp;nbsp;call&amp;nbsp;&amp;nbsp;to&amp;nbsp;open()&amp;nbsp;creates&amp;nbsp;a&amp;nbsp;new&amp;nbsp;open&amp;nbsp;file&amp;nbsp;description,&amp;nbsp;an&amp;nbsp;entry&amp;nbsp;in&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;system-wide&amp;nbsp;table&amp;nbsp;of&amp;nbsp;open&amp;nbsp;files.&amp;nbsp;&amp;nbsp;This&amp;nbsp;entry&amp;nbsp;records&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;offset&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;and&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;file&amp;nbsp;status&amp;nbsp;flags&amp;nbsp;(modifiable&amp;nbsp;via&amp;nbsp;the&amp;nbsp;fcntl(2)&amp;nbsp;F_SETFL&amp;nbsp;opera&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tion).&amp;nbsp;&amp;nbsp;A&amp;nbsp;file&amp;nbsp;descriptor&amp;nbsp;is&amp;nbsp;a&amp;nbsp;reference&amp;nbsp;to&amp;nbsp;one&amp;nbsp;of&amp;nbsp;these&amp;nbsp;entries;&amp;nbsp;&amp;nbsp;this&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reference&amp;nbsp;is&amp;nbsp;unaffected&amp;nbsp;if&amp;nbsp;pathname&amp;nbsp;is&amp;nbsp;subsequently&amp;nbsp;removed&amp;nbsp;or&amp;nbsp;modified&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to&amp;nbsp;refer&amp;nbsp;to&amp;nbsp;a&amp;nbsp;different&amp;nbsp;file.&amp;nbsp;&amp;nbsp;The&amp;nbsp;new&amp;nbsp;open&amp;nbsp;file&amp;nbsp;&amp;nbsp;description&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;ini&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tially&amp;nbsp;&amp;nbsp;not&amp;nbsp;&amp;nbsp;shared&amp;nbsp;&amp;nbsp;with&amp;nbsp;&amp;nbsp;any&amp;nbsp;other&amp;nbsp;process,&amp;nbsp;but&amp;nbsp;sharing&amp;nbsp;may&amp;nbsp;arise&amp;nbsp;via&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fork(2).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;parameter&amp;nbsp;flags&amp;nbsp;must&amp;nbsp;include&amp;nbsp;one&amp;nbsp;of&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;following&amp;nbsp;&amp;nbsp;access&amp;nbsp;&amp;nbsp;modes:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_RDONLY,&amp;nbsp;&amp;nbsp;O_WRONLY,&amp;nbsp;&amp;nbsp;or&amp;nbsp;&amp;nbsp;O_RDWR.&amp;nbsp;&amp;nbsp;These&amp;nbsp;request&amp;nbsp;opening&amp;nbsp;the&amp;nbsp;file&amp;nbsp;read-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;only,&amp;nbsp;write-only,&amp;nbsp;or&amp;nbsp;read/write,&amp;nbsp;respectively.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In&amp;nbsp;addition,&amp;nbsp;zero&amp;nbsp;or&amp;nbsp;more&amp;nbsp;file&amp;nbsp;creation&amp;nbsp;flags&amp;nbsp;and&amp;nbsp;file&amp;nbsp;status&amp;nbsp;flags&amp;nbsp;can&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;be&amp;nbsp;bitwise-ord&amp;nbsp;in&amp;nbsp;flags.&amp;nbsp;&amp;nbsp;The&amp;nbsp;file&amp;nbsp;creation&amp;nbsp;flags&amp;nbsp;are&amp;nbsp;O_CREAT,&amp;nbsp;O_EXCL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_NOCTTY,&amp;nbsp;and&amp;nbsp;O_TRUNC.&amp;nbsp;&amp;nbsp;The&amp;nbsp;file&amp;nbsp;status&amp;nbsp;flags&amp;nbsp;are&amp;nbsp;all&amp;nbsp;of&amp;nbsp;the&amp;nbsp;&amp;nbsp;remaining&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;flags&amp;nbsp;&amp;nbsp;listed&amp;nbsp;below.&amp;nbsp;&amp;nbsp;The&amp;nbsp;distinction&amp;nbsp;between&amp;nbsp;these&amp;nbsp;two&amp;nbsp;groups&amp;nbsp;of&amp;nbsp;flags&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is&amp;nbsp;that&amp;nbsp;the&amp;nbsp;file&amp;nbsp;status&amp;nbsp;flags&amp;nbsp;can&amp;nbsp;be&amp;nbsp;retrieved&amp;nbsp;and&amp;nbsp;(in&amp;nbsp;some&amp;nbsp;cases)&amp;nbsp;mod&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ified&amp;nbsp;&amp;nbsp;using&amp;nbsp;&amp;nbsp;fcntl(2).&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;full&amp;nbsp;list&amp;nbsp;of&amp;nbsp;file&amp;nbsp;creation&amp;nbsp;flags&amp;nbsp;and&amp;nbsp;file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status&amp;nbsp;flags&amp;nbsp;is&amp;nbsp;as&amp;nbsp;follows:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_APPEND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;file&amp;nbsp;is&amp;nbsp;opened&amp;nbsp;in&amp;nbsp;append&amp;nbsp;mode.&amp;nbsp;&amp;nbsp;Before&amp;nbsp;&amp;nbsp;each&amp;nbsp;&amp;nbsp;write(2),&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;offset&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;positioned&amp;nbsp;&amp;nbsp;at&amp;nbsp;the&amp;nbsp;end&amp;nbsp;of&amp;nbsp;the&amp;nbsp;file,&amp;nbsp;as&amp;nbsp;if&amp;nbsp;with&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lseek(2).&amp;nbsp;&amp;nbsp;O_APPEND&amp;nbsp;may&amp;nbsp;lead&amp;nbsp;to&amp;nbsp;corrupted&amp;nbsp;files&amp;nbsp;on&amp;nbsp;NFS&amp;nbsp;file&amp;nbsp;sys&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tems&amp;nbsp;&amp;nbsp;if&amp;nbsp;&amp;nbsp;more&amp;nbsp;&amp;nbsp;than&amp;nbsp;one&amp;nbsp;process&amp;nbsp;appends&amp;nbsp;data&amp;nbsp;to&amp;nbsp;a&amp;nbsp;file&amp;nbsp;at&amp;nbsp;once.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This&amp;nbsp;is&amp;nbsp;because&amp;nbsp;NFS&amp;nbsp;does&amp;nbsp;not&amp;nbsp;support&amp;nbsp;appending&amp;nbsp;to&amp;nbsp;a&amp;nbsp;file,&amp;nbsp;so&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;client&amp;nbsp;&amp;nbsp;kernel&amp;nbsp;has&amp;nbsp;to&amp;nbsp;simulate&amp;nbsp;it,&amp;nbsp;which&amp;nbsp;cant&amp;nbsp;be&amp;nbsp;done&amp;nbsp;without&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;race&amp;nbsp;condition.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_ASYNC&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Enable&amp;nbsp;signal-driven&amp;nbsp;I/O:&amp;nbsp;generate&amp;nbsp;a&amp;nbsp;signal&amp;nbsp;(SIGIO&amp;nbsp;&amp;nbsp;by&amp;nbsp;&amp;nbsp;default,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;but&amp;nbsp;&amp;nbsp;this&amp;nbsp;&amp;nbsp;can&amp;nbsp;&amp;nbsp;be&amp;nbsp;&amp;nbsp;changed&amp;nbsp;&amp;nbsp;via&amp;nbsp;&amp;nbsp;fcntl(2))&amp;nbsp;when&amp;nbsp;input&amp;nbsp;or&amp;nbsp;output&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;becomes&amp;nbsp;possible&amp;nbsp;on&amp;nbsp;this&amp;nbsp;file&amp;nbsp;descriptor.&amp;nbsp;&amp;nbsp;This&amp;nbsp;feature&amp;nbsp;is&amp;nbsp;&amp;nbsp;only&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;available&amp;nbsp;&amp;nbsp;for&amp;nbsp;&amp;nbsp;terminals,&amp;nbsp;pseudo-terminals,&amp;nbsp;sockets,&amp;nbsp;and&amp;nbsp;(since&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux&amp;nbsp;2.6)&amp;nbsp;pipes&amp;nbsp;and&amp;nbsp;FIFOs.&amp;nbsp;&amp;nbsp;See&amp;nbsp;fcntl(2)&amp;nbsp;for&amp;nbsp;further&amp;nbsp;details.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_CLOEXEC&amp;nbsp;(Since&amp;nbsp;Linux&amp;nbsp;2.6.23)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Enable&amp;nbsp;the&amp;nbsp;close-on-exec&amp;nbsp;&amp;nbsp;flag&amp;nbsp;&amp;nbsp;for&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;new&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;descriptor.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Specifying&amp;nbsp;&amp;nbsp;this&amp;nbsp;&amp;nbsp;flag&amp;nbsp;&amp;nbsp;permits&amp;nbsp;a&amp;nbsp;program&amp;nbsp;to&amp;nbsp;avoid&amp;nbsp;an&amp;nbsp;additional&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fcntl(2)&amp;nbsp;F_SETFD&amp;nbsp;operation&amp;nbsp;to&amp;nbsp;set&amp;nbsp;the&amp;nbsp;&amp;nbsp;FD_CLOEXEC&amp;nbsp;&amp;nbsp;flag.&amp;nbsp;&amp;nbsp;&amp;nbsp;Addi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tionally,&amp;nbsp;&amp;nbsp;use&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;this&amp;nbsp;flag&amp;nbsp;is&amp;nbsp;essential&amp;nbsp;in&amp;nbsp;some&amp;nbsp;multithreaded&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;programs&amp;nbsp;since&amp;nbsp;using&amp;nbsp;a&amp;nbsp;separate&amp;nbsp;fcntl(2)&amp;nbsp;&amp;nbsp;F_SETFD&amp;nbsp;&amp;nbsp;operation&amp;nbsp;&amp;nbsp;to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;FD_CLOEXEC&amp;nbsp;&amp;nbsp;flag&amp;nbsp;does&amp;nbsp;not&amp;nbsp;suffice&amp;nbsp;to&amp;nbsp;avoid&amp;nbsp;race&amp;nbsp;condi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tions&amp;nbsp;where&amp;nbsp;one&amp;nbsp;thread&amp;nbsp;opens&amp;nbsp;a&amp;nbsp;file&amp;nbsp;descriptor&amp;nbsp;at&amp;nbsp;the&amp;nbsp;same&amp;nbsp;&amp;nbsp;time&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;as&amp;nbsp;another&amp;nbsp;thread&amp;nbsp;does&amp;nbsp;a&amp;nbsp;fork(2)&amp;nbsp;plus&amp;nbsp;execve(2).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_CREAT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;&amp;nbsp;the&amp;nbsp;file&amp;nbsp;does&amp;nbsp;not&amp;nbsp;exist&amp;nbsp;it&amp;nbsp;will&amp;nbsp;be&amp;nbsp;created.&amp;nbsp;&amp;nbsp;The&amp;nbsp;owner&amp;nbsp;(user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID)&amp;nbsp;of&amp;nbsp;the&amp;nbsp;file&amp;nbsp;is&amp;nbsp;set&amp;nbsp;to&amp;nbsp;the&amp;nbsp;effective&amp;nbsp;user&amp;nbsp;ID&amp;nbsp;of&amp;nbsp;the&amp;nbsp;&amp;nbsp;process.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;group&amp;nbsp;&amp;nbsp;ownership&amp;nbsp;&amp;nbsp;(group&amp;nbsp;ID)&amp;nbsp;is&amp;nbsp;set&amp;nbsp;either&amp;nbsp;to&amp;nbsp;the&amp;nbsp;effective&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;group&amp;nbsp;ID&amp;nbsp;of&amp;nbsp;the&amp;nbsp;process&amp;nbsp;or&amp;nbsp;to&amp;nbsp;the&amp;nbsp;group&amp;nbsp;ID&amp;nbsp;of&amp;nbsp;the&amp;nbsp;parent&amp;nbsp;&amp;nbsp;direc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tory&amp;nbsp;&amp;nbsp;(depending&amp;nbsp;&amp;nbsp;on&amp;nbsp;&amp;nbsp;filesystem&amp;nbsp;type&amp;nbsp;and&amp;nbsp;mount&amp;nbsp;options,&amp;nbsp;and&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mode&amp;nbsp;of&amp;nbsp;the&amp;nbsp;&amp;nbsp;parent&amp;nbsp;&amp;nbsp;directory,&amp;nbsp;&amp;nbsp;see,&amp;nbsp;&amp;nbsp;for&amp;nbsp;&amp;nbsp;example,&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;mount&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;options&amp;nbsp;&amp;nbsp;bsdgroups&amp;nbsp;&amp;nbsp;and&amp;nbsp;&amp;nbsp;sysvgroups&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;the&amp;nbsp;ext2&amp;nbsp;filesystem,&amp;nbsp;as&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;described&amp;nbsp;in&amp;nbsp;mount(8)).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_DIRECT&amp;nbsp;(Since&amp;nbsp;Linux&amp;nbsp;2.6.10)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&amp;nbsp;to&amp;nbsp;minimize&amp;nbsp;cache&amp;nbsp;effects&amp;nbsp;of&amp;nbsp;the&amp;nbsp;I/O&amp;nbsp;to&amp;nbsp;and&amp;nbsp;from&amp;nbsp;this&amp;nbsp;&amp;nbsp;file.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In&amp;nbsp;&amp;nbsp;general&amp;nbsp;&amp;nbsp;this&amp;nbsp;&amp;nbsp;will&amp;nbsp;degrade&amp;nbsp;performance,&amp;nbsp;but&amp;nbsp;it&amp;nbsp;is&amp;nbsp;useful&amp;nbsp;in&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;special&amp;nbsp;situations,&amp;nbsp;such&amp;nbsp;&amp;nbsp;as&amp;nbsp;&amp;nbsp;when&amp;nbsp;&amp;nbsp;applications&amp;nbsp;&amp;nbsp;do&amp;nbsp;&amp;nbsp;their&amp;nbsp;&amp;nbsp;own&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;caching.&amp;nbsp;&amp;nbsp;&amp;nbsp;File&amp;nbsp;I/O&amp;nbsp;is&amp;nbsp;done&amp;nbsp;directly&amp;nbsp;to/from&amp;nbsp;user&amp;nbsp;space&amp;nbsp;buffers.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;I/O&amp;nbsp;is&amp;nbsp;synchronous,&amp;nbsp;that&amp;nbsp;is,&amp;nbsp;at&amp;nbsp;the&amp;nbsp;completion&amp;nbsp;of&amp;nbsp;a&amp;nbsp;&amp;nbsp;read(2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;or&amp;nbsp;write(2),&amp;nbsp;data&amp;nbsp;is&amp;nbsp;guaranteed&amp;nbsp;to&amp;nbsp;have&amp;nbsp;been&amp;nbsp;transferred.&amp;nbsp;&amp;nbsp;Under&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux&amp;nbsp;2.4&amp;nbsp;transfer&amp;nbsp;sizes,&amp;nbsp;and&amp;nbsp;the&amp;nbsp;alignment&amp;nbsp;of&amp;nbsp;user&amp;nbsp;&amp;nbsp;buffer&amp;nbsp;&amp;nbsp;and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;offset&amp;nbsp;&amp;nbsp;must&amp;nbsp;all&amp;nbsp;be&amp;nbsp;multiples&amp;nbsp;of&amp;nbsp;the&amp;nbsp;logical&amp;nbsp;block&amp;nbsp;size&amp;nbsp;of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;file&amp;nbsp;system.&amp;nbsp;&amp;nbsp;Under&amp;nbsp;Linux&amp;nbsp;2.6&amp;nbsp;alignment&amp;nbsp;to&amp;nbsp;&amp;nbsp;512-byte&amp;nbsp;&amp;nbsp;bound&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aries&amp;nbsp;suffices.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A&amp;nbsp;&amp;nbsp;semantically&amp;nbsp;&amp;nbsp;similar&amp;nbsp;&amp;nbsp;(but&amp;nbsp;&amp;nbsp;deprecated)&amp;nbsp;&amp;nbsp;interface&amp;nbsp;for&amp;nbsp;block&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;devices&amp;nbsp;is&amp;nbsp;described&amp;nbsp;in&amp;nbsp;raw(8).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_DIRECTORY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;pathname&amp;nbsp;is&amp;nbsp;not&amp;nbsp;a&amp;nbsp;directory,&amp;nbsp;cause&amp;nbsp;the&amp;nbsp;open&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;fail.&amp;nbsp;&amp;nbsp;&amp;nbsp;This&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;flag&amp;nbsp;is&amp;nbsp;Linux-specific,&amp;nbsp;and&amp;nbsp;was&amp;nbsp;added&amp;nbsp;in&amp;nbsp;kernel&amp;nbsp;version&amp;nbsp;2.1.126,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to&amp;nbsp;avoid&amp;nbsp;denial-of-service&amp;nbsp;problems&amp;nbsp;if&amp;nbsp;opendir(3)&amp;nbsp;is&amp;nbsp;called&amp;nbsp;on&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FIFO&amp;nbsp;&amp;nbsp;or&amp;nbsp;&amp;nbsp;tape&amp;nbsp;&amp;nbsp;device,&amp;nbsp;&amp;nbsp;but&amp;nbsp;&amp;nbsp;should&amp;nbsp;&amp;nbsp;not&amp;nbsp;be&amp;nbsp;used&amp;nbsp;outside&amp;nbsp;of&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&amp;nbsp;of&amp;nbsp;opendir(3).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_EXCL&amp;nbsp;Ensure&amp;nbsp;that&amp;nbsp;this&amp;nbsp;call&amp;nbsp;creates&amp;nbsp;the&amp;nbsp;file:&amp;nbsp;if&amp;nbsp;this&amp;nbsp;flag&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;speci&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fied&amp;nbsp;&amp;nbsp;in&amp;nbsp;&amp;nbsp;conjunction&amp;nbsp;with&amp;nbsp;O_CREAT,&amp;nbsp;and&amp;nbsp;pathname&amp;nbsp;already&amp;nbsp;exists,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;then&amp;nbsp;open()&amp;nbsp;will&amp;nbsp;fail.&amp;nbsp;&amp;nbsp;The&amp;nbsp;behavior&amp;nbsp;of&amp;nbsp;O_EXCL&amp;nbsp;is&amp;nbsp;&amp;nbsp;undefined&amp;nbsp;&amp;nbsp;if&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_CREAT&amp;nbsp;is&amp;nbsp;not&amp;nbsp;specified.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;When&amp;nbsp;&amp;nbsp;these&amp;nbsp;two&amp;nbsp;flags&amp;nbsp;are&amp;nbsp;specified,&amp;nbsp;symbolic&amp;nbsp;links&amp;nbsp;are&amp;nbsp;not&amp;nbsp;fol&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lowed:&amp;nbsp;if&amp;nbsp;pathname&amp;nbsp;is&amp;nbsp;a&amp;nbsp;symbolic&amp;nbsp;link,&amp;nbsp;then&amp;nbsp;open()&amp;nbsp;fails&amp;nbsp;regard&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;less&amp;nbsp;of&amp;nbsp;where&amp;nbsp;the&amp;nbsp;symbolic&amp;nbsp;link&amp;nbsp;points&amp;nbsp;to.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_EXCL&amp;nbsp;&amp;nbsp;is&amp;nbsp;not&amp;nbsp;supported&amp;nbsp;on&amp;nbsp;NFSv2&amp;nbsp;or&amp;nbsp;on&amp;nbsp;Linux&amp;nbsp;before&amp;nbsp;kernel&amp;nbsp;2.6;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;it&amp;nbsp;is&amp;nbsp;supported&amp;nbsp;on&amp;nbsp;Linux&amp;nbsp;2.6&amp;nbsp;and&amp;nbsp;later,&amp;nbsp;with&amp;nbsp;NFSv3&amp;nbsp;or&amp;nbsp;later.&amp;nbsp;&amp;nbsp;In&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;environments&amp;nbsp;&amp;nbsp;where&amp;nbsp;NFS&amp;nbsp;O_EXCL&amp;nbsp;support&amp;nbsp;is&amp;nbsp;not&amp;nbsp;provided,&amp;nbsp;programs&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that&amp;nbsp;rely&amp;nbsp;on&amp;nbsp;it&amp;nbsp;for&amp;nbsp;performing&amp;nbsp;locking&amp;nbsp;tasks&amp;nbsp;will&amp;nbsp;contain&amp;nbsp;a&amp;nbsp;race&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;condition.&amp;nbsp;&amp;nbsp;&amp;nbsp;Portable&amp;nbsp;&amp;nbsp;programs&amp;nbsp;that&amp;nbsp;want&amp;nbsp;to&amp;nbsp;perform&amp;nbsp;atomic&amp;nbsp;file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;locking&amp;nbsp;using&amp;nbsp;a&amp;nbsp;lockfile,&amp;nbsp;and&amp;nbsp;need&amp;nbsp;to&amp;nbsp;avoid&amp;nbsp;reliance&amp;nbsp;on&amp;nbsp;NFS&amp;nbsp;sup&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;port&amp;nbsp;&amp;nbsp;for&amp;nbsp;O_EXCL,&amp;nbsp;can&amp;nbsp;create&amp;nbsp;a&amp;nbsp;unique&amp;nbsp;file&amp;nbsp;on&amp;nbsp;the&amp;nbsp;same&amp;nbsp;file&amp;nbsp;sys&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tem&amp;nbsp;(e.g.,&amp;nbsp;incorporating&amp;nbsp;hostname&amp;nbsp;and&amp;nbsp;PID),&amp;nbsp;and&amp;nbsp;use&amp;nbsp;&amp;nbsp;link(2)&amp;nbsp;&amp;nbsp;to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;make&amp;nbsp;&amp;nbsp;a&amp;nbsp;link&amp;nbsp;to&amp;nbsp;the&amp;nbsp;lockfile.&amp;nbsp;&amp;nbsp;If&amp;nbsp;link(2)&amp;nbsp;returns&amp;nbsp;0,&amp;nbsp;the&amp;nbsp;lock&amp;nbsp;is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;successful.&amp;nbsp;&amp;nbsp;Otherwise,&amp;nbsp;use&amp;nbsp;stat(2)&amp;nbsp;on&amp;nbsp;the&amp;nbsp;unique&amp;nbsp;file&amp;nbsp;to&amp;nbsp;&amp;nbsp;check&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;&amp;nbsp;its&amp;nbsp;link&amp;nbsp;count&amp;nbsp;has&amp;nbsp;increased&amp;nbsp;to&amp;nbsp;2,&amp;nbsp;in&amp;nbsp;which&amp;nbsp;case&amp;nbsp;the&amp;nbsp;lock&amp;nbsp;is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;also&amp;nbsp;successful.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_LARGEFILE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(LFS)&amp;nbsp;Allow&amp;nbsp;files&amp;nbsp;whose&amp;nbsp;sizes&amp;nbsp;cannot&amp;nbsp;be&amp;nbsp;represented&amp;nbsp;in&amp;nbsp;an&amp;nbsp;&amp;nbsp;off_t&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(but&amp;nbsp;&amp;nbsp;can&amp;nbsp;&amp;nbsp;be&amp;nbsp;&amp;nbsp;represented&amp;nbsp;&amp;nbsp;in&amp;nbsp;&amp;nbsp;an&amp;nbsp;&amp;nbsp;off64_t)&amp;nbsp;&amp;nbsp;to&amp;nbsp;be&amp;nbsp;opened.&amp;nbsp;&amp;nbsp;The&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_LARGEFILE64_SOURCE&amp;nbsp;macro&amp;nbsp;must&amp;nbsp;be&amp;nbsp;defined&amp;nbsp;&amp;nbsp;in&amp;nbsp;&amp;nbsp;order&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;obtain&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this&amp;nbsp;&amp;nbsp;definition.&amp;nbsp;&amp;nbsp;&amp;nbsp;Setting&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;_FILE_OFFSET_BITS&amp;nbsp;feature&amp;nbsp;test&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;macro&amp;nbsp;to&amp;nbsp;64&amp;nbsp;(rather&amp;nbsp;than&amp;nbsp;using&amp;nbsp;&amp;nbsp;O_LARGEFILE)&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;preferred&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;method&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;obtaining&amp;nbsp;&amp;nbsp;method&amp;nbsp;of&amp;nbsp;accessing&amp;nbsp;large&amp;nbsp;files&amp;nbsp;on&amp;nbsp;32-bit&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;systems&amp;nbsp;(see&amp;nbsp;feature_test_macros(7)).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_NOATIME&amp;nbsp;(Since&amp;nbsp;Linux&amp;nbsp;2.6.8)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Do&amp;nbsp;not&amp;nbsp;update&amp;nbsp;the&amp;nbsp;file&amp;nbsp;last&amp;nbsp;access&amp;nbsp;time&amp;nbsp;(st_atime&amp;nbsp;in&amp;nbsp;the&amp;nbsp;&amp;nbsp;inode)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;when&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;read(2).&amp;nbsp;&amp;nbsp;&amp;nbsp;This&amp;nbsp;flag&amp;nbsp;is&amp;nbsp;intended&amp;nbsp;for&amp;nbsp;use&amp;nbsp;by&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;indexing&amp;nbsp;or&amp;nbsp;backup&amp;nbsp;programs,&amp;nbsp;where&amp;nbsp;&amp;nbsp;its&amp;nbsp;&amp;nbsp;use&amp;nbsp;&amp;nbsp;can&amp;nbsp;&amp;nbsp;significantly&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reduce&amp;nbsp;the&amp;nbsp;amount&amp;nbsp;of&amp;nbsp;disk&amp;nbsp;activity.&amp;nbsp;&amp;nbsp;This&amp;nbsp;flag&amp;nbsp;may&amp;nbsp;not&amp;nbsp;be&amp;nbsp;effec&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tive&amp;nbsp;on&amp;nbsp;all&amp;nbsp;filesystems.&amp;nbsp;&amp;nbsp;One&amp;nbsp;example&amp;nbsp;is&amp;nbsp;NFS,&amp;nbsp;where&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;server&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;maintains&amp;nbsp;the&amp;nbsp;access&amp;nbsp;time.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_NOCTTY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;&amp;nbsp;pathname&amp;nbsp;&amp;nbsp;refers&amp;nbsp;to&amp;nbsp;a&amp;nbsp;terminal&amp;nbsp;device&amp;nbsp;&amp;nbsp;see&amp;nbsp;tty(4)&amp;nbsp;&amp;nbsp;it&amp;nbsp;will&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;not&amp;nbsp;become&amp;nbsp;the&amp;nbsp;processs&amp;nbsp;controlling&amp;nbsp;terminal&amp;nbsp;even&amp;nbsp;if&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;pro&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cess&amp;nbsp;does&amp;nbsp;not&amp;nbsp;have&amp;nbsp;one.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_NOFOLLOW&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;&amp;nbsp;pathname&amp;nbsp;is&amp;nbsp;a&amp;nbsp;symbolic&amp;nbsp;link,&amp;nbsp;then&amp;nbsp;the&amp;nbsp;open&amp;nbsp;fails.&amp;nbsp;&amp;nbsp;This&amp;nbsp;is&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FreeBSD&amp;nbsp;extension,&amp;nbsp;which&amp;nbsp;was&amp;nbsp;added&amp;nbsp;to&amp;nbsp;Linux&amp;nbsp;in&amp;nbsp;version&amp;nbsp;&amp;nbsp;2.1.126.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Symbolic&amp;nbsp;&amp;nbsp;links&amp;nbsp;in&amp;nbsp;earlier&amp;nbsp;components&amp;nbsp;of&amp;nbsp;the&amp;nbsp;pathname&amp;nbsp;will&amp;nbsp;still&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;be&amp;nbsp;followed.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_NONBLOCK&amp;nbsp;or&amp;nbsp;O_NDELAY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;When&amp;nbsp;possible,&amp;nbsp;the&amp;nbsp;file&amp;nbsp;is&amp;nbsp;opened&amp;nbsp;in&amp;nbsp;non-blocking&amp;nbsp;mode.&amp;nbsp;&amp;nbsp;Neither&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;open()&amp;nbsp;nor&amp;nbsp;any&amp;nbsp;subsequent&amp;nbsp;operations&amp;nbsp;on&amp;nbsp;the&amp;nbsp;file&amp;nbsp;descriptor&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;which&amp;nbsp;is&amp;nbsp;returned&amp;nbsp;will&amp;nbsp;cause&amp;nbsp;the&amp;nbsp;calling&amp;nbsp;process&amp;nbsp;to&amp;nbsp;&amp;nbsp;wait.&amp;nbsp;&amp;nbsp;&amp;nbsp;For&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;handling&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;FIFOs&amp;nbsp;(named&amp;nbsp;pipes),&amp;nbsp;see&amp;nbsp;also&amp;nbsp;fifo(7).&amp;nbsp;&amp;nbsp;For&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;discussion&amp;nbsp;of&amp;nbsp;the&amp;nbsp;&amp;nbsp;effect&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;O_NONBLOCK&amp;nbsp;&amp;nbsp;in&amp;nbsp;&amp;nbsp;conjunction&amp;nbsp;&amp;nbsp;with&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mandatory&amp;nbsp;file&amp;nbsp;locks&amp;nbsp;and&amp;nbsp;with&amp;nbsp;file&amp;nbsp;leases,&amp;nbsp;see&amp;nbsp;fcntl(2).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_SYNC&amp;nbsp;The&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;opened&amp;nbsp;for&amp;nbsp;synchronous&amp;nbsp;I/O.&amp;nbsp;&amp;nbsp;Any&amp;nbsp;write(2)s&amp;nbsp;on&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resulting&amp;nbsp;file&amp;nbsp;descriptor&amp;nbsp;will&amp;nbsp;block&amp;nbsp;the&amp;nbsp;calling&amp;nbsp;&amp;nbsp;process&amp;nbsp;&amp;nbsp;until&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;data&amp;nbsp;has&amp;nbsp;been&amp;nbsp;physically&amp;nbsp;written&amp;nbsp;to&amp;nbsp;the&amp;nbsp;underlying&amp;nbsp;hardware.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;But&amp;nbsp;see&amp;nbsp;NOTES&amp;nbsp;below.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_TRUNC&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;the&amp;nbsp;file&amp;nbsp;already&amp;nbsp;exists&amp;nbsp;and&amp;nbsp;is&amp;nbsp;a&amp;nbsp;regular&amp;nbsp;file&amp;nbsp;&amp;nbsp;and&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;open&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mode&amp;nbsp;&amp;nbsp;allows&amp;nbsp;&amp;nbsp;writing&amp;nbsp;&amp;nbsp;(i.e.,&amp;nbsp;&amp;nbsp;is&amp;nbsp;O_RDWR&amp;nbsp;or&amp;nbsp;O_WRONLY)&amp;nbsp;it&amp;nbsp;will&amp;nbsp;be&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;truncated&amp;nbsp;to&amp;nbsp;length&amp;nbsp;0.&amp;nbsp;&amp;nbsp;If&amp;nbsp;the&amp;nbsp;file&amp;nbsp;is&amp;nbsp;a&amp;nbsp;FIFO&amp;nbsp;or&amp;nbsp;terminal&amp;nbsp;device&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file,&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;O_TRUNC&amp;nbsp;&amp;nbsp;flag&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;ignored.&amp;nbsp;&amp;nbsp;Otherwise&amp;nbsp;the&amp;nbsp;effect&amp;nbsp;of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_TRUNC&amp;nbsp;is&amp;nbsp;unspecified.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Some&amp;nbsp;of&amp;nbsp;these&amp;nbsp;optional&amp;nbsp;flags&amp;nbsp;can&amp;nbsp;be&amp;nbsp;altered&amp;nbsp;using&amp;nbsp;&amp;nbsp;fcntl(2)&amp;nbsp;&amp;nbsp;after&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file&amp;nbsp;has&amp;nbsp;been&amp;nbsp;opened.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;argument&amp;nbsp;&amp;nbsp;mode&amp;nbsp;specifies&amp;nbsp;the&amp;nbsp;permissions&amp;nbsp;to&amp;nbsp;use&amp;nbsp;in&amp;nbsp;case&amp;nbsp;a&amp;nbsp;new&amp;nbsp;file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is&amp;nbsp;created.&amp;nbsp;&amp;nbsp;It&amp;nbsp;is&amp;nbsp;modified&amp;nbsp;by&amp;nbsp;the&amp;nbsp;processs&amp;nbsp;umask&amp;nbsp;in&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;usual&amp;nbsp;&amp;nbsp;way:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;permissions&amp;nbsp;if&amp;nbsp;the&amp;nbsp;&amp;nbsp;created&amp;nbsp;file&amp;nbsp;are&amp;nbsp;(mode&amp;nbsp;&amp;amp;&amp;nbsp;~umask).Note&amp;nbsp;that&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this&amp;nbsp;mode&amp;nbsp;only&amp;nbsp;applies&amp;nbsp;to&amp;nbsp;future&amp;nbsp;accesses&amp;nbsp;of&amp;nbsp;the&amp;nbsp;&amp;nbsp;newly&amp;nbsp;&amp;nbsp;created&amp;nbsp;&amp;nbsp;file;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;open()&amp;nbsp;&amp;nbsp;call&amp;nbsp;&amp;nbsp;that&amp;nbsp;&amp;nbsp;creates&amp;nbsp;&amp;nbsp;a&amp;nbsp;&amp;nbsp;read-only&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;may&amp;nbsp;well&amp;nbsp;return&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;read/write&amp;nbsp;file&amp;nbsp;descriptor.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;following&amp;nbsp;symbolic&amp;nbsp;constants&amp;nbsp;are&amp;nbsp;provided&amp;nbsp;for&amp;nbsp;mode:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IRWXU&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00700&amp;nbsp;user&amp;nbsp;(file&amp;nbsp;owner)&amp;nbsp;has&amp;nbsp;read,&amp;nbsp;write&amp;nbsp;and&amp;nbsp;execute&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IRUSR&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00400&amp;nbsp;user&amp;nbsp;has&amp;nbsp;read&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IWUSR&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00200&amp;nbsp;user&amp;nbsp;has&amp;nbsp;write&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IXUSR&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00100&amp;nbsp;user&amp;nbsp;has&amp;nbsp;execute&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IRWXG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00070&amp;nbsp;group&amp;nbsp;has&amp;nbsp;read,&amp;nbsp;write&amp;nbsp;and&amp;nbsp;execute&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IRGRP&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00040&amp;nbsp;group&amp;nbsp;has&amp;nbsp;read&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IWGRP&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00020&amp;nbsp;group&amp;nbsp;has&amp;nbsp;write&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IXGRP&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00010&amp;nbsp;group&amp;nbsp;has&amp;nbsp;execute&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IRWXO&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00007&amp;nbsp;others&amp;nbsp;have&amp;nbsp;read,&amp;nbsp;write&amp;nbsp;and&amp;nbsp;execute&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IROTH&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00004&amp;nbsp;others&amp;nbsp;have&amp;nbsp;read&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IWOTH&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00002&amp;nbsp;others&amp;nbsp;have&amp;nbsp;write&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S_IXOTH&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00001&amp;nbsp;others&amp;nbsp;have&amp;nbsp;execute&amp;nbsp;permission&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mode&amp;nbsp;must&amp;nbsp;be&amp;nbsp;specified&amp;nbsp;when&amp;nbsp;O_CREAT&amp;nbsp;is&amp;nbsp;in&amp;nbsp;the&amp;nbsp;&amp;nbsp;flags,&amp;nbsp;&amp;nbsp;and&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;ignored&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;otherwise.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;creat()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;equivalent&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;open()&amp;nbsp;&amp;nbsp;&amp;nbsp;with&amp;nbsp;&amp;nbsp;&amp;nbsp;flags&amp;nbsp;&amp;nbsp;&amp;nbsp;equal&amp;nbsp;&amp;nbsp;&amp;nbsp;to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_CREAT|O_WRONLY|O_TRUNC.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;RETURN&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;VALUE&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;open()&amp;nbsp;and&amp;nbsp;creat()&amp;nbsp;return&amp;nbsp;the&amp;nbsp;new&amp;nbsp;file&amp;nbsp;descriptor,&amp;nbsp;or&amp;nbsp;-1&amp;nbsp;&amp;nbsp;if&amp;nbsp;&amp;nbsp;an&amp;nbsp;&amp;nbsp;error&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;occurred&amp;nbsp;(in&amp;nbsp;which&amp;nbsp;case,&amp;nbsp;errno&amp;nbsp;is&amp;nbsp;set&amp;nbsp;appropriately).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EACCES&amp;nbsp;The&amp;nbsp;&amp;nbsp;requested&amp;nbsp;access&amp;nbsp;to&amp;nbsp;the&amp;nbsp;file&amp;nbsp;is&amp;nbsp;not&amp;nbsp;allowed,&amp;nbsp;or&amp;nbsp;search&amp;nbsp;per&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mission&amp;nbsp;is&amp;nbsp;denied&amp;nbsp;for&amp;nbsp;one&amp;nbsp;of&amp;nbsp;the&amp;nbsp;directories&amp;nbsp;in&amp;nbsp;the&amp;nbsp;path&amp;nbsp;&amp;nbsp;prefix&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;pathname,&amp;nbsp;&amp;nbsp;or&amp;nbsp;the&amp;nbsp;file&amp;nbsp;did&amp;nbsp;not&amp;nbsp;exist&amp;nbsp;yet&amp;nbsp;and&amp;nbsp;write&amp;nbsp;access&amp;nbsp;to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;parent&amp;nbsp;directory&amp;nbsp;is&amp;nbsp;not&amp;nbsp;&amp;nbsp;allowed.&amp;nbsp;&amp;nbsp;&amp;nbsp;(See&amp;nbsp;&amp;nbsp;also&amp;nbsp;&amp;nbsp;path_resolu&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tion(7).)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EEXIST&amp;nbsp;pathname&amp;nbsp;already&amp;nbsp;exists&amp;nbsp;and&amp;nbsp;O_CREAT&amp;nbsp;and&amp;nbsp;O_EXCL&amp;nbsp;were&amp;nbsp;used.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EFAULT&amp;nbsp;pathname&amp;nbsp;points&amp;nbsp;outside&amp;nbsp;your&amp;nbsp;accessible&amp;nbsp;address&amp;nbsp;space.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EFBIG&amp;nbsp;&amp;nbsp;pathname&amp;nbsp;&amp;nbsp;refers&amp;nbsp;&amp;nbsp;to&amp;nbsp;a&amp;nbsp;regular&amp;nbsp;file,&amp;nbsp;too&amp;nbsp;large&amp;nbsp;to&amp;nbsp;be&amp;nbsp;opened;&amp;nbsp;see&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_LARGEFILE&amp;nbsp;above.&amp;nbsp;&amp;nbsp;(POSIX.1-2001&amp;nbsp;specifies&amp;nbsp;the&amp;nbsp;error&amp;nbsp;&amp;nbsp;EOVERFLOW&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;this&amp;nbsp;case.)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EISDIR&amp;nbsp;pathname&amp;nbsp;refers&amp;nbsp;to&amp;nbsp;a&amp;nbsp;directory&amp;nbsp;and&amp;nbsp;the&amp;nbsp;access&amp;nbsp;requested&amp;nbsp;involved&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writing&amp;nbsp;(that&amp;nbsp;is,&amp;nbsp;O_WRONLY&amp;nbsp;or&amp;nbsp;O_RDWR&amp;nbsp;is&amp;nbsp;set).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ELOOP&amp;nbsp;&amp;nbsp;Too&amp;nbsp;many&amp;nbsp;symbolic&amp;nbsp;links&amp;nbsp;were&amp;nbsp;encountered&amp;nbsp;in&amp;nbsp;resolving&amp;nbsp;&amp;nbsp;pathname,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;or&amp;nbsp;O_NOFOLLOW&amp;nbsp;was&amp;nbsp;specified&amp;nbsp;but&amp;nbsp;pathname&amp;nbsp;was&amp;nbsp;a&amp;nbsp;symbolic&amp;nbsp;link.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EMFILE&amp;nbsp;The&amp;nbsp;process&amp;nbsp;already&amp;nbsp;has&amp;nbsp;the&amp;nbsp;maximum&amp;nbsp;number&amp;nbsp;of&amp;nbsp;files&amp;nbsp;open.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENAMETOOLONG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pathname&amp;nbsp;was&amp;nbsp;too&amp;nbsp;long.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENFILE&amp;nbsp;The&amp;nbsp;&amp;nbsp;system&amp;nbsp;&amp;nbsp;limit&amp;nbsp;&amp;nbsp;on&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;total&amp;nbsp;number&amp;nbsp;of&amp;nbsp;open&amp;nbsp;files&amp;nbsp;has&amp;nbsp;been&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reached.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENODEV&amp;nbsp;pathname&amp;nbsp;refers&amp;nbsp;to&amp;nbsp;a&amp;nbsp;device&amp;nbsp;special&amp;nbsp;file&amp;nbsp;&amp;nbsp;and&amp;nbsp;&amp;nbsp;no&amp;nbsp;&amp;nbsp;corresponding&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;device&amp;nbsp;&amp;nbsp;exists.&amp;nbsp;&amp;nbsp;&amp;nbsp;(This&amp;nbsp;is&amp;nbsp;a&amp;nbsp;Linux&amp;nbsp;kernel&amp;nbsp;bug;&amp;nbsp;in&amp;nbsp;this&amp;nbsp;situation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENXIO&amp;nbsp;must&amp;nbsp;be&amp;nbsp;returned.)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENOENT&amp;nbsp;O_CREAT&amp;nbsp;is&amp;nbsp;not&amp;nbsp;set&amp;nbsp;and&amp;nbsp;the&amp;nbsp;named&amp;nbsp;file&amp;nbsp;does&amp;nbsp;&amp;nbsp;not&amp;nbsp;&amp;nbsp;exist.&amp;nbsp;&amp;nbsp;&amp;nbsp;Or,&amp;nbsp;&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;directory&amp;nbsp;&amp;nbsp;component&amp;nbsp;in&amp;nbsp;pathname&amp;nbsp;does&amp;nbsp;not&amp;nbsp;exist&amp;nbsp;or&amp;nbsp;is&amp;nbsp;a&amp;nbsp;dangling&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;symbolic&amp;nbsp;link.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENOMEM&amp;nbsp;Insufficient&amp;nbsp;kernel&amp;nbsp;memory&amp;nbsp;was&amp;nbsp;available.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENOSPC&amp;nbsp;pathname&amp;nbsp;was&amp;nbsp;to&amp;nbsp;be&amp;nbsp;created&amp;nbsp;but&amp;nbsp;the&amp;nbsp;&amp;nbsp;device&amp;nbsp;&amp;nbsp;containing&amp;nbsp;&amp;nbsp;pathname&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;has&amp;nbsp;no&amp;nbsp;room&amp;nbsp;for&amp;nbsp;the&amp;nbsp;new&amp;nbsp;file.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENOTDIR&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A&amp;nbsp;&amp;nbsp;component&amp;nbsp;&amp;nbsp;used&amp;nbsp;as&amp;nbsp;a&amp;nbsp;directory&amp;nbsp;in&amp;nbsp;pathname&amp;nbsp;is&amp;nbsp;not,&amp;nbsp;in&amp;nbsp;fact,&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;directory,&amp;nbsp;or&amp;nbsp;O_DIRECTORY&amp;nbsp;was&amp;nbsp;specified&amp;nbsp;and&amp;nbsp;pathname&amp;nbsp;was&amp;nbsp;&amp;nbsp;not&amp;nbsp;&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;directory.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENXIO&amp;nbsp;&amp;nbsp;O_NONBLOCK&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;O_WRONLY&amp;nbsp;&amp;nbsp;is&amp;nbsp;set,&amp;nbsp;the&amp;nbsp;named&amp;nbsp;file&amp;nbsp;is&amp;nbsp;a&amp;nbsp;FIFO&amp;nbsp;and&amp;nbsp;no&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process&amp;nbsp;has&amp;nbsp;the&amp;nbsp;file&amp;nbsp;open&amp;nbsp;for&amp;nbsp;reading.&amp;nbsp;&amp;nbsp;Or,&amp;nbsp;the&amp;nbsp;file&amp;nbsp;is&amp;nbsp;a&amp;nbsp;device&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;special&amp;nbsp;file&amp;nbsp;and&amp;nbsp;no&amp;nbsp;corresponding&amp;nbsp;device&amp;nbsp;exists.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EPERM&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;O_NOATIME&amp;nbsp;&amp;nbsp;flag&amp;nbsp;was&amp;nbsp;specified,&amp;nbsp;but&amp;nbsp;the&amp;nbsp;effective&amp;nbsp;user&amp;nbsp;ID&amp;nbsp;of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;caller&amp;nbsp;did&amp;nbsp;not&amp;nbsp;match&amp;nbsp;the&amp;nbsp;owner&amp;nbsp;of&amp;nbsp;the&amp;nbsp;file&amp;nbsp;&amp;nbsp;and&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;caller&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;was&amp;nbsp;not&amp;nbsp;privileged&amp;nbsp;(CAP_FOWNER).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EROFS&amp;nbsp;&amp;nbsp;pathname&amp;nbsp;&amp;nbsp;refers&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;a&amp;nbsp;file&amp;nbsp;on&amp;nbsp;a&amp;nbsp;read-only&amp;nbsp;filesystem&amp;nbsp;and&amp;nbsp;write&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access&amp;nbsp;was&amp;nbsp;requested.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ETXTBSY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pathname&amp;nbsp;refers&amp;nbsp;to&amp;nbsp;an&amp;nbsp;executable&amp;nbsp;image&amp;nbsp;which&amp;nbsp;is&amp;nbsp;currently&amp;nbsp;&amp;nbsp;being&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;executed&amp;nbsp;and&amp;nbsp;write&amp;nbsp;access&amp;nbsp;was&amp;nbsp;requested.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EWOULDBLOCK&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;O_NONBLOCK&amp;nbsp;flag&amp;nbsp;was&amp;nbsp;specified,&amp;nbsp;and&amp;nbsp;an&amp;nbsp;incompatible&amp;nbsp;lease&amp;nbsp;was&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;held&amp;nbsp;on&amp;nbsp;the&amp;nbsp;file&amp;nbsp;(see&amp;nbsp;fcntl(2)).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CONFORMING&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;TO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SVr4,&amp;nbsp;4.3BSD,&amp;nbsp;POSIX.1-2001.&amp;nbsp;&amp;nbsp;The&amp;nbsp;O_CLOEXEC,&amp;nbsp;O_DIRECTORY,&amp;nbsp;O_NOATIME,&amp;nbsp;and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_NOFOLLOW&amp;nbsp;&amp;nbsp;flags&amp;nbsp;&amp;nbsp;are&amp;nbsp;&amp;nbsp;Linux-specific.&amp;nbsp;&amp;nbsp;&amp;nbsp;One&amp;nbsp;&amp;nbsp;may&amp;nbsp;&amp;nbsp;have&amp;nbsp;&amp;nbsp;to&amp;nbsp;define&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_GNU_SOURCE&amp;nbsp;macro&amp;nbsp;to&amp;nbsp;get&amp;nbsp;their&amp;nbsp;definitions.&amp;nbsp;&amp;nbsp;O_DIRECT&amp;nbsp;is&amp;nbsp;not&amp;nbsp;&amp;nbsp;specified&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;in&amp;nbsp;POSIX;&amp;nbsp;one&amp;nbsp;has&amp;nbsp;to&amp;nbsp;define&amp;nbsp;_GNU_SOURCE&amp;nbsp;to&amp;nbsp;get&amp;nbsp;its&amp;nbsp;definition.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;NOTES&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Under&amp;nbsp;&amp;nbsp;Linux,&amp;nbsp;&amp;nbsp;the&amp;nbsp;O_NONBLOCK&amp;nbsp;flag&amp;nbsp;indicates&amp;nbsp;that&amp;nbsp;one&amp;nbsp;wants&amp;nbsp;to&amp;nbsp;open&amp;nbsp;but&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;does&amp;nbsp;not&amp;nbsp;necessarily&amp;nbsp;have&amp;nbsp;the&amp;nbsp;intention&amp;nbsp;to&amp;nbsp;read&amp;nbsp;or&amp;nbsp;write.&amp;nbsp;&amp;nbsp;This&amp;nbsp;is&amp;nbsp;typ&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ically&amp;nbsp;&amp;nbsp;used&amp;nbsp;&amp;nbsp;to&amp;nbsp;open&amp;nbsp;devices&amp;nbsp;in&amp;nbsp;order&amp;nbsp;to&amp;nbsp;get&amp;nbsp;a&amp;nbsp;file&amp;nbsp;descriptor&amp;nbsp;for&amp;nbsp;use&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;with&amp;nbsp;ioctl(2).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;(undefined)&amp;nbsp;effect&amp;nbsp;of&amp;nbsp;O_RDONLY&amp;nbsp;|&amp;nbsp;O_TRUNC&amp;nbsp;varies&amp;nbsp;&amp;nbsp;among&amp;nbsp;&amp;nbsp;implementa&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tions.&amp;nbsp;&amp;nbsp;On&amp;nbsp;many&amp;nbsp;systems&amp;nbsp;the&amp;nbsp;file&amp;nbsp;is&amp;nbsp;actually&amp;nbsp;truncated.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;O_DIRECT&amp;nbsp;&amp;nbsp;flag&amp;nbsp;&amp;nbsp;was&amp;nbsp;introduced&amp;nbsp;in&amp;nbsp;SGI&amp;nbsp;IRIX,&amp;nbsp;where&amp;nbsp;it&amp;nbsp;has&amp;nbsp;alignment&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;restrictions&amp;nbsp;similar&amp;nbsp;to&amp;nbsp;those&amp;nbsp;of&amp;nbsp;Linux&amp;nbsp;2.4.&amp;nbsp;&amp;nbsp;IRIX&amp;nbsp;has&amp;nbsp;also&amp;nbsp;&amp;nbsp;a&amp;nbsp;&amp;nbsp;fcntl(2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;query&amp;nbsp;&amp;nbsp;appropriate&amp;nbsp;alignments,&amp;nbsp;and&amp;nbsp;sizes.&amp;nbsp;&amp;nbsp;FreeBSD&amp;nbsp;4.x&amp;nbsp;intro&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;duced&amp;nbsp;a&amp;nbsp;flag&amp;nbsp;of&amp;nbsp;same&amp;nbsp;name,&amp;nbsp;but&amp;nbsp;without&amp;nbsp;alignment&amp;nbsp;restrictions.&amp;nbsp;&amp;nbsp;Support&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;was&amp;nbsp;&amp;nbsp;added&amp;nbsp;&amp;nbsp;under&amp;nbsp;&amp;nbsp;Linux&amp;nbsp;in&amp;nbsp;kernel&amp;nbsp;version&amp;nbsp;2.4.10.&amp;nbsp;&amp;nbsp;Older&amp;nbsp;Linux&amp;nbsp;kernels&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;simply&amp;nbsp;ignore&amp;nbsp;this&amp;nbsp;flag.&amp;nbsp;&amp;nbsp;One&amp;nbsp;may&amp;nbsp;have&amp;nbsp;to&amp;nbsp;define&amp;nbsp;the&amp;nbsp;_GNU_SOURCE&amp;nbsp;&amp;nbsp;macro&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to&amp;nbsp;get&amp;nbsp;its&amp;nbsp;definition.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;There&amp;nbsp;&amp;nbsp;are&amp;nbsp;&amp;nbsp;many&amp;nbsp;infelicities&amp;nbsp;in&amp;nbsp;the&amp;nbsp;protocol&amp;nbsp;underlying&amp;nbsp;NFS,&amp;nbsp;affecting&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;amongst&amp;nbsp;others&amp;nbsp;O_SYNC&amp;nbsp;and&amp;nbsp;O_NDELAY.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;POSIX&amp;nbsp;provides&amp;nbsp;for&amp;nbsp;three&amp;nbsp;different&amp;nbsp;variants&amp;nbsp;of&amp;nbsp;synchronized&amp;nbsp;I/O,&amp;nbsp;corre&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sponding&amp;nbsp;to&amp;nbsp;the&amp;nbsp;flags&amp;nbsp;O_SYNC,&amp;nbsp;O_DSYNC&amp;nbsp;and&amp;nbsp;O_RSYNC.&amp;nbsp;&amp;nbsp;Currently&amp;nbsp;(2.1.130)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;these&amp;nbsp;are&amp;nbsp;all&amp;nbsp;synonymous&amp;nbsp;under&amp;nbsp;Linux.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Note&amp;nbsp;that&amp;nbsp;open()&amp;nbsp;can&amp;nbsp;open&amp;nbsp;device&amp;nbsp;special&amp;nbsp;files,&amp;nbsp;but&amp;nbsp;creat()&amp;nbsp;cannot&amp;nbsp;cre&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ate&amp;nbsp;them;&amp;nbsp;use&amp;nbsp;mknod(2)&amp;nbsp;instead.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On&amp;nbsp;&amp;nbsp;NFS&amp;nbsp;file&amp;nbsp;systems&amp;nbsp;with&amp;nbsp;UID&amp;nbsp;mapping&amp;nbsp;enabled,&amp;nbsp;open()&amp;nbsp;may&amp;nbsp;return&amp;nbsp;a&amp;nbsp;file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;descriptor&amp;nbsp;but,&amp;nbsp;for&amp;nbsp;example,&amp;nbsp;read(2)&amp;nbsp;requests&amp;nbsp;are&amp;nbsp;denied&amp;nbsp;&amp;nbsp;with&amp;nbsp;&amp;nbsp;EACCES.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This&amp;nbsp;is&amp;nbsp;because&amp;nbsp;the&amp;nbsp;client&amp;nbsp;performs&amp;nbsp;open()&amp;nbsp;by&amp;nbsp;checking&amp;nbsp;the&amp;nbsp;permissions,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;but&amp;nbsp;UID&amp;nbsp;mapping&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;performed&amp;nbsp;&amp;nbsp;by&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;server&amp;nbsp;&amp;nbsp;upon&amp;nbsp;&amp;nbsp;read&amp;nbsp;&amp;nbsp;and&amp;nbsp;&amp;nbsp;write&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;requests.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;file&amp;nbsp;is&amp;nbsp;newly&amp;nbsp;created,&amp;nbsp;its&amp;nbsp;st_atime,&amp;nbsp;st_ctime,&amp;nbsp;st_mtime&amp;nbsp;fields&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(respectively,&amp;nbsp;time&amp;nbsp;of&amp;nbsp;last&amp;nbsp;access,&amp;nbsp;time&amp;nbsp;of&amp;nbsp;&amp;nbsp;last&amp;nbsp;&amp;nbsp;status&amp;nbsp;&amp;nbsp;change,&amp;nbsp;&amp;nbsp;and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;last&amp;nbsp;&amp;nbsp;modification;&amp;nbsp;see&amp;nbsp;stat(2))&amp;nbsp;are&amp;nbsp;set&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;time,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;and&amp;nbsp;so&amp;nbsp;are&amp;nbsp;the&amp;nbsp;st_ctime&amp;nbsp;and&amp;nbsp;st_mtime&amp;nbsp;fields&amp;nbsp;of&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;parent&amp;nbsp;&amp;nbsp;directory.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Otherwise,&amp;nbsp;&amp;nbsp;if&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;is&amp;nbsp;modified&amp;nbsp;because&amp;nbsp;of&amp;nbsp;the&amp;nbsp;O_TRUNC&amp;nbsp;flag,&amp;nbsp;its&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st_ctime&amp;nbsp;and&amp;nbsp;st_mtime&amp;nbsp;fields&amp;nbsp;are&amp;nbsp;set&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;BUGS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"The&amp;nbsp;thing&amp;nbsp;that&amp;nbsp;has&amp;nbsp;always&amp;nbsp;disturbed&amp;nbsp;me&amp;nbsp;&amp;nbsp;about&amp;nbsp;&amp;nbsp;O_DIRECT&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;that&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;whole&amp;nbsp;interface&amp;nbsp;is&amp;nbsp;just&amp;nbsp;stupid,&amp;nbsp;and&amp;nbsp;was&amp;nbsp;probably&amp;nbsp;designed&amp;nbsp;by&amp;nbsp;a&amp;nbsp;deranged&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;monkey&amp;nbsp;on&amp;nbsp;some&amp;nbsp;serious&amp;nbsp;mind-controlling&amp;nbsp;substances."&amp;nbsp;&amp;nbsp;Linus&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Currently,&amp;nbsp;it&amp;nbsp;is&amp;nbsp;not&amp;nbsp;possible&amp;nbsp;to&amp;nbsp;enable&amp;nbsp;signal-driven&amp;nbsp;I/O&amp;nbsp;by&amp;nbsp;specifying&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O_ASYNC&amp;nbsp;when&amp;nbsp;calling&amp;nbsp;open();&amp;nbsp;use&amp;nbsp;fcntl(2)&amp;nbsp;to&amp;nbsp;enable&amp;nbsp;this&amp;nbsp;flag.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SEE&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;ALSO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;close(2),&amp;nbsp;&amp;nbsp;dup(2),&amp;nbsp;&amp;nbsp;fcntl(2),&amp;nbsp;&amp;nbsp;link(2),&amp;nbsp;&amp;nbsp;lseek(2),&amp;nbsp;&amp;nbsp;mknod(2),&amp;nbsp;mount(2),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mmap(2),&amp;nbsp;openat(2),&amp;nbsp;read(2),&amp;nbsp;socket(2),&amp;nbsp;stat(2),&amp;nbsp;&amp;nbsp;umask(2),&amp;nbsp;&amp;nbsp;unlink(2),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;write(2),&amp;nbsp;fopen(3),&amp;nbsp;fifo(7),&amp;nbsp;feature_test_macros(7),&amp;nbsp;path_resolution(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-3697951491784858997?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/3697951491784858997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=3697951491784858997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3697951491784858997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3697951491784858997'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-open.html' title='Man page -open'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-7036363640869932857</id><published>2008-11-07T21:25:00.000-08:00</published><updated>2008-11-07T21:29:24.716-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='man pages'/><category scheme='http://www.blogger.com/atom/ns#' term='mkfifo'/><category scheme='http://www.blogger.com/atom/ns#' term='manual for mkfio'/><title type='text'>Man page - mkfifo</title><content type='html'>&lt;span style="font-weight:bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mkfifo&amp;nbsp;-&amp;nbsp;make&amp;nbsp;a&amp;nbsp;FIFO&amp;nbsp;special&amp;nbsp;file&amp;nbsp;(a&amp;nbsp;named&amp;nbsp;pipe)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;sys/types.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;mkfifo(const&amp;nbsp;char&amp;nbsp;*pathname,&amp;nbsp;mode_t&amp;nbsp;mode);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mkfifo()&amp;nbsp;&amp;nbsp;makes&amp;nbsp;a&amp;nbsp;FIFO&amp;nbsp;special&amp;nbsp;file&amp;nbsp;with&amp;nbsp;name&amp;nbsp;pathname.&amp;nbsp;&amp;nbsp;mode&amp;nbsp;specifies&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;FIFO’s&amp;nbsp;permissions.&amp;nbsp;&amp;nbsp;It&amp;nbsp;is&amp;nbsp;modified&amp;nbsp;by&amp;nbsp;the&amp;nbsp;process’s&amp;nbsp;umask&amp;nbsp;&amp;nbsp;in&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;usual&amp;nbsp;way:&amp;nbsp;the&amp;nbsp;permissions&amp;nbsp;of&amp;nbsp;the&amp;nbsp;created&amp;nbsp;file&amp;nbsp;are&amp;nbsp;(mode&amp;nbsp;&amp;amp;&amp;nbsp;~umask).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A&amp;nbsp;&amp;nbsp;FIFO&amp;nbsp;special&amp;nbsp;file&amp;nbsp;is&amp;nbsp;similar&amp;nbsp;to&amp;nbsp;a&amp;nbsp;pipe,&amp;nbsp;except&amp;nbsp;that&amp;nbsp;it&amp;nbsp;is&amp;nbsp;created&amp;nbsp;in&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a&amp;nbsp;different&amp;nbsp;way.&amp;nbsp;&amp;nbsp;Instead&amp;nbsp;of&amp;nbsp;being&amp;nbsp;an&amp;nbsp;anonymous&amp;nbsp;communications&amp;nbsp;channel,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a&amp;nbsp;&amp;nbsp;FIFO&amp;nbsp;&amp;nbsp;special&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;entered&amp;nbsp;&amp;nbsp;into&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;file&amp;nbsp;&amp;nbsp;system&amp;nbsp;by&amp;nbsp;calling&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mkfifo().&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Once&amp;nbsp;you&amp;nbsp;have&amp;nbsp;created&amp;nbsp;a&amp;nbsp;FIFO&amp;nbsp;special&amp;nbsp;file&amp;nbsp;in&amp;nbsp;this&amp;nbsp;way,&amp;nbsp;any&amp;nbsp;process&amp;nbsp;&amp;nbsp;can&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;open&amp;nbsp;&amp;nbsp;it&amp;nbsp;&amp;nbsp;for&amp;nbsp;&amp;nbsp;reading&amp;nbsp;or&amp;nbsp;writing,&amp;nbsp;in&amp;nbsp;the&amp;nbsp;same&amp;nbsp;way&amp;nbsp;as&amp;nbsp;an&amp;nbsp;ordinary&amp;nbsp;file.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;However,&amp;nbsp;it&amp;nbsp;has&amp;nbsp;to&amp;nbsp;be&amp;nbsp;open&amp;nbsp;at&amp;nbsp;both&amp;nbsp;ends&amp;nbsp;simultaneously&amp;nbsp;before&amp;nbsp;&amp;nbsp;you&amp;nbsp;&amp;nbsp;can&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proceed&amp;nbsp;to&amp;nbsp;do&amp;nbsp;any&amp;nbsp;input&amp;nbsp;or&amp;nbsp;output&amp;nbsp;operations&amp;nbsp;on&amp;nbsp;it.&amp;nbsp;&amp;nbsp;Opening&amp;nbsp;a&amp;nbsp;FIFO&amp;nbsp;for&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reading&amp;nbsp;normally&amp;nbsp;blocks&amp;nbsp;until&amp;nbsp;some&amp;nbsp;other&amp;nbsp;process&amp;nbsp;opens&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;same&amp;nbsp;&amp;nbsp;FIFO&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;&amp;nbsp;writing,&amp;nbsp;and&amp;nbsp;vice&amp;nbsp;versa.&amp;nbsp;&amp;nbsp;See&amp;nbsp;fifo(7)&amp;nbsp;for&amp;nbsp;non-blocking&amp;nbsp;handling&amp;nbsp;of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FIFO&amp;nbsp;special&amp;nbsp;files.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;RETURN&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;VALUE&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On&amp;nbsp;success&amp;nbsp;mkfifo()&amp;nbsp;returns&amp;nbsp;0.&amp;nbsp;&amp;nbsp;In&amp;nbsp;the&amp;nbsp;case&amp;nbsp;of&amp;nbsp;an&amp;nbsp;error,&amp;nbsp;-1&amp;nbsp;is&amp;nbsp;returned&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(in&amp;nbsp;which&amp;nbsp;case,&amp;nbsp;errno&amp;nbsp;is&amp;nbsp;set&amp;nbsp;appropriately).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EACCES&amp;nbsp;One&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;directories&amp;nbsp;in&amp;nbsp;pathname&amp;nbsp;did&amp;nbsp;not&amp;nbsp;allow&amp;nbsp;search&amp;nbsp;(exe‐&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cute)&amp;nbsp;permission.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EEXIST&amp;nbsp;pathname&amp;nbsp;already&amp;nbsp;exists.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENAMETOOLONG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Either&amp;nbsp;the&amp;nbsp;total&amp;nbsp;length&amp;nbsp;of&amp;nbsp;pathname&amp;nbsp;is&amp;nbsp;greater&amp;nbsp;than&amp;nbsp;PATH_MAX,&amp;nbsp;or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;an&amp;nbsp;&amp;nbsp;individual&amp;nbsp;&amp;nbsp;filename&amp;nbsp;&amp;nbsp;component&amp;nbsp;&amp;nbsp;has&amp;nbsp;&amp;nbsp;a&amp;nbsp;&amp;nbsp;length&amp;nbsp;greater&amp;nbsp;than&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NAME_MAX.&amp;nbsp;&amp;nbsp;In&amp;nbsp;the&amp;nbsp;GNU&amp;nbsp;system,&amp;nbsp;there&amp;nbsp;is&amp;nbsp;no&amp;nbsp;imposed&amp;nbsp;limit&amp;nbsp;on&amp;nbsp;over‐&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;all&amp;nbsp;&amp;nbsp;filename&amp;nbsp;&amp;nbsp;length,&amp;nbsp;but&amp;nbsp;some&amp;nbsp;file&amp;nbsp;systems&amp;nbsp;may&amp;nbsp;place&amp;nbsp;limits&amp;nbsp;on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;length&amp;nbsp;of&amp;nbsp;a&amp;nbsp;component.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENOENT&amp;nbsp;A&amp;nbsp;directory&amp;nbsp;component&amp;nbsp;in&amp;nbsp;pathname&amp;nbsp;does&amp;nbsp;not&amp;nbsp;exist&amp;nbsp;or&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;a&amp;nbsp;&amp;nbsp;dan‐&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gling&amp;nbsp;symbolic&amp;nbsp;link.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENOSPC&amp;nbsp;The&amp;nbsp;directory&amp;nbsp;or&amp;nbsp;filesystem&amp;nbsp;has&amp;nbsp;no&amp;nbsp;room&amp;nbsp;for&amp;nbsp;the&amp;nbsp;new&amp;nbsp;file.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENOTDIR&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A&amp;nbsp;&amp;nbsp;component&amp;nbsp;&amp;nbsp;used&amp;nbsp;as&amp;nbsp;a&amp;nbsp;directory&amp;nbsp;in&amp;nbsp;pathname&amp;nbsp;is&amp;nbsp;not,&amp;nbsp;in&amp;nbsp;fact,&amp;nbsp;a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;directory.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EROFS&amp;nbsp;&amp;nbsp;pathname&amp;nbsp;refers&amp;nbsp;to&amp;nbsp;a&amp;nbsp;read-only&amp;nbsp;filesystem.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CONFORMING&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;TO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;POSIX.1-2001.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SEE&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;ALSO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mkfifo(1),&amp;nbsp;close(2),&amp;nbsp;open(2),&amp;nbsp;&amp;nbsp;read(2),&amp;nbsp;&amp;nbsp;stat(2),&amp;nbsp;&amp;nbsp;umask(2),&amp;nbsp;&amp;nbsp;write(2),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mkfifoat(3),&amp;nbsp;fifo(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-7036363640869932857?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/7036363640869932857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=7036363640869932857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/7036363640869932857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/7036363640869932857'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-mkfifo.html' title='Man page - mkfifo'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-3364130195209314729</id><published>2008-11-07T21:22:00.000-08:00</published><updated>2008-11-07T21:25:17.774-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='man pages'/><category scheme='http://www.blogger.com/atom/ns#' term='kill'/><category scheme='http://www.blogger.com/atom/ns#' term='kill manual'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Man page - kill</title><content type='html'>&lt;span style="font-weight:bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kill&amp;nbsp;-&amp;nbsp;send&amp;nbsp;signal&amp;nbsp;to&amp;nbsp;a&amp;nbsp;process&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;sys/types.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;signal.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;kill(pid_t&amp;nbsp;pid,&amp;nbsp;int&amp;nbsp;sig);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Feature&amp;nbsp;Test&amp;nbsp;Macro&amp;nbsp;Requirements&amp;nbsp;for&amp;nbsp;glibc&amp;nbsp;(see&amp;nbsp;feature_test_macros(7)):&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kill():&amp;nbsp;_POSIX_C_SOURCE&amp;nbsp;||&amp;nbsp;_XOPEN_SOURCE&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;kill()&amp;nbsp;&amp;nbsp;system&amp;nbsp;&amp;nbsp;call&amp;nbsp;can&amp;nbsp;be&amp;nbsp;used&amp;nbsp;to&amp;nbsp;send&amp;nbsp;any&amp;nbsp;signal&amp;nbsp;to&amp;nbsp;any&amp;nbsp;process&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;group&amp;nbsp;or&amp;nbsp;process.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;pid&amp;nbsp;is&amp;nbsp;positive,&amp;nbsp;then&amp;nbsp;signal&amp;nbsp;sig&amp;nbsp;is&amp;nbsp;sent&amp;nbsp;to&amp;nbsp;pid.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;pid&amp;nbsp;equals&amp;nbsp;0,&amp;nbsp;then&amp;nbsp;sig&amp;nbsp;is&amp;nbsp;sent&amp;nbsp;to&amp;nbsp;every&amp;nbsp;process&amp;nbsp;in&amp;nbsp;the&amp;nbsp;process&amp;nbsp;group&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;of&amp;nbsp;the&amp;nbsp;calling&amp;nbsp;process.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;pid&amp;nbsp;equals&amp;nbsp;-1,&amp;nbsp;then&amp;nbsp;sig&amp;nbsp;is&amp;nbsp;sent&amp;nbsp;to&amp;nbsp;every&amp;nbsp;process&amp;nbsp;for&amp;nbsp;which&amp;nbsp;the&amp;nbsp;call&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ing&amp;nbsp;process&amp;nbsp;has&amp;nbsp;permission&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;send&amp;nbsp;&amp;nbsp;signals,&amp;nbsp;&amp;nbsp;except&amp;nbsp;&amp;nbsp;for&amp;nbsp;&amp;nbsp;process&amp;nbsp;&amp;nbsp;1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(init),&amp;nbsp;but&amp;nbsp;see&amp;nbsp;below.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;&amp;nbsp;pid&amp;nbsp;&amp;nbsp;is&amp;nbsp;less&amp;nbsp;than&amp;nbsp;-1,&amp;nbsp;then&amp;nbsp;sig&amp;nbsp;is&amp;nbsp;sent&amp;nbsp;to&amp;nbsp;every&amp;nbsp;process&amp;nbsp;in&amp;nbsp;the&amp;nbsp;pro&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cess&amp;nbsp;group&amp;nbsp;-pid.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;sig&amp;nbsp;is&amp;nbsp;0,&amp;nbsp;then&amp;nbsp;no&amp;nbsp;signal&amp;nbsp;is&amp;nbsp;sent,&amp;nbsp;but&amp;nbsp;error&amp;nbsp;checking&amp;nbsp;is&amp;nbsp;&amp;nbsp;still&amp;nbsp;&amp;nbsp;per&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formed.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For&amp;nbsp;&amp;nbsp;a&amp;nbsp;&amp;nbsp;process&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;have&amp;nbsp;permission&amp;nbsp;to&amp;nbsp;send&amp;nbsp;a&amp;nbsp;signal&amp;nbsp;it&amp;nbsp;must&amp;nbsp;either&amp;nbsp;be&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;privileged&amp;nbsp;(under&amp;nbsp;Linux:&amp;nbsp;have&amp;nbsp;the&amp;nbsp;CAP_KILL&amp;nbsp;capability),&amp;nbsp;or&amp;nbsp;the&amp;nbsp;real&amp;nbsp;&amp;nbsp;or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;effective&amp;nbsp;&amp;nbsp;user&amp;nbsp;&amp;nbsp;ID&amp;nbsp;of&amp;nbsp;the&amp;nbsp;sending&amp;nbsp;process&amp;nbsp;must&amp;nbsp;equal&amp;nbsp;the&amp;nbsp;real&amp;nbsp;or&amp;nbsp;saved&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set-user-ID&amp;nbsp;of&amp;nbsp;the&amp;nbsp;target&amp;nbsp;process.&amp;nbsp;&amp;nbsp;In&amp;nbsp;the&amp;nbsp;case&amp;nbsp;of&amp;nbsp;SIGCONT&amp;nbsp;it&amp;nbsp;&amp;nbsp;suffices&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;when&amp;nbsp;the&amp;nbsp;sending&amp;nbsp;and&amp;nbsp;receiving&amp;nbsp;processes&amp;nbsp;belong&amp;nbsp;to&amp;nbsp;the&amp;nbsp;same&amp;nbsp;session.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;RETURN&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;VALUE&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On&amp;nbsp;success&amp;nbsp;(at&amp;nbsp;least&amp;nbsp;one&amp;nbsp;signal&amp;nbsp;was&amp;nbsp;sent),&amp;nbsp;zero&amp;nbsp;is&amp;nbsp;returned.&amp;nbsp;&amp;nbsp;On&amp;nbsp;error,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-1&amp;nbsp;is&amp;nbsp;returned,&amp;nbsp;and&amp;nbsp;errno&amp;nbsp;is&amp;nbsp;set&amp;nbsp;appropriately.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EINVAL&amp;nbsp;An&amp;nbsp;invalid&amp;nbsp;signal&amp;nbsp;was&amp;nbsp;specified.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EPERM&amp;nbsp;&amp;nbsp;The&amp;nbsp;process&amp;nbsp;does&amp;nbsp;not&amp;nbsp;have&amp;nbsp;permission&amp;nbsp;to&amp;nbsp;send&amp;nbsp;the&amp;nbsp;signal&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;any&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;of&amp;nbsp;the&amp;nbsp;target&amp;nbsp;processes.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ESRCH&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;pid&amp;nbsp;or&amp;nbsp;process&amp;nbsp;group&amp;nbsp;does&amp;nbsp;not&amp;nbsp;exist.&amp;nbsp;&amp;nbsp;Note&amp;nbsp;that&amp;nbsp;an&amp;nbsp;existing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process&amp;nbsp;might&amp;nbsp;be&amp;nbsp;a&amp;nbsp;zombie,&amp;nbsp;a&amp;nbsp;&amp;nbsp;process&amp;nbsp;&amp;nbsp;which&amp;nbsp;&amp;nbsp;already&amp;nbsp;&amp;nbsp;committed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;termination,&amp;nbsp;but&amp;nbsp;has&amp;nbsp;not&amp;nbsp;yet&amp;nbsp;been&amp;nbsp;wait(2)ed&amp;nbsp;for.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CONFORMING&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;TO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SVr4,&amp;nbsp;4.3BSD,&amp;nbsp;POSIX.1-2001&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;NOTES&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;only&amp;nbsp;&amp;nbsp;signals&amp;nbsp;&amp;nbsp;that&amp;nbsp;can&amp;nbsp;be&amp;nbsp;sent&amp;nbsp;to&amp;nbsp;process&amp;nbsp;ID&amp;nbsp;1,&amp;nbsp;the&amp;nbsp;init&amp;nbsp;process,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;are&amp;nbsp;those&amp;nbsp;for&amp;nbsp;which&amp;nbsp;init&amp;nbsp;&amp;nbsp;has&amp;nbsp;&amp;nbsp;explicitly&amp;nbsp;&amp;nbsp;installed&amp;nbsp;&amp;nbsp;signal&amp;nbsp;&amp;nbsp;handlers.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This&amp;nbsp;is&amp;nbsp;done&amp;nbsp;to&amp;nbsp;assure&amp;nbsp;the&amp;nbsp;system&amp;nbsp;is&amp;nbsp;not&amp;nbsp;brought&amp;nbsp;down&amp;nbsp;accidentally.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;POSIX.1-2001&amp;nbsp;&amp;nbsp;requires&amp;nbsp;that&amp;nbsp;kill(-1,sig)&amp;nbsp;send&amp;nbsp;sig&amp;nbsp;to&amp;nbsp;all&amp;nbsp;processes&amp;nbsp;that&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;calling&amp;nbsp;process&amp;nbsp;may&amp;nbsp;send&amp;nbsp;&amp;nbsp;signals&amp;nbsp;&amp;nbsp;to,&amp;nbsp;&amp;nbsp;except&amp;nbsp;&amp;nbsp;possibly&amp;nbsp;&amp;nbsp;for&amp;nbsp;&amp;nbsp;some&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation-defined&amp;nbsp;&amp;nbsp;system&amp;nbsp;&amp;nbsp;processes.&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux&amp;nbsp;&amp;nbsp;allows&amp;nbsp;a&amp;nbsp;process&amp;nbsp;to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;signal&amp;nbsp;itself,&amp;nbsp;but&amp;nbsp;on&amp;nbsp;Linux&amp;nbsp;the&amp;nbsp;call&amp;nbsp;kill(-1,sig)&amp;nbsp;does&amp;nbsp;not&amp;nbsp;&amp;nbsp;signal&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;calling&amp;nbsp;process.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;POSIX.1-2001&amp;nbsp;&amp;nbsp;requires&amp;nbsp;&amp;nbsp;that&amp;nbsp;if&amp;nbsp;a&amp;nbsp;process&amp;nbsp;sends&amp;nbsp;a&amp;nbsp;signal&amp;nbsp;to&amp;nbsp;itself,&amp;nbsp;and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;sending&amp;nbsp;thread&amp;nbsp;does&amp;nbsp;not&amp;nbsp;have&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;signal&amp;nbsp;&amp;nbsp;blocked,&amp;nbsp;&amp;nbsp;and&amp;nbsp;&amp;nbsp;no&amp;nbsp;&amp;nbsp;other&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;thread&amp;nbsp;&amp;nbsp;has&amp;nbsp;&amp;nbsp;it&amp;nbsp;&amp;nbsp;unblocked&amp;nbsp;or&amp;nbsp;is&amp;nbsp;waiting&amp;nbsp;for&amp;nbsp;it&amp;nbsp;in&amp;nbsp;sigwait(3),&amp;nbsp;at&amp;nbsp;least&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;one&amp;nbsp;unblocked&amp;nbsp;signal&amp;nbsp;must&amp;nbsp;be&amp;nbsp;delivered&amp;nbsp;to&amp;nbsp;the&amp;nbsp;sending&amp;nbsp;thread&amp;nbsp;before&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kill().&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux&amp;nbsp;Notes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Across&amp;nbsp;&amp;nbsp;different&amp;nbsp;&amp;nbsp;kernel&amp;nbsp;&amp;nbsp;versions,&amp;nbsp;Linux&amp;nbsp;has&amp;nbsp;enforced&amp;nbsp;different&amp;nbsp;rules&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;the&amp;nbsp;permissions&amp;nbsp;required&amp;nbsp;for&amp;nbsp;an&amp;nbsp;unprivileged&amp;nbsp;process&amp;nbsp;to&amp;nbsp;send&amp;nbsp;a&amp;nbsp;sig&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nal&amp;nbsp;&amp;nbsp;to&amp;nbsp;&amp;nbsp;another&amp;nbsp;&amp;nbsp;process.&amp;nbsp;&amp;nbsp;&amp;nbsp;In&amp;nbsp;kernels&amp;nbsp;1.0&amp;nbsp;to&amp;nbsp;1.2.2,&amp;nbsp;a&amp;nbsp;signal&amp;nbsp;could&amp;nbsp;be&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sent&amp;nbsp;if&amp;nbsp;the&amp;nbsp;effective&amp;nbsp;user&amp;nbsp;&amp;nbsp;ID&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;sender&amp;nbsp;&amp;nbsp;matched&amp;nbsp;&amp;nbsp;that&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiver,&amp;nbsp;&amp;nbsp;or&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;real&amp;nbsp;&amp;nbsp;user&amp;nbsp;&amp;nbsp;ID&amp;nbsp;&amp;nbsp;of&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;sender&amp;nbsp;matched&amp;nbsp;that&amp;nbsp;of&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiver.&amp;nbsp;&amp;nbsp;From&amp;nbsp;kernel&amp;nbsp;1.2.3&amp;nbsp;until&amp;nbsp;1.3.77,&amp;nbsp;a&amp;nbsp;signal&amp;nbsp;could&amp;nbsp;&amp;nbsp;be&amp;nbsp;&amp;nbsp;sent&amp;nbsp;&amp;nbsp;if&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;&amp;nbsp;effective&amp;nbsp;&amp;nbsp;user&amp;nbsp;ID&amp;nbsp;of&amp;nbsp;the&amp;nbsp;sender&amp;nbsp;matched&amp;nbsp;either&amp;nbsp;the&amp;nbsp;real&amp;nbsp;or&amp;nbsp;effec&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tive&amp;nbsp;user&amp;nbsp;ID&amp;nbsp;of&amp;nbsp;the&amp;nbsp;receiver.&amp;nbsp;&amp;nbsp;The&amp;nbsp;&amp;nbsp;current&amp;nbsp;&amp;nbsp;rules,&amp;nbsp;&amp;nbsp;which&amp;nbsp;&amp;nbsp;conform&amp;nbsp;&amp;nbsp;to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;POSIX.1-2001,&amp;nbsp;were&amp;nbsp;adopted&amp;nbsp;in&amp;nbsp;kernel&amp;nbsp;1.3.78.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;BUGS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In&amp;nbsp;&amp;nbsp;2.6&amp;nbsp;&amp;nbsp;kernels&amp;nbsp;&amp;nbsp;up&amp;nbsp;to&amp;nbsp;and&amp;nbsp;including&amp;nbsp;2.6.7,&amp;nbsp;there&amp;nbsp;was&amp;nbsp;a&amp;nbsp;bug&amp;nbsp;that&amp;nbsp;meant&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that&amp;nbsp;when&amp;nbsp;sending&amp;nbsp;signals&amp;nbsp;to&amp;nbsp;a&amp;nbsp;process&amp;nbsp;group,&amp;nbsp;kill()&amp;nbsp;&amp;nbsp;failed&amp;nbsp;&amp;nbsp;with&amp;nbsp;&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error&amp;nbsp;EPERM&amp;nbsp;if&amp;nbsp;the&amp;nbsp;caller&amp;nbsp;did&amp;nbsp;have&amp;nbsp;permission&amp;nbsp;to&amp;nbsp;send&amp;nbsp;the&amp;nbsp;signal&amp;nbsp;to&amp;nbsp;any&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(rather&amp;nbsp;than&amp;nbsp;all)&amp;nbsp;of&amp;nbsp;the&amp;nbsp;members&amp;nbsp;of&amp;nbsp;the&amp;nbsp;process&amp;nbsp;group.&amp;nbsp;&amp;nbsp;Notwithstanding&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this&amp;nbsp;&amp;nbsp;error&amp;nbsp;&amp;nbsp;return,&amp;nbsp;&amp;nbsp;the&amp;nbsp;signal&amp;nbsp;was&amp;nbsp;still&amp;nbsp;delivered&amp;nbsp;to&amp;nbsp;all&amp;nbsp;of&amp;nbsp;the&amp;nbsp;pro&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cesses&amp;nbsp;for&amp;nbsp;which&amp;nbsp;the&amp;nbsp;caller&amp;nbsp;had&amp;nbsp;permission&amp;nbsp;to&amp;nbsp;signal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SEE&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;ALSO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_exit(2),&amp;nbsp;killpg(2),&amp;nbsp;signal(2),&amp;nbsp;sigqueue(2),&amp;nbsp;tkill(2),&amp;nbsp;&amp;nbsp;exit(3),&amp;nbsp;&amp;nbsp;capa&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bilities(7),&amp;nbsp;credentials(7),&amp;nbsp;signal(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-3364130195209314729?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/3364130195209314729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=3364130195209314729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3364130195209314729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/3364130195209314729'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-kill.html' title='Man page - kill'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-6393174823931006572</id><published>2008-11-07T21:17:00.000-08:00</published><updated>2008-11-07T21:22:20.696-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='man pages'/><category scheme='http://www.blogger.com/atom/ns#' term='getppid'/><category scheme='http://www.blogger.com/atom/ns#' term='getppid manual'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Man page - getppid</title><content type='html'>&lt;span style="font-weight:bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getpid,&amp;nbsp;getppid&amp;nbsp;-&amp;nbsp;get&amp;nbsp;process&amp;nbsp;identification&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;sys/types.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include&amp;nbsp;&amp;lt;unistd.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pid_t&amp;nbsp;getpid(void);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pid_t&amp;nbsp;getppid(void);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getpid()&amp;nbsp;returns&amp;nbsp;the&amp;nbsp;process&amp;nbsp;ID&amp;nbsp;of&amp;nbsp;the&amp;nbsp;calling&amp;nbsp;process.&amp;nbsp;&amp;nbsp;(This&amp;nbsp;is&amp;nbsp;often&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;used&amp;nbsp;by&amp;nbsp;routines&amp;nbsp;that&amp;nbsp;generate&amp;nbsp;unique&amp;nbsp;temporary&amp;nbsp;filenames.)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getppid()&amp;nbsp;returns&amp;nbsp;the&amp;nbsp;process&amp;nbsp;ID&amp;nbsp;of&amp;nbsp;the&amp;nbsp;parent&amp;nbsp;of&amp;nbsp;the&amp;nbsp;calling&amp;nbsp;&amp;nbsp;process.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ERRORS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;These&amp;nbsp;functions&amp;nbsp;are&amp;nbsp;always&amp;nbsp;successful.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CONFORMING&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;TO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;POSIX.1-2001,&amp;nbsp;4.3BSD,&amp;nbsp;SVr4&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SEE&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;ALSO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fork(2),&amp;nbsp;&amp;nbsp;kill(2),&amp;nbsp;&amp;nbsp;exec(3),&amp;nbsp;&amp;nbsp;mkstemp(3),&amp;nbsp;&amp;nbsp;tempnam(3),&amp;nbsp;tmpfile(3),&amp;nbsp;tmpnam(3),&amp;nbsp;credentials(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-6393174823931006572?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/6393174823931006572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=6393174823931006572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/6393174823931006572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/6393174823931006572'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-getppid.html' title='Man page - getppid'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-7109452415420956119</id><published>2008-11-07T21:13:00.000-08:00</published><updated>2008-11-07T21:16:39.988-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='man pages'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><category scheme='http://www.blogger.com/atom/ns#' term='fifo'/><title type='text'>Man page -fifo</title><content type='html'>&lt;span style="font-weight:bold;"&gt;NAME&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fifo&amp;nbsp;-&amp;nbsp;first-in&amp;nbsp;first-out&amp;nbsp;special&amp;nbsp;file,&amp;nbsp;named&amp;nbsp;pipe&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A&amp;nbsp;FIFO&amp;nbsp;special&amp;nbsp;file&amp;nbsp;(a&amp;nbsp;named&amp;nbsp;pipe)&amp;nbsp;is&amp;nbsp;similar&amp;nbsp;to&amp;nbsp;a&amp;nbsp;pipe,&amp;nbsp;except&amp;nbsp;that&amp;nbsp;it&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is&amp;nbsp;accessed&amp;nbsp;as&amp;nbsp;part&amp;nbsp;of&amp;nbsp;the&amp;nbsp;file&amp;nbsp;system.&amp;nbsp;&amp;nbsp;It&amp;nbsp;can&amp;nbsp;be&amp;nbsp;opened&amp;nbsp;&amp;nbsp;by&amp;nbsp;&amp;nbsp;multiple&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;processes&amp;nbsp;&amp;nbsp;for&amp;nbsp;&amp;nbsp;reading&amp;nbsp;or&amp;nbsp;writing.&amp;nbsp;&amp;nbsp;When&amp;nbsp;processes&amp;nbsp;are&amp;nbsp;exchanging&amp;nbsp;data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;via&amp;nbsp;the&amp;nbsp;FIFO,&amp;nbsp;the&amp;nbsp;kernel&amp;nbsp;passes&amp;nbsp;all&amp;nbsp;data&amp;nbsp;internally&amp;nbsp;without&amp;nbsp;writing&amp;nbsp;&amp;nbsp;it&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to&amp;nbsp;the&amp;nbsp;file&amp;nbsp;system.&amp;nbsp;&amp;nbsp;Thus,&amp;nbsp;the&amp;nbsp;FIFO&amp;nbsp;special&amp;nbsp;file&amp;nbsp;has&amp;nbsp;no&amp;nbsp;contents&amp;nbsp;on&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file&amp;nbsp;system,&amp;nbsp;the&amp;nbsp;file&amp;nbsp;system&amp;nbsp;entry&amp;nbsp;merely&amp;nbsp;serves&amp;nbsp;as&amp;nbsp;a&amp;nbsp;&amp;nbsp;reference&amp;nbsp;&amp;nbsp;point&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;so&amp;nbsp;&amp;nbsp;that&amp;nbsp;processes&amp;nbsp;can&amp;nbsp;access&amp;nbsp;the&amp;nbsp;pipe&amp;nbsp;using&amp;nbsp;a&amp;nbsp;name&amp;nbsp;in&amp;nbsp;the&amp;nbsp;file&amp;nbsp;system.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;kernel&amp;nbsp;maintains&amp;nbsp;exactly&amp;nbsp;one&amp;nbsp;pipe&amp;nbsp;object&amp;nbsp;for&amp;nbsp;each&amp;nbsp;FIFO&amp;nbsp;special&amp;nbsp;file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that&amp;nbsp;&amp;nbsp;is&amp;nbsp;&amp;nbsp;opened&amp;nbsp;&amp;nbsp;by&amp;nbsp;&amp;nbsp;at&amp;nbsp;least&amp;nbsp;one&amp;nbsp;process.&amp;nbsp;&amp;nbsp;The&amp;nbsp;FIFO&amp;nbsp;must&amp;nbsp;be&amp;nbsp;opened&amp;nbsp;on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;both&amp;nbsp;ends&amp;nbsp;(reading&amp;nbsp;and&amp;nbsp;writing)&amp;nbsp;before&amp;nbsp;data&amp;nbsp;can&amp;nbsp;be&amp;nbsp;&amp;nbsp;passed.&amp;nbsp;&amp;nbsp;&amp;nbsp;Normally,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;opening&amp;nbsp;the&amp;nbsp;FIFO&amp;nbsp;blocks&amp;nbsp;until&amp;nbsp;the&amp;nbsp;other&amp;nbsp;end&amp;nbsp;is&amp;nbsp;opened&amp;nbsp;also.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A&amp;nbsp;&amp;nbsp;process&amp;nbsp;can&amp;nbsp;open&amp;nbsp;a&amp;nbsp;FIFO&amp;nbsp;in&amp;nbsp;non-blocking&amp;nbsp;mode.&amp;nbsp;&amp;nbsp;In&amp;nbsp;this&amp;nbsp;case,&amp;nbsp;opening&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;read&amp;nbsp;only&amp;nbsp;will&amp;nbsp;succeed&amp;nbsp;even&amp;nbsp;if&amp;nbsp;no-one&amp;nbsp;has&amp;nbsp;opened&amp;nbsp;on&amp;nbsp;the&amp;nbsp;write&amp;nbsp;&amp;nbsp;side&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yet;&amp;nbsp;&amp;nbsp;opening&amp;nbsp;&amp;nbsp;for&amp;nbsp;&amp;nbsp;write&amp;nbsp;&amp;nbsp;only&amp;nbsp;will&amp;nbsp;fail&amp;nbsp;with&amp;nbsp;ENXIO&amp;nbsp;(no&amp;nbsp;such&amp;nbsp;device&amp;nbsp;or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;address)&amp;nbsp;unless&amp;nbsp;the&amp;nbsp;other&amp;nbsp;end&amp;nbsp;has&amp;nbsp;already&amp;nbsp;been&amp;nbsp;opened.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Under&amp;nbsp;Linux,&amp;nbsp;opening&amp;nbsp;a&amp;nbsp;FIFO&amp;nbsp;for&amp;nbsp;read&amp;nbsp;and&amp;nbsp;write&amp;nbsp;&amp;nbsp;will&amp;nbsp;&amp;nbsp;succeed&amp;nbsp;&amp;nbsp;both&amp;nbsp;&amp;nbsp;in&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;blocking&amp;nbsp;&amp;nbsp;and&amp;nbsp;non-blocking&amp;nbsp;mode.&amp;nbsp;&amp;nbsp;POSIX&amp;nbsp;leaves&amp;nbsp;this&amp;nbsp;behavior&amp;nbsp;undefined.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This&amp;nbsp;can&amp;nbsp;be&amp;nbsp;used&amp;nbsp;to&amp;nbsp;open&amp;nbsp;a&amp;nbsp;FIFO&amp;nbsp;for&amp;nbsp;writing&amp;nbsp;while&amp;nbsp;there&amp;nbsp;are&amp;nbsp;no&amp;nbsp;&amp;nbsp;readers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;available.&amp;nbsp;&amp;nbsp;A&amp;nbsp;process&amp;nbsp;that&amp;nbsp;uses&amp;nbsp;both&amp;nbsp;ends&amp;nbsp;of&amp;nbsp;the&amp;nbsp;connection&amp;nbsp;in&amp;nbsp;order&amp;nbsp;to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;communicate&amp;nbsp;with&amp;nbsp;itself&amp;nbsp;should&amp;nbsp;be&amp;nbsp;very&amp;nbsp;careful&amp;nbsp;to&amp;nbsp;avoid&amp;nbsp;deadlocks.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;NOTES&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;When&amp;nbsp;a&amp;nbsp;process&amp;nbsp;tries&amp;nbsp;to&amp;nbsp;write&amp;nbsp;to&amp;nbsp;a&amp;nbsp;FIFO&amp;nbsp;that&amp;nbsp;is&amp;nbsp;not&amp;nbsp;opened&amp;nbsp;for&amp;nbsp;read&amp;nbsp;&amp;nbsp;on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;other&amp;nbsp;side,&amp;nbsp;the&amp;nbsp;process&amp;nbsp;is&amp;nbsp;sent&amp;nbsp;a&amp;nbsp;SIGPIPE&amp;nbsp;signal.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FIFO&amp;nbsp;special&amp;nbsp;files&amp;nbsp;can&amp;nbsp;be&amp;nbsp;created&amp;nbsp;by&amp;nbsp;mkfifo(3),&amp;nbsp;and&amp;nbsp;are&amp;nbsp;specially&amp;nbsp;indi‐&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cated&amp;nbsp;in&amp;nbsp;ls&amp;nbsp;-l.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SEE&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;ALSO&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mkfifo(1),&amp;nbsp;open(2),&amp;nbsp;pipe(2),&amp;nbsp;&amp;nbsp;sigaction(2),&amp;nbsp;&amp;nbsp;signal(2),&amp;nbsp;&amp;nbsp;socketpair(2),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mkfifo(3),&amp;nbsp;pipe(7)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5089197319652425104-7109452415420956119?l=programminginlinux.dipinkrishna.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programminginlinux.dipinkrishna.info/feeds/7109452415420956119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5089197319652425104&amp;postID=7109452415420956119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/7109452415420956119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089197319652425104/posts/default/7109452415420956119'/><link rel='alternate' type='text/html' href='http://programminginlinux.dipinkrishna.info/2008/11/man-page-fifo.html' title='Man page -fifo'/><author><name>Dipin Krishna</name><uri>http://www.blogger.com/profile/04324380802823373206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_87d8NNrvCiA/SUeKawXr6BI/AAAAAAAAAEU/0fc2JvBFWkE/S220/cvb.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089197319652425104.post-6440003436025461867</id><published>2008-11-07T21:07:00.000-08:00</published><updated>2008-11-07T21:13:30.462-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='man'/><category scheme='http://www.blogger.com/atom/ns#' term='fcntl'/><category scheme='http://www.blogger.com/atom/ns#' term='linux programming'/><category scheme='http://www.blogger.com/atom/ns#' term='fcntl manual'/><category scheme='http://www.blogger.com/atom/ns#' term='man pages'/><category scheme='http://www.blogger.com/atom/ns#' term='linux c'/><title type='text'>Man page - fcntl</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;NAME&lt;/span&gt;&lt;br /&gt;fcntl - manipulate file descriptor&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;SYNOPSIS&lt;/span&gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int fcntl(int fd, int cmd);&lt;br /&gt;int fcntl(int fd, int cmd, long arg);&lt;br /&gt;int fcntl(int fd, int cmd, struct flock *lock);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;DESCRIPTION&lt;/span&gt;&lt;br /&gt;fcntl() performs one of the operations described below on the open file&lt;br /&gt;descriptor fd.  The operation is determined by cmd.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Duplicating a file descriptor&lt;/span&gt;&lt;br /&gt;F_DUPFD&lt;br /&gt;Find the lowest numbered available file descriptor greater  than&lt;br /&gt;or  equal to arg and make it be a copy of fd.  This is different&lt;br /&gt;from dup2(2) which uses exactly the descriptor specified.&lt;br /&gt;&lt;br /&gt;On success, the new descriptor is returned.&lt;br /&gt;&lt;br /&gt;See dup(2) for further details.&lt;br /&gt;&lt;br /&gt;F_DUPFD_CLOEXEC (since Linux 2.6.24)&lt;br /&gt;As for a F_DUPFD, but additionally set  the  close-on-exec  flag&lt;br /&gt;for  the  duplicate  descriptor.  Specifying this flag permits a&lt;br /&gt;program to avoid an additional fcntl() F_SETFD operation to  set&lt;br /&gt;the  FD_CLOEXEC  flag.   For  an explanation of why this flag is&lt;br /&gt;useful, see the description of O_CLOEXEC in open(2).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;File descriptor flags&lt;/span&gt;&lt;br /&gt;The following commands manipulate the  flags  associated  with  a  file&lt;br /&gt;descriptor.   Currently, only one such flag is defined: FD_CLOEXEC, the&lt;br /&gt;close-on-exec flag.  If the FD_CLOEXEC bit is 0,  the  file  descriptor&lt;br /&gt;will remain open across an execve(2), otherwise it will be closed.&lt;br /&gt;&lt;br /&gt;F_GETFD&lt;br /&gt;Read the file descriptor flags.&lt;br /&gt;&lt;br /&gt;F_SETFD&lt;br /&gt;Set the file descriptor flags to the value specified by arg.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;File status flags&lt;/span&gt;&lt;br /&gt;Each  open  file  description has certain associated status flags, ini&lt;br /&gt;tialized by open(2) and possibly modified by fcntl().  Duplicated  file&lt;br /&gt;descriptors  (made with dup(2), fcntl(F_DUPFD), fork(2), etc.) refer to&lt;br /&gt;the same open file description, and thus share  the  same  file  status&lt;br /&gt;flags.&lt;br /&gt;&lt;br /&gt;The file status flags and their semantics are described in open(2).&lt;br /&gt;&lt;br /&gt;F_GETFL&lt;br /&gt;Read the file status flags.&lt;br /&gt;&lt;br /&gt;F_SETFL&lt;br /&gt;Set  the  file status flags to the value specified by arg.  File&lt;br /&gt;access mode (O_RDONLY, O_WRONLY, O_RDWR) and file creation flags&lt;br /&gt;(i.e.,  O_CREAT,  O_EXCL, O_NOCTTY, O_TRUNC) in arg are ignored.&lt;br /&gt;On Linux this command can only  change  the  O_APPEND,  O_ASYNC,&lt;br /&gt;O_DIRECT, O_NOATIME, and O_NONBLOCK flags.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Advisory locking&lt;/span&gt;&lt;br /&gt;F_GETLK,  F_SETLK  and  F_SETLKW are used to acquire, release, and test&lt;br /&gt;for the existence of record locks (also known as file-segment or  file-&lt;br /&gt;region  locks).   The  third  argument lock is a pointer to a structure&lt;br /&gt;that has at least the following fields (in unspecified order).&lt;br /&gt;&lt;br /&gt;struct flock&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;short l_type;    /* Type of lock: F_RDLCK,F_WRLCK, F_UNLCK */&lt;br /&gt;short l_whence;  /* How to interpret l_start:SEEK_SET, SEEK_CUR, SEEK_END */&lt;br /&gt;off_t l_start;   /* Starting offset for lock */&lt;br /&gt;off_t l_len;     /* Number of bytes to lock */&lt;br /&gt;pid_t l_pid;     /* PID of process blocking our lock (F_GETLK only) */&lt;br /&gt;...&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;The l_whence, l_start, and l_len fields of this structure  specify  the&lt;br /&gt;range of bytes we wish to lock.  l_start is the starting offset for the&lt;br /&gt;lock, and is interpreted relative to either: the start of the file  (if&lt;br /&gt;l_whence  is  SEEK_SET);  the  current  file  offset  (if  l_whence  is&lt;br /&gt;SEEK_CUR); or the end of the file (if l_whence is  SEEK_END).   In  the&lt;br /&gt;final  two  cases, l_start can be a negative number provided the offset&lt;br /&gt;does not lie before the start of the file.   l_len  is  a  non-negative&lt;br /&gt;integer  (but see the NOTES below) specifying the number of bytes to be&lt;br /&gt;locked.  Bytes past the end of the file may be locked,  but  not  bytes&lt;br /&gt;before  the  start of the file.  Specifying 0 for l_len has the special&lt;br /&gt;meaning: lock all bytes starting at the location specified by  l_whence&lt;br /&gt;and  l_start  through  to the end of file, no matter how large the file&lt;br /&gt;grows.&lt;br /&gt;&lt;br /&gt;The l_type field can be used to place  a  read  (F_RDLCK)  or  a  write&lt;br /&gt;(F_WRLCK) lock on a file.  Any number of processes may hold a read lock&lt;br /&gt;(shared lock) on a file region, but only one process may hold  a  write&lt;br /&gt;lock  (exclusive  lock).   An  exclusive lock excludes all other locks,&lt;br /&gt;both shared and exclusive.  A single process can hold only one type  of&lt;br /&gt;lock  on  a  file region; if a new lock is applied to an already-locked&lt;br /&gt;region, then the existing lock is  converted  to  the  new  lock  type.&lt;br /&gt;(Such  conversions may involve splitting, shrinking, or coalescing with&lt;br /&gt;an existing lock if the byte range specified by the new lock  does  not&lt;br /&gt;precisely coincide with the range of the existing lock.)     &lt;br /&gt;&lt;br /&gt;       F_SETLK&lt;br /&gt;              Acquire  a lock (when l_type is F_RDLCK or F_WRLCK) or release a&lt;br /&gt;              lock (when l_type is F_UNLCK) on  the  bytes  specified  by  the&lt;br /&gt;              l_whence,  l_start,  and l_len fields of lock.  If a conflicting&lt;br /&gt;              lock is held by another process, this call returns -1  and  sets&lt;br /&gt;              errno to EACCES or EAGAIN.&lt;br /&gt;&lt;br /&gt;       F_SETLKW&lt;br /&gt;              As  for  F_SETLK, but if a conflicting lock is held on the file,&lt;br /&gt;              then wait for that lock to be released.  If a signal  is  caught&lt;br /&gt;              while  waiting, then the call is interrupted and (after the sig‐&lt;br /&gt;              nal handler has returned) returns immediately (with return value&lt;br /&gt;              -1 and errno set to EINTR).&lt;br /&gt;&lt;br /&gt;       F_GETLK&lt;br /&gt;              On  input  to  this call, lock describes a lock we would like to&lt;br /&gt;              place on the file.  If the lock could be  placed,  fcntl()  does&lt;br /&gt;              not  actually  place it, but returns F_UNLCK in the l_type field&lt;br /&gt;              of lock and leaves the other fields of the structure  unchanged.&lt;br /&gt;              If  one or more incompatible locks would prevent this lock being&lt;br /&gt;              placed, then fcntl() returns details about one of these locks in&lt;br /&gt;              the l_type, l_whence, l_start, and l_len fields of lock and sets&lt;br /&gt;              l_pid to be the PID of the process holding that lock.&lt;br /&gt;&lt;br /&gt;In order to place a read lock, fd must be open for reading.   In  order&lt;br /&gt;to  place  a  write  lock,  fd must be open for writing.  To place both&lt;br /&gt;types of lock, open a file read-write.&lt;br /&gt;&lt;br /&gt;As well as being removed by an explicit F_UNLCK, record locks are auto‐&lt;br /&gt;matically released when the process terminates or if it closes any file&lt;br /&gt;descriptor referring to a file on which locks are held.  This  is  bad:&lt;br /&gt;it  means  that a process can lose the locks on a file like /etc/passwd&lt;br /&gt;or /etc/mtab when for some reason a library function decides  to  open,&lt;br /&gt;read and close it.&lt;br /&gt;&lt;br /&gt;Record  locks are not inherited by a child created via fork(2), but are&lt;br /&gt;preserved across an execve(2).&lt;br /&gt;&lt;br /&gt;Because of the buffering performed by the stdio(3) library, the use  of&lt;br /&gt;record  locking  with  routines  in that package should be avoided; use&lt;br /&gt;read(2) and write(2) instead.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mandatory locking&lt;/span&gt;&lt;br /&gt;(Non-POSIX.)  The above record locks may be either advisory  or  manda‐&lt;br /&gt;tory, and are advisory by default.&lt;br /&gt;&lt;br /&gt;Advisory locks are not enforced and are useful only between cooperating&lt;br /&gt;processes.&lt;br /&gt;&lt;br /&gt;Mandatory locks are enforced for all processes.  If a process tries  to&lt;br /&gt;perform  an  incompatible  access (e.g., read(2) or write(2)) on a file&lt;br /&gt;region that has an incompatible mandatory lock, then the result depends&lt;br /&gt;upon  whether the O_NONBLOCK flag is enabled for its open file descrip‐&lt;br /&gt;tion.  If the O_NONBLOCK flag is  not  enabled,  then  system  call  is&lt;br /&gt;blocked  until  the lock is removed or converted to a mode that is com‐&lt;br /&gt;patible with the access.  If the O_NONBLOCK flag is enabled,  then  the&lt;br /&gt;system call fails with the error EAGAIN or EWOULDBLOCK.&lt;br /&gt;&lt;br /&gt;To  make use of mandatory locks, mandatory locking must be enabled both&lt;br /&gt;on the file system that contains the file to be locked, and on the file&lt;br /&gt;itself.   Mandatory  locking  is enabled on a file system using the "-o&lt;br /&gt;mand" option to mount(8), or the MS_MANDLOCK flag for mount(2).  Manda‐&lt;br /&gt;tory locking is enabled on a file by disabling group execute permission&lt;br /&gt;on the file and enabling the set-group-ID permission bit (see  chmod(1)&lt;br /&gt;and chmod(2)).&lt;br /&gt;&lt;br /&gt;The  Linux implementation of mandatory locking is unreliable.  See BUGS&lt;br /&gt;below.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Managing signals&lt;/span&gt;&lt;br /&gt;F_GETOWN, F_SETOWN, F_GETSIG and F_SETSIG are used to manage I/O avail‐&lt;br /&gt;ability signals:&lt;br /&gt;&lt;br /&gt;F_GETOWN&lt;br /&gt;Get  the  process  ID or process group currently receiving SIGIO&lt;br /&gt;and SIGURG signals for events on file  descriptor  fd.   Process&lt;br /&gt;IDs  are  returned  as  positive  values;  process group IDs are&lt;br /&gt;returned as negative values (but see BUGS below).&lt;br /&gt;&lt;br /&gt;F_SETOWN&lt;br /&gt;Set the process ID or process group ID that will  receive  SIGIO&lt;br /&gt;and  SIGURG signals for events on file descriptor fd.  A process&lt;br /&gt;ID is specified as a positive value; a process group ID is spec‐&lt;br /&gt;ified  as  a negative value.  Most commonly, the calling process&lt;br /&gt;specifies itself as the owner (that is, arg is specified as get&lt;br /&gt;pid(2)).&lt;br /&gt;&lt;br /&gt;If you set the O_ASYNC status flag on a file descriptor by using&lt;br /&gt;the F_SETFL command of fcntl(), a SIGIO signal is sent  whenever&lt;br /&gt;input  or  output  becomes  possible  on  that  file descriptor.&lt;br /&gt;F_SETSIG can be used to obtain delivery of a signal  other  than&lt;br /&gt;SIGIO.   If  this  permission  check  fails,  then the signal is&lt;br /&gt;silently discarded.&lt;br /&gt;&lt;br /&gt;Sending a signal to  the  owner  process  (group)  specified  by&lt;br /&gt;F_SETOWN  is  subject  to  the  same  permissions  checks as are&lt;br /&gt;described for kill(2), where the sending process is the one that&lt;br /&gt;employs F_SETOWN (but see BUGS below).&lt;br /&gt;&lt;br /&gt;If  the  file  descriptor  fd  refers to a socket, F_SETOWN also&lt;br /&gt;selects the recipient of SIGURG signals that are delivered  when&lt;br /&gt;out-of-band data arrives on that socket.  (SIGURG is sent in any&lt;br /&gt;situation where select(2) would report the socket as  having  an&lt;br /&gt;"exceptional condition".)&lt;br /&gt;&lt;br /&gt;If a nonzero value is given to F_SETSIG in a multi-threaded pro‐&lt;br /&gt;cess running with  a  threading  library  that  supports  thread&lt;br /&gt;groups (e.g., NPTL), then a positive value given to F_SETOWN has&lt;br /&gt;a different meaning: instead of being a process ID identifying a&lt;br /&gt;whole  process,  it is a thread ID identifying a specific thread&lt;br /&gt;within a process.  Consequently, it may  be  necessary  to  pass&lt;br /&gt;F_SETOWN  the  result  of  gettid(2) instead of getpid(2) to get&lt;br /&gt;sensible results when  F_SETSIG  is  used.   (In  current  Linux&lt;br /&gt;threading implementations, a main thread’s thread ID is the same&lt;br /&gt;as its process ID.  This m
