Listing 1. Enabling and Disabling Accounting to a File

/* pa.c
 * Linux demonstration program. 
 * Logs process accounting information to a 
 * file specified on  the command line.
 * If no filename is specified, process 
 * accounting is switched off.
 */
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int
main (int argc, char **argv)
{

   int rc; 

   if (argc == 1) /* No arguments - switch off */
   {
      printf("Turning off process accounting.\n");
      if ( (rc = acct (NULL)) )
      {
	if (errno == ENOSYS)
	{
	  printf
	    ("It appears your kernel does not"
	     " include accounting support\n");
	}
        perror("Problem turning off accounting");
	return rc;
      }
   }

  
   else /* cmd line arg - switch accounting on */
   {
      printf
	 ("Attempting to log to file %s.\n",
	  argv[1]);
      rc =
	 creat (argv[1],
		S_IRWXU | S_IRGRP | S_IROTH);

      if (rc == -1)
      {
	 perror("Problem creating log file");
	 return rc;
      }
      
      if ( (rc = acct (argv[1])) )
      {
	perror("Problem in acct() call");
	return rc;
      }

   }

   return 0;
}
