Casini con CVS
authorSimone Piccardi <piccardi@gnulinux.it>
Fri, 2 May 2003 09:50:55 +0000 (09:50 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Fri, 2 May 2003 09:50:55 +0000 (09:50 +0000)
42 files changed:
sources/BarCode.c [deleted file]
sources/BarCodePage.c [deleted file]
sources/DirMonitor.c [deleted file]
sources/DirScan.c [deleted file]
sources/ElemEchoTCPClient.c [deleted file]
sources/ElemEchoTCPServer.c [deleted file]
sources/ErrCode.c [deleted file]
sources/Flock.c [deleted file]
sources/ForkTest.c [deleted file]
sources/FortuneClient.c [deleted file]
sources/FortuneParse.c [deleted file]
sources/FortuneServer.c [deleted file]
sources/FullRead.c [deleted file]
sources/FullWrite.c [deleted file]
sources/Gapil.h [deleted file]
sources/IPCTestId.c [deleted file]
sources/LockFile.c [deleted file]
sources/MQFortuneClient.c [deleted file]
sources/MQFortuneServer.c [deleted file]
sources/Makefile [deleted file]
sources/Mutex.c [deleted file]
sources/PXDirMonitor.c [new file with mode: 0644]
sources/ProcInfo.c [deleted file]
sources/ReadMonitor.c [deleted file]
sources/SetTermAttr.c [deleted file]
sources/SharedMem.c [deleted file]
sources/SigHand.c [deleted file]
sources/SimpleEchoTCPClient.c [deleted file]
sources/SimpleEchoTCPServer.c [deleted file]
sources/Sleep.c [deleted file]
sources/TCP_cunc_daytimed.c [deleted file]
sources/TCP_daytime.c [deleted file]
sources/TCP_echod.c [new file with mode: 0644]
sources/TCP_iter_daytimed.c [deleted file]
sources/TestRen.c [deleted file]
sources/WriteShm.c [deleted file]
sources/gethost.c [deleted file]
sources/getparam.c [deleted file]
sources/macros.h [deleted file]
sources/myls.c [deleted file]
sources/sleep1.c [deleted file]
sources/test_fopen.c [deleted file]

diff --git a/sources/BarCode.c b/sources/BarCode.c
deleted file mode 100644 (file)
index 122ad6b..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/* BarCode.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program barcode 
- * CGI for barcode generation
- *
- * Author: Simone Piccardi
- * Jun. 2002
- *
- * Usage: cgi-bin for apache.
- * Called by downloading something like:
- * http://localhost/cgi-bin/barcode?string
- * where string is the code to be converted
- *
- * $Id: BarCode.c,v 1.7 2003/01/06 16:44:20 piccardi Exp $ 
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <sys/stat.h>    /* stat deinitiions */
-#include <unistd.h>      /* include unix standard library */
-/* */
-#include <stdio.h>      /* include standard I/O library */
-#include <stdlib.h>     /* include standard library */
-#include <string.h>     /* include string library */
-#include <wait.h>       /* include wait call */
-#include <fcntl.h>
-#include <assert.h>
-#include <time.h>
-
-#include"macros.h"
-
-/* Program begin */
-int main(int argc, char *argv[], char *envp[])
-{
-/*
- * Variables definition         
- */
-    FILE *pipe[4];
-    FILE *pipein;
-    char *cmd_string[4]={
-       "pnmtopng",
-       "pnmmargin -white 10",
-       "pnmcrop",
-       "gs -sDEVICE=ppmraw -sOutputFile=- -sNOPAUSE -q - -c showpage -c quit"
-    }; 
-    char content[]="Content-type: image/png\n\n";
-    int i;
-    /* write mime-type to stdout */ 
-    write(STDOUT_FILENO, content, strlen(content));
-    /* execute chain of command */
-    for (i=0; i<4; i++) {
-       pipe[i] = popen(cmd_string[i], "w");
-       dup2(fileno(pipe[i]), STDOUT_FILENO); 
-    }
-    /* create barcode (in PS) */
-    pipein = popen("barcode", "w");
-    /* send barcode string to barcode program */
-    write(fileno(pipein), argv[1], strlen(argv[1]));
-    pclose(pipein);
-    /* close all pipes (in reverse order) */
-    for (i=4; i==0; i--) {
-       pclose((pipe[i]));
-    }
-    exit(0);
-}
diff --git a/sources/BarCodePage.c b/sources/BarCodePage.c
deleted file mode 100644 (file)
index 419e9c0..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/* BarCodePage.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program barcode 
- * CGI for barcode generation
- *
- * Author: Simone Piccardi
- * Jun. 2002
- *
- * Usage: cgi-bin for apache.
- * Called by downloading something like:
- * http://localhost/cgi-bin/barcode?string
- * where string is the code to be converted
- *
- * $Id: BarCodePage.c,v 1.2 2002/08/10 14:22:53 piccardi Exp $ 
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <sys/stat.h>    /* stat deinitiions */
-#include <unistd.h>      /* include unix standard library */
-#include <stdio.h>      /* include standard I/O library */
-#include <stdlib.h>     /* include standard library */
-#include <string.h>     /* include string library */
-#include <wait.h>       /* include wait call */
-#include <fcntl.h>
-#include <assert.h>
-#include <time.h>
-
-#include"macros.h"
-void WriteMess(char *mess);
-
-/* Program begin */
-int main(int argc, char *argv[], char *envp[])
-{
-/*
- * Variables definition         
- */
-    pid_t pid;
-    int retval;
-    int pipein[2];
-    int pipeout[2];
-    char content[]="Content-type: image/jpeg\n\n";
-    char size[]="-pA9";
-    /* 
-     * Begin
-     */
-    /* create two pipes, pipein and pipeout, to handle communication */
-    if ( (retval = pipe(pipein)) ) {
-       WriteMess("input pipe creation error");
-       exit(0);        
-    }
-    if ( (retval = pipe(pipeout)) ) {
-       WriteMess("output pipe creation error");
-       exit(0);        
-    }   
-    /* First fork: use child to run barcode program */
-    if ( (pid = fork()) == -1 ) {
-       WriteMess("child creation error");
-       exit(0);
-    }
-    /* if child */
-    if (pid == 0) {
-       /*
-        * Child exec barcode program, that take input (string to encode)
-        * from pipein, remapped to stdin, and write the output (a PS
-        * image) to stdout, remapped to pipeout 
-        */
-       close(pipein[1]);                /* close output side of input pipe */
-       dup2(pipein[0], STDIN_FILENO);   /* remap stdin in pipe input */
-       close(pipeout[0]);
-       dup2(pipeout[1], STDOUT_FILENO); /* remap stdout in pipe output */
-       execlp("barcode", "barcode", size, NULL); 
-    } 
-    /*
-     * Parent write string to pipe input and close it, 
-     * then wait child execution and results form pipeout, 
-     * then fork to convert PS to JPEG using gs
-     */
-    close(pipein[0]);        /* close input side of input pipe */
-    write(pipein[1], argv[1], strlen(argv[1]));
-    close(pipein[1]);
-    waitpid(pid, NULL, 0);
-    /* Second fork: use child to run ghostscript*/
-    if ( (pid = fork()) == -1) {
-       WriteMess("child creation error");
-       exit(0);
-    }
-    /* second child, convert PS to JPEG */
-    if (pid == 0) {
-       close(pipeout[1]);              /* close write end */
-       dup2(pipeout[0], STDIN_FILENO); /* remap read end to stdin */
-       /* send mime type */
-       write(STDOUT_FILENO, content, strlen(content));
-       execlp("gs", "gs", "-q", "-sDEVICE=jpeg", "-sOutputFile=-", "-", NULL);
-    }
-    /* still parent */
-    close(pipeout[1]); 
-    waitpid(pid, NULL, 0);
-    exit(0);
-}
-/*
- * Routine to produce an HTML error message on output 
- */
-void WriteMess(char *mess)
-{
-    printf("Content-type: text/html\n\n");
-    perror(mess);
-    printf("<br>\n");
-}
diff --git a/sources/DirMonitor.c b/sources/DirMonitor.c
deleted file mode 100644 (file)
index 8c73352..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/* DirMonitor.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*****************************************************************************
- *
- * File DirMonitor: 
- *
- * An example for shared memory use: monitor a directory status,
- * saving data in a shared memory segment
- *
- * Author: S. Piccardi Jan. 2003
- *
- * $Id: DirMonitor.c,v 1.6 2003/02/26 21:37:36 piccardi Exp $
- *
- *****************************************************************************/
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>        /* directory */
-#include <stdlib.h>        /* C standard library */
-#include <unistd.h>
-
-#include "Gapil.h"
-#include "macros.h"
-
-/* Help printing routine */
-void usage(void);
-/* computation function for DirScan */
-int ComputeValues(struct dirent * direntry);
-void HandSIGTERM(int signo);
-
-/* global variables for shared memory segment */
-struct DirProp {
-    int tot_size;    
-    int tot_files;   
-    int tot_regular; 
-    int tot_fifo;    
-    int tot_link;    
-    int tot_dir;     
-    int tot_block;   
-    int tot_char;    
-    int tot_sock;
-} *shmptr;
-key_t key;
-int mutex;
-
-int main(int argc, char *argv[]) 
-{
-    int i, pause = 10;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hp:")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'p':                                     /* set pause (in sec.) */
-           pause = strtol(optarg, NULL, 10);
-           break;
-       case 'h':                                             /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case '?':                                    /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:                                       /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    if ((argc - optind) != 1) {          /* There must be remaing parameters */
-       printf("Wrong number of arguments %d\n", argc - optind);
-        usage();
-    }
-    if (chdir(argv[1])) {                      /* chdir to be sure dir exist */
-       perror("Cannot find directory to monitor");
-       exit(1);
-    }
-    Signal(SIGTERM, HandSIGTERM);            /* set handlers for termination */
-    Signal(SIGINT, HandSIGTERM);
-    Signal(SIGQUIT, HandSIGTERM);
-    key = ftok("~/gapil/sources/DirMonitor.c", 1);  /* define a key, use dir */
-    shmptr = ShmCreate(key, 4096, 0666, 0);   /* get a shared memory segment */
-    if (!shmptr) {
-       perror("Cannot create shared memory");
-       exit(1);
-    }
-    if ((mutex = MutexCreate(key)) == -1) {                   /* get a Mutex */
-       perror("Cannot create mutex");
-       exit(1);
-    }
-    /* main loop, monitor directory properties each 10 sec */
-    daemon(1, 0);              /* demonize process, staying in monitored dir */
-    while (1) {
-       MutexLock(mutex);                              /* lock shared memory */
-       memset(shmptr, 0, sizeof(struct DirProp));    /* erase previous data */
-       DirScan(argv[1], ComputeValues);                     /* execute scan */
-       MutexUnlock(mutex);                          /* unlock shared memory */
-       sleep(pause);                              /* sleep until next watch */
-    }
-}
-/*
- * Routine to compute directory properties inside DirScan
- */
-int ComputeValues(struct dirent * direntry) 
-{
-    struct stat data;
-    stat(direntry->d_name, &data);                          /* get stat data */
-    shmptr->tot_size += data.st_size;
-    shmptr->tot_files++;
-    if (S_ISREG(data.st_mode)) shmptr->tot_regular++;
-    if (S_ISFIFO(data.st_mode)) shmptr->tot_fifo++;
-    if (S_ISLNK(data.st_mode)) shmptr->tot_link++;
-    if (S_ISDIR(data.st_mode)) shmptr->tot_dir++;
-    if (S_ISBLK(data.st_mode)) shmptr->tot_block++;
-    if (S_ISCHR(data.st_mode)) shmptr->tot_char++;
-    if (S_ISSOCK(data.st_mode)) shmptr->tot_sock++;
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program myls: list file in a directory \n");
-    printf("Usage:\n");
-    printf("  DirMonitor [-h] [-p sec] dirname \n");
-    printf("  -h          print this help\n");
-    printf("  -p sec      set watch interval to sec seconds \n");
-    exit(1);
-}
-/*
- * Signal Handler to manage termination
- */
-void HandSIGTERM(int signo) {
-    MutexLock(mutex);
-    debug("Terminated by %s\n", strsignal(signo));
-    ShmRemove(key, shmptr);
-    MutexRemove(mutex);
-    exit(0);
-}
diff --git a/sources/DirScan.c b/sources/DirScan.c
deleted file mode 100644 (file)
index 4b3f061..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/* DirScan.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*****************************************************************************
- *
- * File DirScan.c: routine for directory scan 
- *
- * Author: S. Piccardi Jan. 2003
- *
- * $Id: DirScan.c,v 1.2 2003/01/04 17:24:30 piccardi Exp $
- *
- *****************************************************************************/
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>        /* directory */
-#include <stdlib.h>        /* C standard library */
-#include <stdio.h>
-#include <unistd.h>
-
-/*
- * Function DirScan: 
- * 
- * Scan all entries in a directory, executing the provided function
- * on each one.
- *
- * Input:  the directory name and a computation function
- * Return: 0 if OK, -1 on errors
- */
-int DirScan(char * dirname, int(*compute)(struct dirent *)) 
-{
-    DIR * dir;
-    struct dirent *direntry;
-    int fd;
-
-    if ( (dir = opendir(dirname)) == NULL) {               /* oper directory */
-       printf("Opening %s\n", dirname);          /* on error print messages */
-       perror("Cannot open directory");                  /* and then return */
-       return -1;
-    }
-    fd = dirfd(dir);                                  /* get file descriptor */
-    fchdir(fd);                                          /* change directory */
-    /* loop on directory entries */
-    while ( (direntry = readdir(dir)) != NULL) {               /* read entry */
-       if (compute(direntry)) {                   /* execute function on it */
-           return -1;                                    /* on error return */
-       }
-    }
-    closedir(dir);
-    return 0;
-}
diff --git a/sources/ElemEchoTCPClient.c b/sources/ElemEchoTCPClient.c
deleted file mode 100644 (file)
index 19f6265..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/* ElemEchoTCPClient.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program ElemEchoTCPClient.c
- * Simple TCP client for echo service (port 7)
- *
- * Author: Simone Piccardi
- * Jun. 2001
- *
- * Usage: echo -h give all info's
- *
- * $Id: ElemEchoTCPClient.c,v 1.6 2003/04/29 15:33:39 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <unistd.h>      /* include unix standard library */
-#include <arpa/inet.h>   /* IP addresses conversion utiliites */
-#include <sys/socket.h>  /* socket library */
-#include <stdio.h>      /* include standard I/O library */
-
-#define MAXLINE 256
-void usage(void);
-void ClientEcho(FILE * filein, int socket);
-
-/* Program begin */
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int sock_fd, i;
-    struct sockaddr_in serv_add;
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           printf("Wrong -h option use\n");
-           usage();
-           return(0);
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* create socket */
-    if ( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
-       perror("Socket creation error");
-       return -1;
-    }
-    /* initialize address */
-    memset((void *) &serv_add, 0, sizeof(serv_add)); /* clear server address */
-    serv_add.sin_family = AF_INET;                   /* address type is INET */
-    serv_add.sin_port = htons(7);                    /* echo port is 7 */
-    /* build address using inet_pton */
-    if ( (inet_pton(AF_INET, argv[optind], &serv_add.sin_addr)) <= 0) {
-       perror("Address creation error");
-       return -1;
-    }
-    /* extablish connection */
-    if (connect(sock_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
-       perror("Connection error");
-       return -1;
-    }
-    /* read daytime from server */
-    ClientEcho(stdin, sock_fd);
-    /* normal exit */
-    return 0;
-}
-/*
- * routine to print usage info and exit 
- */
-void usage(void) {
-    printf("Take daytime from a remote host \n");
-    printf("Usage:\n");
-    printf("  daytime [-h] [-v] [host in dotted decimal form] \n");
-    printf("  -v          set verbosity on\n");
-    printf("  -h          print this help\n");
-    exit(1);
-}
-
-void ClientEcho(FILE * filein, int socket) 
-{
-    char sendbuff[MAXLINE], recvbuff[MAXLINE];
-    int nread; 
-    while (fgets(sendbuff, MAXLINE, filein) != NULL) {
-       FullWrite(socket, sendbuff, strlen(sendbuff)); 
-       nread = FullRead(socket, recvbuff, strlen(sendbuff));
-       recvbuff[nread] = 0;
-       fputs(recvbuff, stdout);
-    }
-    return;
-}
diff --git a/sources/ElemEchoTCPServer.c b/sources/ElemEchoTCPServer.c
deleted file mode 100644 (file)
index 1793d3f..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/* ElemEchoTCPServer.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program echod 
- * Elementary TCP server for echo service (port 7)
- *
- * Author: Simone Piccardi
- * Jun. 2001
- *
- * Usage: echod -h give all info
- *
- * $Id: ElemEchoTCPServer.c,v 1.5 2003/02/02 20:35:33 piccardi Exp $ 
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <unistd.h>      /* include unix standard library */
-#include <arpa/inet.h>   /* IP addresses conversion utiliites */
-#include <sys/socket.h>  /* socket library */
-#include <stdio.h>      /* include standard I/O library */
-#include <time.h>
-
-
-#define BACKLOG 10
-#define MAXLINE 256
-
-/* Subroutines declaration */
-void usage(void);
-void ServEcho(int sockfd);
-/* Program beginning */
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int list_fd, conn_fd;
-    pid_t pid;
-    struct sockaddr_in serv_add;
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    int i;
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           printf("Wrong -h option use\n");
-           usage();
-           return(0);
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* create socket */
-    if ( (list_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
-       perror("Socket creation error");
-       exit(-1);
-    }
-    /* initialize address */
-    memset((void *)&serv_add, 0, sizeof(serv_add)); /* clear server address */
-    serv_add.sin_family = AF_INET;                  /* address type is INET */
-    serv_add.sin_port = htons(7);                   /* echo port is 7 */
-    serv_add.sin_addr.s_addr = htonl(INADDR_ANY);   /* connect from anywhere */
-    /* bind socket */
-    if (bind(list_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
-       perror("bind error");
-       exit(-1);
-    }
-    /* listen on socket */
-    if (listen(list_fd, BACKLOG) < 0 ) {
-       perror("listen error");
-       exit(-1);
-    }
-    /* handle echo to client */
-    while (1) {
-       /* accept connection */
-       if ( (conn_fd = accept(list_fd, NULL, NULL)) < 0) {
-           perror("accept error");
-           exit(-1);
-       }
-       /* fork to handle connection */
-       if ( (pid = fork()) < 0 ){
-           perror("fork error");
-           exit(-1);
-       }
-       if (pid == 0) {      /* child */
-           close(list_fd);          /* close listening socket */   
-           SockEcho(conn_fd);       /* handle echo */
-           exit(0);
-       } else {             /* parent */
-           close(conn_fd);          /* close connected socket */
-       }
-    }
-    /* normal exit, never reached */
-    exit(0);
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Elementary echo server\n");
-    printf("Usage:\n");
-    printf("  echod [-h] \n");
-    printf("  -h          print this help\n");
-    exit(1);
-}
-/*
- * routine to handle echo for connection
- */
-void ServEcho(int sockfd) {
-    char buffer[MAXLINE];
-    int nread, nwrite;
-    
-    /* main loop, reading 0 char means client close connection */
-    while ( (nread = read(sockfd, buffer, MAXLINE)) != 0) {
-       printf("Letti %d bytes, %s ", nread, buffer);
-       nwrite = FullWrite(sockfd, buffer, nread);
-    }
-    return;
-}
diff --git a/sources/ErrCode.c b/sources/ErrCode.c
deleted file mode 100644 (file)
index b59da7f..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/* ErrCode.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program ErrCode.c: 
- * Print error code MACRO and messages
- *
- * Author: Simone Piccardi
- * Sep. 2001
- *
- * Usage: errcode -h give all info's
- *
- * $Id: ErrCode.c,v 1.5 2002/12/03 11:06:05 piccardi Exp $ 
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <errno.h>       /* error definitions and routines */ 
-#include <stdlib.h>      /* C standard library */
-#include <unistd.h>      /* unix standard library */
-#include <stdio.h>      /* standard I/O library */
-#include <string.h>      /* string functions */
-#include <limits.h>      /* system limits values */
-
-/* Help printing routine */
-void usage(void);
-
-/* Array for code number <=> code macro name */
-char * err_code[] = {
-"SUCCESS        ",  /*  0   Success */
-"EPERM         ",  /*  1   Operation not permitted */
-"ENOENT                ",  /*  2   No such file or directory */
-"ESRCH         ",  /*  3   No such process */
-"EINTR         ",  /*  4   Interrupted system call */
-"EIO           ",  /*  5   I/O error */
-"ENXIO         ",  /*  6   No such device or address */
-"E2BIG         ",  /*  7   Arg list too long */
-"ENOEXEC       ",  /*  8   Exec format error */
-"EBADF         ",  /*  9   Bad file number */
-"ECHILD                ",  /* 10   No child processes */
-"EAGAIN                ",  /* 11   Try again */
-"ENOMEM                ",  /* 12   Out of memory */
-"EACCES                ",  /* 13   Permission denied */
-"EFAULT                ",  /* 14   Bad address */
-"ENOTBLK       ",  /* 15   Block device required */
-"EBUSY         ",  /* 16   Device or resource busy */
-"EEXIST                ",  /* 17   File exists */
-"EXDEV         ",  /* 18   Cross-device link */
-"ENODEV                ",  /* 19   No such device */
-"ENOTDIR       ",  /* 20   Not a directory */
-"EISDIR                ",  /* 21   Is a directory */
-"EINVAL                ",  /* 22   Invalid argument */
-"ENFILE                ",  /* 23   File table overflow */
-"EMFILE                ",  /* 24   Too many open files */
-"ENOTTY                ",  /* 25   Not a typewriter */
-"ETXTBSY       ",  /* 26   Text file busy */
-"EFBIG         ",  /* 27   File too large */
-"ENOSPC                ",  /* 28   No space left on device */
-"ESPIPE                ",  /* 29   Illegal seek */
-"EROFS         ",  /* 30   Read-only file system */
-"EMLINK                ",  /* 31   Too many links */
-"EPIPE         ",  /* 32   Broken pipe */
-"EDOM          ",  /* 33   Math argument out of domain of func */
-"ERANGE                ",  /* 34   Math result not representable */
-"EDEADLK       ",  /* 35   Resource deadlock would occur */
-"ENAMETOOLONG  ",  /* 36   File name too long */
-"ENOLCK                ",  /* 37   No record locks available */
-"ENOSYS                ",  /* 38   Function not implemented */
-"ENOTEMPTY     ",  /* 39   Directory not empty */
-"ELOOP         ",  /* 40   Too many symbolic links encountered */
-"EWOULDBLOCK   ",  /* EAGAIN Operation would block */
-"ENOMSG                ",  /* 42   No message of desired type */
-"EIDRM         ",  /* 43   Identifier removed */
-"ECHRNG                ",  /* 44   Channel number out of range */
-"EL2NSYNC      ",  /* 45   Level 2 not synchronized */
-"EL3HLT                ",  /* 46   Level 3 halted */
-"EL3RST                ",  /* 47   Level 3 reset */
-"ELNRNG                ",  /* 48   Link number out of range */
-"EUNATCH       ",  /* 49   Protocol driver not attached */
-"ENOCSI                ",  /* 50   No CSI structure available */
-"EL2HLT                ",  /* 51   Level 2 halted */
-"EBADE         ",  /* 52   Invalid exchange */
-"EBADR         ",  /* 53   Invalid request descriptor */
-"EXFULL                ",  /* 54   Exchange full */
-"ENOANO                ",  /* 55   No anode */
-"EBADRQC       ",  /* 56   Invalid request code */
-"EBADSLT       ",  /* 57   Invalid slot */
-"EDEADLOCK     ",  /* EDEADLK */
-"EBFONT                ",  /* 59   Bad font file format */
-"ENOSTR                ",  /* 60   Device not a stream */
-"ENODATA       ",  /* 61   No data available */
-"ETIME         ",  /* 62   Timer expired */
-"ENOSR         ",  /* 63   Out of streams resources */
-"ENONET                ",  /* 64   Machine is not on the network */
-"ENOPKG                ",  /* 65   Package not installed */
-"EREMOTE       ",  /* 66   Object is remote */
-"ENOLINK       ",  /* 67   Link has been severed */
-"EADV          ",  /* 68   Advertise error */
-"ESRMNT                ",  /* 69   Srmount error */
-"ECOMM         ",  /* 70   Communication error on send */
-"EPROTO                ",  /* 71   Protocol error */
-"EMULTIHOP     ",  /* 72   Multihop attempted */
-"EDOTDOT       ",  /* 73   RFS specific error */
-"EBADMSG       ",  /* 74   Not a data message */
-"EOVERFLOW     ",  /* 75   Value too large for defined data type */
-"ENOTUNIQ      ",  /* 76   Name not unique on network */
-"EBADFD                ",  /* 77   File descriptor in bad state */
-"EREMCHG       ",  /* 78   Remote address changed */
-"ELIBACC       ",  /* 79   Can not access a needed shared library */
-"ELIBBAD       ",  /* 80   Accessing a corrupted shared library */
-"ELIBSCN       ",  /* 81   .lib section in a.out corrupted */
-"ELIBMAX       ",  /* 82   Attempting to link in too many shared libraries */
-"ELIBEXEC      ",  /* 83   Cannot exec a shared library directly */
-"EILSEQ                ",  /* 84   Illegal byte sequence */
-"ERESTART      ",  /* 85   Interrupted system call should be restarted */
-"ESTRPIPE      ",  /* 86   Streams pipe error */
-"EUSERS                ",  /* 87   Too many users */
-"ENOTSOCK      ",  /* 88   Socket operation on non-socket */
-"EDESTADDRREQ  ",  /* 89   Destination address required */
-"EMSGSIZE      ",  /* 90   Message too long */
-"EPROTOTYPE    ",  /* 91   Protocol wrong type for socket */
-"ENOPROTOOPT   ",  /* 92   Protocol not available */
-"EPROTONOSUPPORT",  /* 93   Protocol not supported */
-"ESOCKTNOSUPPORT",  /* 94   Socket type not supported */
-"EOPNOTSUPP    ",  /* 95   Operation not supported on transport endpoint */
-"EPFNOSUPPORT  ",  /* 96   Protocol family not supported */
-"EAFNOSUPPORT  ",  /* 97   Address family not supported by protocol */
-"EADDRINUSE    ",  /* 98   Address already in use */
-"EADDRNOTAVAIL ",  /* 99   Cannot assign requested address */
-"ENETDOWN      ",  /* 100  Network is down */
-"ENETUNREACH   ",  /* 101  Network is unreachable */
-"ENETRESET     ",  /* 102  Network dropped connection because of reset */
-"ECONNABORTED  ",  /* 103  Software caused connection abort */
-"ECONNRESET    ",  /* 104  Connection reset by peer */
-"ENOBUFS       ",  /* 105  No buffer space available */
-"EISCONN       ",  /* 106  Transport endpoint is already connected */
-"ENOTCONN      ",  /* 107  Transport endpoint is not connected */
-"ESHUTDOWN     ",  /* 108  Cannot send after transport endpoint shutdown */
-"ETOOMANYREFS  ",  /* 109  Too many references: cannot splice */
-"ETIMEDOUT     ",  /* 110  Connection timed out */
-"ECONNREFUSED  ",  /* 111  Connection refused */
-"EHOSTDOWN     ",  /* 112  Host is down */
-"EHOSTUNREACH  ",  /* 113  No route to host */
-"EALREADY      ",  /* 114  Operation already in progress */
-"EINPROGRESS   ",  /* 115  Operation now in progress */
-"ESTALE                ",  /* 116  Stale NFS file handle */
-"EUCLEAN       ",  /* 117  Structure needs cleaning */
-"ENOTNAM       ",  /* 118  Not a XENIX named type file */
-"ENAVAIL       ",  /* 119  No XENIX semaphores available */
-"EISNAM                ",  /* 120  Is a named type file */
-"EREMOTEIO     ",  /* 121  Remote I/O error */
-"EDQUOT                ",  /* 122  Quota exceeded */
-"ENOMEDIUM     ",  /* 123  No medium found */
-"EMEDIUMTYPE   "   /* 124  Wrong medium type */
-};
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int i, err;
-    int label = 0;
-    int message = 0;
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hlm")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           printf("Wrong -h option use\n");
-           usage();
-           return(0);
-           break;
-       case 'l':   /* unrecognized options */
-           printf("Label printing\n");
-           label = 1;
-           break;
-       case 'm':   /* unrecognized options */
-           printf("Message printing\n");
-           message = 1;
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    if (optind == argc) {
-       usage();
-    }
-    /* convert string to number */
-    err = strtol(argv[optind], NULL, 10);
-    /* testing error condition on conversion */
-    if (err==LONG_MIN) {
-       perror("Underflow on error code");
-       return 1;
-    } else if (err==LONG_MIN) {
-       perror("Overflow on error code");
-       return 1;
-    }
-    /* conversion is fine */
-    if (message) {
-       printf("Error message for %d is %s\n", err, strerror(err));
-    }
-    if (label) {
-       printf("Error label for %d is %s\n", err, err_code[err]);
-    }
-    if ( (!label)&&(!message) ) {
-       usage();
-    }
-    /* normal exit */
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Print error code message or macro label \n");
-    printf("Usage:\n");
-    printf("  daytime [-h] [-l] [-m] error code \n");
-    printf("  -m          print error messages\n");
-    printf("  -l          print error code label\n");
-    printf("  -h          print this help\n");
-    exit(1);
-}
diff --git a/sources/Flock.c b/sources/Flock.c
deleted file mode 100644 (file)
index 55d84fe..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/* Flock.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*****************************************************************************
- *
- * Program Flock.c: 
- * Program to test file locking
- *
- * Author: Simone Piccardi
- * Nov. 2002
- *
- * Usage: flock -h give all info's
- *
- * $Id: Flock.c,v 1.3 2002/11/18 23:54:01 piccardi Exp $
- *
- *****************************************************************************/
-/*
- * Include needed headers
- */
-#include <errno.h>       /* error definitions and routines */ 
-#include <stdlib.h>      /* C standard library */
-#include <unistd.h>      /* unix standard library */
-#include <stdio.h>      /* standard I/O library */
-#include <string.h>      /* string functions */
-#include <fcntl.h>       /* string functions */
-/* user defined header */
-#include "macros.h"      /* some useful macros */
-
-/* Help printing routine */
-void usage(void);
-
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int type = F_UNLCK;            /* lock type: default to unlock (invalid) */
-    off_t start = 0;             /* start of the locked region: default to 0 */
-    off_t len = 0;              /* length of the locked region: default to 0 */
-    int fd, res, i;                                    /* internal variables */
-    int bsd = 0;                          /* semantic type: default to POSIX */
-    int cmd = F_SETLK;              /* lock command: default to non-blocking */
-    struct flock lock;                                /* file lock structure */
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hs:l:wrbf")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':                                            /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case 's':                            /* take start point of the lock */
-           start = strtol(optarg, NULL, 10);               /* convert input */
-           break;
-       case 'l':                                 /* take length of the lock */
-           len = strtol(optarg, NULL, 10);                 /* convert input */
-           break;
-       case 'w':                                  /* set type to write lock */
-           type = F_WRLCK;
-           break;
-       case 'r':                                   /* set type to read lock */
-           type = F_RDLCK;
-           break;
-       case 'b':                                    /* set lock to blocking */
-           cmd = F_SETLKW;
-           break;
-       case 'f':                                     /* enable BSD semantic */
-           bsd = 1;
-           break;
-       case '?':                                    /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:                                       /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    if ((argc - optind) != 1) {          /* There must be remaing parameters */
-       printf("Wrong number of arguments %d\n", argc - optind);
-        usage();
-    }
-    if (type == F_UNLCK) {            /* There must be a -w or -r option set */
-       printf("You should set a read or a write lock\n");
-       usage();
-    }
-    fd = open(argv[optind], O_RDONLY);         /* open the file to be locked */
-    if (fd < 0) {                                           /* on error exit */
-       perror("Wrong filename");
-       exit(1);
-    }
-    /* do lock */
-    if (bsd) {                                             /* if BSD locking */
-       /* rewrite cmd for suitables flock operation values */ 
-       if (cmd == F_SETLK) {                              /* if no-blocking */
-           cmd = LOCK_NB;              /* set the value for flock operation */
-       } else {                                                     /* else */
-           cmd = 0;                                      /* default is null */
-       }
-       if (type == F_RDLCK) cmd |= LOCK_SH;          /* set for shared lock */
-       if (type == F_WRLCK) cmd |= LOCK_EX;       /* set for exclusive lock */
-       res = flock(fd, cmd);                                /* esecute lock */
-    } else {                                             /* if POSIX locking */
-       /* setting flock structure */
-       lock.l_type = type;                       /* set type: read or write */
-       lock.l_whence = SEEK_SET;    /* start from the beginning of the file */
-       lock.l_start = start;          /* set the start of the locked region */
-       lock.l_len = len;             /* set the length of the locked region */
-       res = fcntl(fd, cmd, &lock);                              /* do lock */
-    }
-    /* check lock results */
-    if (res) {                                              /* on error exit */
-       perror("Failed lock");
-       exit(1);
-    } else {                                           /* else write message */
-       printf("Lock acquired\n");
-    }
-    pause();                       /* stop the process, use a signal to exit */
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program flock: lock a region of a file \n");
-    printf("Usage:\n");
-    printf("  forktest [-h] [-s start] [-l len] [-w|-r] filename \n");
-    printf("  -h          print this help\n");
-    printf("  -s start    region starting byte\n");
-    printf("  -l len       region length (0 means all file)\n");
-    printf("  -w           write lock\n");
-    printf("  -r           read lock\n");
-    printf("  -b           block when locking impossible\n");
-    printf("  -f           enable BSD semantic\n");
-    exit(1);
-}
diff --git a/sources/ForkTest.c b/sources/ForkTest.c
deleted file mode 100644 (file)
index edec00e..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/* ForkTest.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program ForkTest.c: 
- * Program to test process creation
- *
- * Author: Simone Piccardi
- * Sep. 2001
- *
- * Usage: forktest -h give all info's
- *
- * $Id: ForkTest.c,v 1.8 2002/12/03 11:06:05 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <errno.h>       /* error definitions and routines */ 
-#include <stdlib.h>      /* C standard library */
-#include <unistd.h>      /* unix standard library */
-#include <stdio.h>      /* standard I/O library */
-#include <string.h>      /* string functions */
-
-#include "Gapil.h"
-#include "macros.h"
-
-/* Help printing routine */
-void usage(void);
-
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int nchild, i;
-    pid_t pid;
-    int wait_child  = 0;
-    int wait_parent = 0;
-    int wait_end    = 0;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hsp:c:e:")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':   /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case 'c':   /* take wait time for childen */
-           wait_child = strtol(optarg, NULL, 10);    /* convert input */
-           break;
-       case 'p':   /* take wait time for childen */
-           wait_parent = strtol(optarg, NULL, 10);   /* convert input */
-           break;
-       case 'e':   /* take wait before parent exit */
-           wait_end = strtol(optarg, NULL, 10);      /* convert input */
-           break;
-       case 's':
-           Signal(SIGCHLD, HandSigCHLD);
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* There must be remaing parameters */
-    if (optind == argc) {
-       usage();
-    }
-    nchild = atoi(argv[optind]);
-    printf("Process %d: forking %d child\n", getpid(), nchild);
-    /* loop to fork children */
-    for (i=0; i<nchild; i++) {
-       if ( (pid = fork()) < 0) { 
-           /* on error exit */ 
-           printf("Error on %d child creation, %s\n", i+1, strerror(errno));
-           exit(-1); 
-       }
-       if (pid == 0) {   /* child */
-           printf("Child %d successfully executing\n", ++i);
-           if (wait_child) sleep(wait_child);
-           printf("Child %d, parent %d, exiting\n", i, getppid());
-           exit(0);
-       } else {          /* parent */
-           printf("Spawned %d child, pid %d \n", i+1, pid);
-           if (wait_parent) sleep(wait_parent);
-           printf("Go to next child \n");
-       }
-    }
-    /* normal exit */
-    if (wait_end) sleep(wait_end);
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program forktest: fork a given number of child \n");
-    printf("Usage:\n");
-    printf("  forktest [-h] [-p sec] [-c sec] [-e sec] child to fork \n");
-    printf("  -h          print this help\n");
-    printf("  -s          install signal handler\n");
-    printf("  -p sec       wait sec seconds before next fork\n");
-    printf("  -c sec       wait sec seconds before child termination\n");
-    printf("  -e sec       wait sec seconds before parent return\n");
-    
-    exit(1);
-}
diff --git a/sources/FortuneClient.c b/sources/FortuneClient.c
deleted file mode 100644 (file)
index 37aaef4..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/* FortuneClient.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program fortune 
- * Fortune client
- *
- * Author: Simone Piccardi
- * Aug. 2002
- *
- * Usage: fortune -h give all info
- *
- * $Id: FortuneClient.c,v 1.2 2002/08/19 17:34:23 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <unistd.h>      /* include unix standard library */
-#include <arpa/inet.h>   /* IP addresses conversion utiliites */
-#include <stdio.h>      /* include standard I/O library */
-#include <errno.h>
-#include <fcntl.h>
-
-#include "macros.h"
-
-/* Subroutines declaration */
-void usage(void);
-
-int main(int argc, char *argv[])
-{
-/* Variables definition */
-    int n = 0;
-    char *fortunefilename = "/tmp/fortune.fifo";
-    char line[80];
-    int fifo_server, fifo_client;
-    char fifoname[80];
-    int nread;
-    char buffer[PIPE_BUF];
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    int i;
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hf:")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           printf("Wrong -h option use\n");
-           usage();
-           return(0);
-           break;
-       case 'f':
-           fortunefilename = optarg;
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    snprintf(fifoname, 80, "/tmp/fortune.%d", getpid());     /* compose name */
-    if (mkfifo(fifoname, 0622)) {                        /* open client fifo */
-       if (errno!=EEXIST) {
-           perror("Cannot create well known fifo");
-           exit(-1);
-       }
-    }
-    fifo_server = open(fortunefilename, O_WRONLY);       /* open server fifo */
-    if (fifo_server < 0) {
-       perror("Cannot open well known fifo");
-       exit(-1);
-    }
-    debug("%s\n", fifoname);
-    nread = write(fifo_server, fifoname, strlen(fifoname)+1);  /* write name */
-    close(fifo_server);                                 /* close server fifo */
-    fifo_client = open(fifoname, O_RDONLY);              /* open client fifo */
-    if (fifo_client < 0) {
-       perror("Cannot open well known fifo");
-       exit(-1);
-    }
-    nread = read(fifo_client, buffer, sizeof(buffer));        /* read answer */
-    printf("%s", buffer);                                   /* print fortune */
-    close(fifo_client);                                      /* close client */
-    unlink(fifoname);                                  /* remove client fifo */
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Elementary fortune server\n");
-    printf("Usage:\n");
-    printf("  fortune [-h] [-f] \n");
-    printf("  -h   print this help\n");
-    printf("  -f filename   set file for fortunes\n");
-    exit(1);
-}
diff --git a/sources/FortuneParse.c b/sources/FortuneParse.c
deleted file mode 100644 (file)
index c81c7e8..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/* FortuneParse.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Routine FortuneParse
- * parse fortunes from a fortune file
- *
- * Author: Simone Piccardi
- * Aug. 2002
- *
- * Usage: int FortuneParse(char *file, char ** fortune, int n);
- * Read n fortunes from fortune file file, and put it into the
- * string array fortune
- *
- * $Id: FortuneParse.c,v 1.3 2003/01/12 16:10:07 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <sys/stat.h>    /*  */
-#include <unistd.h>      /* include unix standard library */
-#include <stdio.h>       /* include standard I/O library */
-#include <stdlib.h>     /* standard library */
-#include <string.h>     /* ANSI C standard string */
-#include <errno.h>      /* error definitions */
-#include <fcntl.h>      /*  */
-
-#include "macros.h"
-
-/* Subroutines declaration */
-extern void usage(void);
-
-int FortuneParse(char *file, char **fortune, int n)
-{
-/* Variables definition */
-    FILE *fortunefile;
-    char line[80];
-    int i, len;
-    /* 
-     *  fortune file scanning, read string in memory 
-     */
-    fortunefile = fopen(file,"r");
-    if (fortunefile == NULL) {                       /* on open error exit */
-       printf("On file %s\n", file);
-       perror("Cannot open file");
-       exit(-1);
-    }
-    i = 0;
-    do {
-       if (!fgets(line, 80, fortunefile)) {
-           if (feof(fortunefile)) break;
-           perror("Read error");
-           exit(-1);
-       }
-       debug("i=%d, line=%s", i, line);
-       if (line[0]=='%') {
-           if (fortune[i]!=NULL) i++;
-           continue;
-       }
-       len = strlen(line) + 1;
-       if (fortune[i]==NULL) {
-           fortune[i] = malloc(len);
-           strncpy(fortune[i], line, len);
-       } else {
-           fortune[i] = realloc(fortune[i], strlen(fortune[i])+len+1);
-           strncat(fortune[i], line, len);
-       }
-    } while (i<n);
-    return i;
-}
diff --git a/sources/FortuneServer.c b/sources/FortuneServer.c
deleted file mode 100644 (file)
index 8ba3a2f..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/* FortuneServer.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program fortuned 
- * Fortune server
- *
- * Author: Simone Piccardi
- * Aug. 2002
- *
- * Usage: fortuned -h give all info
- *
- * $Id: FortuneServer.c,v 1.6 2003/01/12 00:24:28 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <sys/stat.h>    /*  */
-#include <unistd.h>      /* include unix standard library */
-#include <stdio.h>       /* include standard I/O library */
-#include <stdlib.h>     /* standard library */
-#include <string.h>     /* ANSI C standard string */
-#include <errno.h>      /* errorstring */
-#include <signal.h>     /* signals */
-#include <fcntl.h>      /*  */
-
-#include "macros.h"
-#include "Gapil.h"
-
-/* Subroutines declaration */
-void usage(void);
-void HandSIGTERM(int signo);
-int FortuneParse(char *file, char **fortune, int n);
-
-/* name of well known fifo */
-char *fifoname = "/tmp/fortune.fifo";
-int main(int argc, char *argv[])
-{
-/* Variables definition */
-    int i, n = 0;
-    char *fortunefilename = "/usr/share/games/fortunes/linux";
-    char **fortune;
-    char line[80];
-    int fifo_server, fifo_client;
-    int nread;
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    opterr = 0;                                     /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hn:f:")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           printf("Wrong -h option use\n");
-           usage();
-           return(0);
-           break;
-       case 'f':
-           fortunefilename = optarg;
-           break;
-       case 'n':
-           n = strtol(optarg, NULL, 10);
-           fortune = (char **) calloc(sizeof(*fortune), n);
-           break;
-       case '?':                                    /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:                                       /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    if (n==0) usage();          /* if no pool depth exit printing usage info */
-    Signal(SIGTERM, HandSIGTERM);            /* set handlers for termination */
-    Signal(SIGINT, HandSIGTERM);
-    Signal(SIGQUIT, HandSIGTERM);
-    i = FortuneParse(fortunefilename, fortune, n);          /* parse phrases */
-    for (n=0; n<i; n++) debug("%s%%\n", fortune[n]);
-    /* 
-     * Comunication section 
-     */
-    if (mkfifo(fifoname, 0622)) {  /* create well known fifo if does't exist */
-       if (errno!=EEXIST) {
-           perror("Cannot create well known fifo");
-           exit(1);
-       }
-    }
-    daemon(0, 0);
-    /* open fifo two times to avoid EOF */
-    fifo_server = open(fifoname, O_RDONLY);
-    if (fifo_server < 0) {
-       perror("Cannot open read only well known fifo");
-       exit(1);
-    }
-    if (open(fifoname, O_WRONLY) < 0) {
-       perror("Cannot open write only well known fifo");
-       exit(1);
-    }
-    /* Main body: loop over requests */
-    while (1) {
-       nread = read(fifo_server, line, 79);                 /* read request */
-       if (nread < 0) {
-           perror("Read Error");
-           exit(1);
-       }
-       line[nread] = 0;                       /* terminate fifo name string */
-       debug("%s %d\n", line,nread);
-       n = random() % i;                             /* select random value */
-       debug("fortune[%d]=%s\n", n, fortune[n]);
-       fifo_client = open(line, O_WRONLY);              /* open client fifo */
-       if (fifo_client < 0) {
-           debug("Client fifo is %s\n", line);
-           perror("Cannot open");
-           exit(1);
-       }
-       nread = write(fifo_client,                           /* write phrase */
-                     fortune[n], strlen(fortune[n])+1);
-       close(fifo_client);                             /* close client fifo */
-    }
-    debug("Exiting for unknown reasons\n");
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Elementary fortune server\n");
-    printf("Usage:\n");
-    printf("  fortuned [-h] [-f] -n XXX \n");
-    printf("  -h   print this help\n");
-    printf("  -f filename   set file for fortunes\n");
-    printf("  -n XXX        set pool depth\n");
-    exit(1);
-}
-/*
- * Signal Handler to manage termination
- */
-void HandSIGTERM(int signo) {
-    debug("Terminated by %s\n", strsignal(signo));
-    unlink(fifoname);
-    exit(0);
-}
diff --git a/sources/FullRead.c b/sources/FullRead.c
deleted file mode 100644 (file)
index b7be61f..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* FullRead.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Routine FullRead
- * Routine to read an exact number of bytes from a socket
- *
- * Author: Simone Piccardi
- * Jun. 2001
- *
- * $Id: FullRead.c,v 1.1 2003/02/02 20:35:33 piccardi Exp $ 
- *
- ****************************************************************/
-#include <unistd.h>
-#include <errno.h>
-
-ssize_t FullRead(int fd, void *buf, size_t count) 
-{
-    size_t nleft;
-    ssize_t nread;
-    nleft = count;
-    while (nleft > 0) {             /* repeat until no left */
-       if ( (nread = read(fd, buf, nleft)) < 0) {
-           if (errno == EINTR) {   /* if interrupted by system call */
-               continue;           /* repeat the loop */
-           } else {
-               return(nread);      /* otherwise exit */
-           }
-       } else if (nread == 0) {    /* EOF */
-           break;                  /* break loop here */ 
-       }
-       nleft -= nread;             /* set left to read */
-       buf +=nread;                /* set pointer */
-    }
-    return (count - nleft);
-}
-
diff --git a/sources/FullWrite.c b/sources/FullWrite.c
deleted file mode 100644 (file)
index dbddf1a..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* FullWrite.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Routine FullWrite
- * Routine to write an exact number of bytes into a socket
- *
- * Author: Simone Piccardi
- * Jun. 2001
- *
- * $Id: FullWrite.c,v 1.1 2003/02/02 20:35:33 piccardi Exp $ 
- *
- ****************************************************************/
-#include <unistd.h>
-#include <errno.h>
-
-ssize_t FullWrite(int fd, const void *buf, size_t count) 
-{
-    size_t nleft;
-    ssize_t nwritten;
-
-    nleft = count;
-    while (nleft > 0) {             /* repeat until no left */
-       if ( (nwritten = write(fd, buf, nleft)) < 0) {
-           if (errno == EINTR) {   /* if interrupted by system call */
-               continue;           /* repeat the loop */
-           } else {
-               return(nwritten);   /* otherwise exit with error */
-           }
-       }
-       nleft -= nwritten;          /* set left to write */
-       buf +=nwritten;             /* set pointer */
-    }
-    return (count);
-}
-
diff --git a/sources/Gapil.h b/sources/Gapil.h
deleted file mode 100644 (file)
index 90ed7d8..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Gapil.h
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*****************************************************************************
- *
- * File Gapil.h: 
- * Set of definition for service routines
- *
- * Author: S. Piccardi
- *
- * $Id: Gapil.h,v 1.8 2003/02/26 21:37:36 piccardi Exp $
- *
- *****************************************************************************/
-#include <sys/sem.h>                           /* IPC semaphore declarations */
-#include <sys/shm.h>                       /* IPC shared memory declarations */
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>                               /* unix standard functions */
-#include <fcntl.h>                          /* file control (lock) functions */
-#include <signal.h>                          /* signal handling declarations */
-#include <dirent.h>                              /* directory scan functions */
-/*
- * Definition of semun struct; used to implement a MutexXXXX API To
- * create a Mutex use an underlaying semaphore and init it; we put
- * here all the needed data structures
- */
-/* use this definition, get from the man pages */
-#if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
-/* union semun is defined by including <sys/sem.h> */
-#else
-/* according to X/OPEN we have to define it ourselves */
-union semun {
-  int val;                    /* value for SETVAL */
-  struct semid_ds *buf;       /* buffer for IPC_STAT, IPC_SET */
-  unsigned short int *array;  /* array for GETALL, SETALL */
-  struct seminfo *__buf;      /* buffer for IPC_INFO */
-};
-#endif
-/*
- * Mutex handling Functions
- */
-/* Function MutexCreate: create a mutex. See Mutex.c */
-inline int MutexCreate(key_t ipc_key);
-/* Function MutexFind: get the mutex ID given fomr IPC key. See Mutex.c */
-inline int MutexFind(key_t ipc_key);
-/* Function MutexRead: read the current value of the mutex. See Mutex.c */
-inline int MutexRead(int sem_id);
-/* Function MutexLock: to lock a mutex/semaphore. See Mutex.c */
-inline int MutexLock(int sem_id);
-/* Function MutexUnlock: to unlock a mutex/semaphore. See Mutex.c */
-inline int MutexUnlock(int sem_id);
-/* Function MutexRemove: remove the mutex/semphore. See Mutex.c */
-inline int MutexRemove(int sem_id);
-/* Function CreateMutex: create a mutex (using file locking). See Mutex.c */
-inline int CreateMutex(const char *path_name);
-/* Function UnlockMutex: find a mutex (using file locking). See Mutex.c */
-inline int FindMutex(const char *path_name);
-/* Function LockMutex: acquire a mutex (using file locking). See Mutex.c */
-inline int LockMutex(int fd);
-/* Function UnlockMutex: release a mutex (using file locking). See Mutex.c */
-inline int UnlockMutex(int fd);
-/* Function ReadMutex: read a mutex (using file locking). See Mutex.c */
-inline int ReadMutex(int fd);
-/* Function RemoveMutex: remove a mutex (using file locking). See Mutex.c */
-inline int RemoveMutex(const char *path_name);
-/* 
- * Lock files function: to create and destroy lock files
- */
-/* Function LockFile: create a lock file. See FileLock.c */
-inline int LockFile(const char* path_name);
-/* Function UnlockFile: remove a lock file. See FileLock.c */
-inline int UnlockFile(const char* path_name);
-/*
- * Signal Handling Functions
- */
-typedef void SigFunc(int);
-/* Function Signal: Initialize a signal handler. See SigHand.c */
-SigFunc * Signal(int signo, SigFunc *func);
-/* Function HandSigCHLD: to handle SIGCHILD. See SigHand.c */
-void HandSigCHLD(int sig);
-/* 
- * Socket service functions
- */
-/* Function FullRead: to read from a socket. See FullRead.c */
-ssize_t FullRead(int fd, void *buf, size_t count);
-/* Function FullWrite: to read from a socket. See FullWrite.c */
-ssize_t FullWrite(int fd, const void *buf, size_t count);
-/*
- * File miscellaneous
- */
-/* Function DirScan: simple scan for a directory. See DirScan.c */
-int DirScan(char * dirname, int(*compute)(struct dirent *));
-/*
- * Shared memory handling functions. See SharedMem.c
- */
-/* Function ShmCreate: create a SysV shared memory */
-void * ShmCreate(key_t ipc_key, int shm_size, int perm, int fill);
-/* Function ShmFind: find an existing SysV shared memory */
-void * ShmFind(key_t ipc_key, int shm_size);
-/* Function ShmRemove: remove a SysV shared memory */
-int ShmRemove(key_t ipc_key, void * shm_ptr);
-/* Function CreateShm: create a POSIX shared memory */
-void * CreateShm(char * shm_name, off_t shm_size, int perm, int fill);
-/* Function FindShm: find an existing POSIX shared memory */
-void * FindShm(char * shm_name, off_t shm_size);
-/* Function RemoveShm: remove a POSIX shared memory */
-int RemoveShm(char * shm_name);
diff --git a/sources/IPCTestId.c b/sources/IPCTestId.c
deleted file mode 100644 (file)
index 2aa66ee..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/* IPCTestId.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program IPCTestId.c: 
- * Program to test IPC identifiers
- *
- * Author: Simone Piccardi
- * Aug. 2002
- *
- * Usage: ipctestid -h give all info's
- *
- * $Id: IPCTestId.c,v 1.2 2002/08/19 17:34:23 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <errno.h>       /* error definitions and routines */ 
-#include <stdlib.h>      /* C standard library */
-#include <unistd.h>      /* unix standard library */
-#include <stdio.h>      /* standard I/O library */
-#include <string.h>      /* string functions */
-#include <sys/ipc.h>     /* SysV IPC functions */
-#include <sys/msg.h>     /* SysV Message Queue */
-#include <sys/sem.h>     /* SysV Semaphores */
-#include <sys/shm.h>     /* SysV Shared Memory */
-
-#include "macros.h"      /* My macros */
-/* Help printing routine */
-void usage(void);
-
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int i; 
-    int n = 5;                                        /* default is 10 tryes */
-    char type='q';                                  /* default is use queues */
-    int id;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hqsmn:")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':   /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case 'q':   /* Message Queue */
-           debug("Message Queue\n");
-           type = i;
-           break;
-       case 's':   /* Semaphore */
-           debug("Semaphore\n");
-           type = i;
-           break;
-       case 'm':   /* Shared Memory */
-           debug("Shared Memory\n");
-           type = i;
-           break;
-       case 'n':   /* Number of tryes */
-           debug("Number of tryes\n");
-           n = strtol(optarg, NULL, 10);
-           break;
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    switch (type) {
-    case 'q':   /* Message Queue */
-       debug("Message Queue Try\n");
-       for (i=0; i<n; i++) {
-           id = msgget(IPC_PRIVATE, IPC_CREAT|0666);
-           printf("Identifier Value %d \n", id);
-           msgctl(id, IPC_RMID, NULL);
-       }
-       break;
-    case 's':   /* Semaphore */
-       debug("Semaphore\n");
-       for (i=0; i<n; i++) {
-           id = semget(IPC_PRIVATE, 1, IPC_CREAT|0666);
-           printf("Identifier Value %d \n", id);
-           semctl(id, 0, IPC_RMID);
-       }
-       break;
-    case 'm':   /* Shared Memory */
-       debug("Shared Memory\n");
-       for (i=0; i<n; i++) {
-           id = shmget(IPC_PRIVATE, 1000, IPC_CREAT|0666);
-           printf("Identifier Value %d \n", id);
-           shmctl(id, IPC_RMID, NULL);
-       }
-       break;
-    default:    /* should not reached */
-       return -1;
-    }
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program ipctestid : test IPC identifier number assignment\n");
-    printf("Usage:\n");
-    printf("  ipctestid [-h] [-qsm] [-n N] \n");
-    printf("  -h     print this help\n");
-    printf("  -q     try for message queue identifiers\n");
-    printf("  -s     try for semaphore identifiers\n");
-    printf("  -m     try for shared memory identifiers\n");
-    printf("  -n XX  try XX times\n");
-    
-    exit(1);
-}
-
diff --git a/sources/LockFile.c b/sources/LockFile.c
deleted file mode 100644 (file)
index 5fe7c3b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/* LockFile.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*****************************************************************************
- *
- * File LockFile.h: 
- * Function to manipulate lock files.
- *
- * Author: S. Piccardi, Dec 2002
- *
- * $Id: LockFile.c,v 1.2 2002/12/03 22:30:11 piccardi Exp $
- *
- *****************************************************************************/
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>                               /* unix standard functions */
-#include <fcntl.h>                          /* file control (lock) functions */
-/*
- * Function LockFile:
- *
- * Create a lockfile of the given pathname.  Fail and exit in case of
- * error or existence of the same lock file, using unlink do not need
- * to remove the file.
- *
- * Author: Simone Piccardi, Dec. 2002
- */
-int LockFile(const char* path_name)
-{
-    return open(path_name, O_EXCL|O_CREAT);
-}
-/*
- * Function UnlockFile:
- * Remove a lockfile of the given pathname.
- *
- * Author: Simone Piccardi, Dec. 2002
- */
-int UnlockFile(const char* path_name) 
-{
-    return unlink(path_name);
-}
diff --git a/sources/MQFortuneClient.c b/sources/MQFortuneClient.c
deleted file mode 100644 (file)
index a26f672..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/* MQFortuneClient.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program fortuned 
- * Fortune Cleint - Using Message Queues
- *
- * Author: Simone Piccardi
- * Oct. 2002
- *
- * Usage: fortune -h give all info
- *
- * $Id: MQFortuneClient.c,v 1.2 2002/12/03 11:06:05 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <sys/stat.h>    /*  */
-#include <unistd.h>      /* include unix standard library */
-#include <stdio.h>       /* include standard I/O library */
-#include <stdlib.h>     /* standard library */
-#include <string.h>     /* ANSI C standard string */
-#include <errno.h>      /* errorstring */
-#include <signal.h>     /* signals */
-#include <sys/ipc.h>
-#include <sys/msg.h>
-
-#include "macros.h"
-
-/* Maximum message size */
-#define MSGMAX 8192
-
-/* Subroutines declaration */
-void usage(void);
-
-int main(int argc, char *argv[])
-{
-/* Variables definition */
-    int i;
-    struct msgbuf_read {          /* message struct to ask fortune to server */
-       long mtype;                               /* message type, must be 1 */
-       long pid;             /* message data, must be the pid of the client */
-    } msg_read;
-    struct msgbuf_write {        /* message struct to get result from server */
-       long mtype;            /* message type, will be the pid of the client*/
-       char mtext[MSGMAX];             /* message data, will be the fortune */
-    } msg_write;
-    int msgid;                                   /* Message queue identifier */
-    key_t key;                                          /* Message queue key */
-    int size;                                                /* message size */
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    opterr = 0;                                     /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           usage();
-           return(0);
-           break;
-       case '?':                                    /* unrecognized options */
-           printf("Unrecognized options -%c\n", optopt);
-           usage();
-       default:                                       /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* 
-     * Comunication section 
-     */
-    key = ftok("./MQFortuneServer.c", 1); 
-    msgid = msgget(key, 0); 
-    if (msgid < 0) {
-       perror("Cannot find message queue");
-       exit(1);
-    }
-
-    /* Main body: do request and write result */
-    msg_read.mtype = 1;                      /* type for request is always 1 */
-    msg_read.pid = getpid();                   /* use pid for communications */
-    size = sizeof(msg_read.pid);  
-    msgsnd(msgid, &msg_read, size, 0);               /* send request message */
-    debug("sent request from %d\n", msg_read.pid);
-    msgrcv(msgid, &msg_write, MSGMAX, msg_read.pid, MSG_NOERROR);
-    printf("%s", msg_write.mtext);
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Elementary fortune server\n");
-    printf("Usage:\n");
-    printf("  fortuned [-h] [-f] -n XXX \n");
-    printf("  -h   print this help\n");
-    printf("  -f filename   set file for fortunes\n");
-    printf("  -n XXX        set pool depth\n");
-    exit(1);
-}
diff --git a/sources/MQFortuneServer.c b/sources/MQFortuneServer.c
deleted file mode 100644 (file)
index 0f56bde..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/* MQFortuneServer.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program fortuned 
- * Fortune server - Using Message Queues
- *
- * Author: Simone Piccardi
- * Aug. 2002
- *
- * Usage: fortuned -h give all info
- *
- * $Id: MQFortuneServer.c,v 1.4 2003/01/12 16:10:07 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <sys/stat.h>    /*  */
-#include <unistd.h>      /* include unix standard library */
-#include <stdio.h>       /* include standard I/O library */
-#include <stdlib.h>     /* standard library */
-#include <string.h>     /* ANSI C standard string */
-#include <errno.h>      /* errorstring */
-#include <signal.h>     /* signals */
-#include <sys/ipc.h>
-#include <sys/msg.h>
-
-#include "macros.h"
-#include "Gapil.h"
-
-/* Maximum message size */
-#define MSGMAX 8192
-
-/* Subroutines declaration */
-void usage(void);
-void HandSIGTERM(int signo);
-int FortuneParse(char *file, char **fortune, int n);
-
-int msgid;                                       /* Message queue identifier */
-int main(int argc, char *argv[])
-{
-/* Variables definition */
-    int i, n = 0;
-    char **fortune;                       /* array of fortune message string */
-    char *fortunefilename = "/usr/share/games/fortunes/linux";  /* file name */
-    struct msgbuf_read {      /* message struct to read request from clients */
-       long mtype;                               /* message type, must be 1 */
-       long pid;             /* message data, must be the pid of the client */
-    } msg_read;
-    struct msgbuf_write {       /* message struct to write result to clients */
-       long mtype;            /* message type, will be the pid of the client*/
-       char mtext[MSGMAX];             /* message data, will be the fortune */
-    } msg_write;
-    key_t key;                                          /* Message queue key */
-    int size;                                                /* message size */
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    opterr = 0;                                     /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hn:f:")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':                                       /* print usage infos */
-           usage();
-           return(0);
-           break;
-       case 'f':                                   /* set fortune file name */
-           fortunefilename = optarg;
-           break;
-       case 'n':                     /* set number of fortune string to use */
-           n = strtol(optarg, NULL, 10);
-           fortune = (char **) calloc(sizeof(*fortune), n);
-           break;
-       case '?':                                    /* unrecognized options */
-           printf("Unrecognized options -%c\n", optopt);
-           usage();
-       default:                                       /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    if (n==0) usage();          /* if no pool depth exit printing usage info */
-    Signal(SIGTERM, HandSIGTERM);            /* set handlers for termination */
-    Signal(SIGINT, HandSIGTERM);
-    Signal(SIGQUIT, HandSIGTERM);
-    i = FortuneParse(fortunefilename, fortune, n);          /* parse phrases */
-    for (n=0; n<i; n++) debug("%s%%\n", fortune[n]);
-    /* 
-     * Comunication section 
-     */
-    key = ftok("./MQFortuneServer.c", 1); 
-    msgid = msgget(key, IPC_CREAT|0666);
-    if (msgid < 0) {
-       perror("Cannot create message queue");
-       exit(1);
-    }
-
-    /* Main body: loop over requests */
-    daemon(0, 0);
-    while (1) {
-       msgrcv(msgid, &msg_read, sizeof(int), 1, MSG_NOERROR);
-       debug("received request from %d\n", msg_read.pid);
-       n = random() % i;                             /* select random value */
-       strncpy(msg_write.mtext, fortune[n], MSGMAX);
-       size = min(strlen(fortune[n])+1, MSGMAX);  
-       msg_write.mtype=msg_read.pid;             /* use request pid as type */
-       msgsnd(msgid, &msg_write, size, 0);
-    }
-    debug("Exiting for unknown reasons\n");
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Elementary fortune server\n");
-    printf("Usage:\n");
-    printf("  fortuned [-h] [-f] -n XXX \n");
-    printf("  -h   print this help\n");
-    printf("  -f filename   set file for fortunes\n");
-    printf("  -n NNN        set pool depth\n");
-    exit(1);
-}
-/*
- * Signal Handler to manage termination
- */
-void HandSIGTERM(int signo) {
-    debug("Terminated by %s\n", strsignal(signo));
-    msgctl(msgid, IPC_RMID, NULL);                   /* remove message queue */
-    exit(0);
-}
diff --git a/sources/Makefile b/sources/Makefile
deleted file mode 100644 (file)
index e5c6816..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Simple Makefile to build examples
-#
-# C flags
-CC=gcc
-CFLAGS= -Wall -g -DDEBUG -fPIC
-CFLAGJ= -L./ -lgapil
-
-LIB = libgapil.so
-
-OBJ = FullRead.o FullWrite.o SigHand.o Mutex.o SharedMem.o LockFile.o DirScan.o
-
-FINAL = forktest errcode echo echod daytimed iterdaytimed daytime testfopen \
-       testren fortune fortuned mqfortune mqfortuned flock myls dirmonitor \
-       readmon ipctestid writeshm #readshm
-
-$(LIB): $(OBJ)
-       gcc -shared -lrt $^ -o $@
-
-$(OBJ): Gapil.h
-
-all: $(FINAL) $(LIB)
-
-dirmonitor: DirMonitor.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-readmon: ReadMonitor.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-myls: myls.c  
-       $(CC) $(CFLAGJ) $^ -o $@
-
-flock: Flock.c
-       $(CC) $^ -o $@ 
-
-mqfortune: MQFortuneClient.c FortuneParse.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-mqfortuned: MQFortuneServer.c FortuneParse.c 
-       $(CC) $(CFLAGJ) $^ -o $@
-
-fortune: FortuneClient.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-fortuned: FortuneServer.c FortuneParse.c 
-       $(CC) $(CFLAGJ) $^ -o $@
-
-barcode: BarCode.c
-       $(CC)  $^ -o $@
-
-barcodepage: BarCodePage.c
-       $(CC) $^ -o $@
-
-getparam: getparam.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-testfopen: test_fopen.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-testren: TestRen.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-forktest: ForkTest.c 
-       $(CC) $(CFLAGJ) $^ -o $@
-
-errcode: ErrCode.c 
-       $(CC) $(CFLAGJ) $^ -o $@
-
-echo: SimpleEchoTCPClient.c 
-       $(CC) $(CFLAGJ) $^ -o $@
-
-echod: SimpleEchoTCPServer.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-daytimed: TCP_cunc_daytimed.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-iterdaytimed: TCP_iter_daytimed.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-daytime: TCP_daytime.c 
-       $(CC) $(CFLAGJ) $^ -o $@
-
-ipctestid: IPCTestId.c
-       $(CC)  $^ -o $@
-
-writeshm: WriteShm.c
-       $(CC) $(CFLAGJ) $^ -o $@
-
-#readshm: ReadShm.c
-#      $(CC) $(CFLAGJ) $^ -o $@
-
-
-# Macro per la generazione della tarball dei sorgenti
-package: clean gapil_source.tgz
-
-
-gapil_source.tgz: 
-       tar --exclude=CVS -cvz . -f $@
-       mv $@ ..
-
-
-.PHONY : clean
-clean:
-       rm -f $(FINAL)
-       rm -f *~
-       rm -f *.o
-       rm -f *.so
-       rm -f prova*
-       rm -f output*
diff --git a/sources/Mutex.c b/sources/Mutex.c
deleted file mode 100644 (file)
index 52991f5..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/* Mutex.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*****************************************************************************
- *
- * File Mutex.c: define a set of functions for mutex manipulation 
- *
- * Author: S. Piccardi Dec. 2002
- *
- * $Id: Mutex.c,v 1.5 2003/01/06 21:24:41 piccardi Exp $
- *
- *****************************************************************************/
-#include <sys/sem.h>     /* IPC semaphore declarations */
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <signal.h>      /* signal handling declarations */
-
-#include "Gapil.h"
-/*
- * Function MutexCreate: create a mutex/semaphore
- *
- * First call create a semaphore, using the given key. 
- * We want only one semaphore so we set second argument to 1; third 
- * parameter is the flag argument, and is set to create a semaphore 
- * with R/W privilege for the user.
- * Second call initialize the semaphore to 1 (unlocked)
- *
- * Input: an IPC key value (to create an unique semaphore)
- * Return: the semaphore id# or -1 on error
- */
-int MutexCreate(key_t ipc_key) 
-{
-    const union semun semunion={1};             /* semaphore union structure */
-    int sem_id, ret;
-    sem_id = semget(ipc_key, 1, IPC_CREAT|0666);         /* get semaphore ID */
-    if (sem_id == -1) {                              /* if error return code */
-       return sem_id;
-    }
-    ret = semctl(sem_id, 0, SETVAL, semunion);             /* init semaphore */
-    if (ret == -1) {
-       return ret;
-    }
-    return sem_id;
-}
-/*
- * Function MutexFind: get the semaphore/mutex Id given the IPC key value
- *
- * Input: an IPC key value
- */
-int MutexFind(key_t ipc_key) 
-{
-    return semget(ipc_key, 1, 0);
-}
-/*
- * Function MutexRead: read the current value of the mutex/semaphore
- *
- * Input:  a semaphore id #
- * Return: the semaphore value
- */
-int MutexRead(int sem_id) 
-{
-    return semctl(sem_id, 0, GETVAL);
-}
-/*
- * Define sembuf structures to lock and unlock the semaphore 
- * (used to implement a mutex)
- */
-struct sembuf sem_lock={                                /* to lock semaphore */
-    0,                                   /* semaphore number (only one so 0) */
-    -1,                                    /* operation (-1 to use resource) */
-    SEM_UNDO};                                /* flag (set for undo at exit) */
-struct sembuf sem_ulock={                             /* to unlock semaphore */
-    0,                                   /* semaphore number (only one so 0) */
-    1,                                  /* operation (1 to release resource) */
-    SEM_UNDO};                                      /* flag (in this case 0) */
-/*
- * Function MutexLock: to lock a mutex/semaphore
- *
- * Input:  a semaphore id #
- * Output: semop return code  (0 OK, -1 KO)
- */
-int MutexLock(int sem_id) 
-{
-    return semop(sem_id, &sem_lock, 1);
-}
-/*
- * Function MutexUnlock: to unlock a mutex/semaphore
- *
- * Input:  a semaphore id #
- * Return: semop return code (0 OK, -1 KO)
- */
-int MutexUnlock(int sem_id) 
-{
-    return semop(sem_id, &sem_ulock, 1);
-}
-/*
- * Function MutexRemove: remove a mutex/semaphore
- *
- * Input:  a semaphore id #
- * Return: return code of semctl
- */
-int MutexRemove(int sem_id) 
-{
-    return semctl(sem_id, 0, IPC_RMID);
-}
-/***************************************************************************** 
- *
- * File locking mutex 
- *
- * Create a mutex usinf file locking. Use file locking to lock a file
- * as a mutex request, and unlock it as a mutex release.
- *
- * Author: S. Piccardi Dec. 2002
- *
- *****************************************************************************/
-/*
- * Function CreateMutex: Create a mutex using file locking.  
- *
- * Open a new lock file (creating it if not existent, and giving error
- * otherwise). Is a simple wrapper for open.
- *
- * Input:  a filename
- * Output: a file descriptor  (>0 OK, -1 KO)
- */
-int CreateMutex(const char *path_name)
-{
-    return open(path_name, O_EXCL|O_CREAT);
-}
-/*
- * Function UnlockMutex: unlock a file.  
- * 
- * Open a lock file (failing if not existent). Is a simple wrapper for
- * open.
- *
- * Input:  a filename
- * Output: a return code  (>0 OK, -1 KO)
- */
-int FindMutex(const char *path_name)
-{
-    return open(path_name, O_RDWR);
-}
-/*
- * Function LockMutex: lock mutex using file locking.
- *
- * Input:  a mutex (i.e. a file descriptor)
- * Output: a return code  (0 OK, -1 KO)
- */
-int LockMutex(int fd)
-{
-    struct flock lock;                                /* file lock structure */
-    /* first open the file (creating it if not existent) */
-    /* set flock structure */
-    lock.l_type = F_WRLCK;                        /* set type: read or write */
-    lock.l_whence = SEEK_SET;        /* start from the beginning of the file */
-    lock.l_start = 0;                  /* set the start of the locked region */
-    lock.l_len = 0;                   /* set the length of the locked region */
-    /* do locking */
-    return fcntl(fd, F_SETLKW, &lock);
-}
-/*
- * Function UnlockMutex: unlock a file.  
- *
- * Input:  a mutex (i.e. a file descriptor)
- * Output: a return code  (0 OK, -1 KO)
- */
-int UnlockMutex(int fd)
-{
-    struct flock lock;                                /* file lock structure */
-    /* set flock structure */
-    lock.l_type = F_UNLCK;                               /* set type: unlock */
-    lock.l_whence = SEEK_SET;        /* start from the beginning of the file */
-    lock.l_start = 0;                  /* set the start of the locked region */
-    lock.l_len = 0;                   /* set the length of the locked region */
-    /* do locking */
-    return fcntl(fd, F_SETLK, &lock);
-}
-/*
- * Function RemoveMutex: remove a mutex (unlinking the lock file).
- * 
- * Just remove the lock file.
- *
- * Input:  a filename
- * Output: a return code (0 OK, -1 KO)
- */
-int RemoveMutex(const char *path_name)
-{
-    return unlink(path_name);
-}
-/*
- * Function ReadMutex: read a mutex status.
- * 
- * Read the status for a mutex.
- *
- * Input:  a mutex (i.e. a file descriptor)
- * Output: the lock type (F_UNLCK,  F_RDLCK or  F_WRLCK, or -1 if KO)
- */
-int ReadMutex(int fd)
-{
-    int res;
-    struct flock lock;                                /* file lock structure */
-    /* set flock structure */
-    lock.l_type = F_WRLCK;                               /* set type: unlock */
-    lock.l_whence = SEEK_SET;        /* start from the beginning of the file */
-    lock.l_start = 0;                  /* set the start of the locked region */
-    lock.l_len = 0;                   /* set the length of the locked region */
-    /* do locking */
-    if ( (res = fcntl(fd, F_GETLK, &lock)) ) {
-       return res;
-    }
-    return lock.l_type;
-}
diff --git a/sources/PXDirMonitor.c b/sources/PXDirMonitor.c
new file mode 100644 (file)
index 0000000..4c14abb
--- /dev/null
@@ -0,0 +1,178 @@
+/* PXDirMonitor.c
+ * 
+ * Copyright (C) 2002 Simone Piccardi
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/*****************************************************************************
+ *
+ * File PXDirMonitor: 
+ *
+ * An example for shared memory use: monitor a directory status,
+ * saving data in a shared memory segment. This version use POSIX
+ * shared memory.
+ *
+ * Author: S. Piccardi Jan. 2003
+ *
+ * $Id: PXDirMonitor.c,v 1.1 2003/05/02 09:50:55 piccardi Exp $
+ *
+ *****************************************************************************/
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>        /* directory */
+#include <stdlib.h>        /* C standard library */
+#include <unistd.h>
+
+#include "Gapil.h"
+#include "macros.h"
+
+/* Help printing routine */
+void usage(void);
+/* computation function for DirScan */
+int ComputeValues(struct dirent * direntry);
+void HandSIGTERM(int signo);
+
+/* global variables for shared memory segment */
+struct DirProp {
+    int tot_size;    
+    int tot_files;   
+    int tot_regular; 
+    int tot_fifo;    
+    int tot_link;    
+    int tot_dir;     
+    int tot_block;   
+    int tot_char;    
+    int tot_sock;
+} *shmptr;
+int shmid; 
+int mutex;
+
+int main(int argc, char *argv[]) 
+{
+    int i, pause = 10;
+    key_t key;
+    /*
+     * Input section: decode command line parameters 
+     * Use getopt function
+     */
+    opterr = 0;         /* don't want writing to stderr */
+    while ( (i = getopt(argc, argv, "hp:")) != -1) {
+       switch (i) {
+       /* 
+        * Handling options 
+        */ 
+       case 'p':                                     /* set pause (in sec.) */
+           pause = strtol(optarg, NULL, 10);
+           break;
+       case 'h':                                             /* help option */
+           printf("Wrong -h option use\n");
+           usage();
+           return -1;
+           break;
+       case '?':                                    /* unrecognized options */
+           printf("Unrecognized options -%c\n",optopt);
+           usage();
+       default:                                       /* should not reached */
+           usage();
+       }
+    }
+    /* ***********************************************************
+     * 
+     *          Options processing completed
+     *
+     *               Main code beginning
+     * 
+     * ***********************************************************/
+    if ((argc - optind) != 1) {          /* There must be remaing parameters */
+       printf("Wrong number of arguments %d\n", argc - optind);
+        usage();
+    }
+    if (chdir(argv[1])) {                      /* chdir to be sure dir exist */
+       perror("Cannot find directory to monitor");
+       exit(1);
+    }
+    Signal(SIGTERM, HandSIGTERM);            /* set handlers for termination */
+    Signal(SIGINT, HandSIGTERM);
+    Signal(SIGQUIT, HandSIGTERM);
+    key = ftok("~/gapil/sources/DirMonitor.c", 1);  /* define a key, use dir */
+    shmid = shmget(key, 4096, IPC_CREAT|0666);        /* get a shared memory */
+    if (shmid < 0) {
+       perror("Cannot create shared memory");
+       exit(1);
+    }
+    if ( (shmptr = shmat(shmid, NULL, 0)) == NULL ) {   /* attach to process */
+       perror("Cannot attach segment");
+       exit(1);
+    }
+    if ((mutex = MutexCreate(key)) == -1) {                   /* get a Mutex */
+       perror("Cannot create mutex");
+       exit(1);
+    }
+    /* main loop, monitor directory properties each 10 sec */
+    daemon(1, 0);              /* demonize process, staying in monitored dir */
+    while (1) {
+       MutexLock(mutex);                              /* lock shared memory */
+       memset(shmptr, 0, sizeof(struct DirProp));    /* erase previous data */
+       DirScan(argv[1], ComputeValues);                     /* execute scan */
+       MutexUnlock(mutex);                          /* unlock shared memory */
+       sleep(pause);                              /* sleep until next watch */
+    }
+}
+/*
+ * Routine to compute directory properties inside DirScan
+ */
+int ComputeValues(struct dirent * direntry) 
+{
+    struct stat data;
+    stat(direntry->d_name, &data);                          /* get stat data */
+    shmptr->tot_size += data.st_size;
+    shmptr->tot_files++;
+    if (S_ISREG(data.st_mode)) shmptr->tot_regular++;
+    if (S_ISFIFO(data.st_mode)) shmptr->tot_fifo++;
+    if (S_ISLNK(data.st_mode)) shmptr->tot_link++;
+    if (S_ISDIR(data.st_mode)) shmptr->tot_dir++;
+    if (S_ISBLK(data.st_mode)) shmptr->tot_block++;
+    if (S_ISCHR(data.st_mode)) shmptr->tot_char++;
+    if (S_ISSOCK(data.st_mode)) shmptr->tot_sock++;
+    return 0;
+}
+/*
+ * routine to print usage info and exit
+ */
+void usage(void) {
+    printf("Program myls: list file in a directory \n");
+    printf("Usage:\n");
+    printf("  DirMonitor [-h] [-p sec] dirname \n");
+    printf("  -h          print this help\n");
+    printf("  -p sec      set watch interval to sec seconds \n");
+    exit(1);
+}
+/*
+ * Signal Handler to manage termination
+ */
+void HandSIGTERM(int signo) {
+    MutexLock(mutex);
+    debug("Terminated by %s\n", strsignal(signo));
+    if (shmdt(shmptr)) {
+       perror("Error detaching shared memory");
+       exit(1);
+    }
+    if (shmctl(shmid, IPC_RMID, NULL)) {
+       perror("Cannot remove shared memory segment");
+       exit(1);
+    }
+    MutexRemove(mutex);
+    exit(0);
+}
diff --git a/sources/ProcInfo.c b/sources/ProcInfo.c
deleted file mode 100644 (file)
index eb16fc0..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/* ProcInfo.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program test_fopen.c: 
- * Program to test function fopen
- *
- * Author: Simone Piccardi
- * Dec. 2001
- *
- * Usage: procinfo -h give all info's
- *
- * $Id: ProcInfo.c,v 1.1 2002/01/03 23:44:14 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#define _GNU_SOURCE
-#include <errno.h>       /* error definitions and routines */ 
-#include <stdlib.h>      /* C standard library */
-#include <unistd.h>      /* unix standard library */
-#include <stdio.h>      /* standard I/O library */
-#include <string.h>      /* string functions */
-
-/* Help printing routine */
-void usage(void);
-
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int i;
-    FILE * file;
-    char * ptr;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':   /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* There must be 2 remaing parameters */
-    if ( (argc-optind) != 2 )  {
-       printf("From %d arguments, removed %d options\n", argc, optind);
-       usage();
-    }
-    if ( !(file = fopen(argv[1], argv[2]))) {
-       perror("cannot open file");
-       exit(1);
-    }
-    i = 100;
-    ptr = malloc(i);
-    getline(&ptr, &i, file);
-//    fclean(file);  /* do not exist on Linux */
-    flockfile(file);
-    fclose(file);
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program testfopen : test fopen for a file  \n");
-    printf("Usage:\n");
-    printf("  testfopen [-h] file mode \n");
-    printf("  -h          print this help\n");
-    
-    exit(1);
-}
-
diff --git a/sources/ReadMonitor.c b/sources/ReadMonitor.c
deleted file mode 100644 (file)
index b4c757d..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/* ReadMonitor.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*****************************************************************************
- *
- * File ReadMonitor: 
- *
- * An example for shared memory use: read data saved in a shared
- * memory segment from the DirMonitor program
- *
- * Author: S. Piccardi Jan. 2003
- *
- * $Id: ReadMonitor.c,v 1.3 2003/02/26 21:37:36 piccardi Exp $
- *
- *****************************************************************************/
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>        /* directory */
-#include <stdlib.h>        /* C standard library */
-#include <unistd.h>
-
-#include "Gapil.h"
-#include "macros.h"
-
-/* Help printing routine */
-void usage(void);
-
-/* variables for shared memory segment */
-int shmid; 
-struct DirProp {
-    int tot_size;    
-    int tot_files;   
-    int tot_regular; 
-    int tot_fifo;    
-    int tot_link;    
-    int tot_dir;     
-    int tot_block;   
-    int tot_char;    
-    int tot_sock;
-};
-struct DirProp *shmptr;
-int mutex;
-
-int main(int argc, char *argv[]) 
-{
-    int i;
-    key_t key;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hs:l:wrbf")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':                                            /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case '?':                                    /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:                                       /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* create needed IPC objects */
-    key = ftok("~/gapil/sources/DirMonitor.c", 1);           /* define a key */
-    if (!(shmptr = ShmFind(key, 4096))) {     /* get a shared memory segment */
-       perror("Cannot find shared memory");
-       exit(1);
-    }
-    if ((mutex = MutexFind(key)) == -1) {                   /* get the Mutex */
-       perror("Cannot find mutex");
-    }
-    /* main loop */
-    MutexLock(mutex);                                  /* lock shared memory */
-    printf("Ci sono %d file dati\n", shmptr->tot_regular);
-    printf("Ci sono %d directory\n", shmptr->tot_dir);
-    printf("Ci sono %d link\n", shmptr->tot_link);
-    printf("Ci sono %d fifo\n", shmptr->tot_fifo);
-    printf("Ci sono %d socket\n", shmptr->tot_sock);
-    printf("Ci sono %d device a caratteri\n", shmptr->tot_char);
-    printf("Ci sono %d device a blocchi\n", shmptr->tot_block);
-    printf("Totale  %d file, per %d byte\n",
-           shmptr->tot_files, shmptr->tot_size);
-    MutexUnlock(mutex);                              /* unlock shared memory */
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program myls: list file in a directory \n");
-    printf("Usage:\n");
-    printf("  myls [-h] dirname \n");
-    printf("  -h          print this help\n");
-    exit(1);
-}
diff --git a/sources/SetTermAttr.c b/sources/SetTermAttr.c
deleted file mode 100644 (file)
index c41fef1..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/* SetTermAttr.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Routine SetTermAttr
- * Routine to set a local attribute for a terminal
- *
- * Author: Simone Piccardi
- * Jun. 2001
- *
- * $Id: SetTermAttr.c,v 1.1 2002/10/09 16:59:39 piccardi Exp $ 
- *
- ****************************************************************/
-#include <unistd.h>
-#include <termios.h>
-#include <errno.h>
-
-int SetTermAttr(int fd, tcflag_t flag) 
-{
-    struct termios values;
-    int res;
-
-    res = tcgetattr (desc, &values);
-    if (res) {
-       perror("Cannot get attributes");
-       return res;
-    }
-    values.c_lflag |= flag;
-    res = tcsetattr (desc, TCSANOW, &values);
-    if (res) {
-       perror("Cannot set attributes");
-       return res;
-    }
-    return 0;
-}
-int UnSetTermAttr(int fd, tcflag_t flag) 
-{
-    struct termios values;
-    int res;
-
-    res = tcgetattr (desc, &values);
-    if (res) {
-       perror("Cannot get attributes");
-       return res;
-    }
-    values.c_lflag &= (~flag);
-    res = tcsetattr (desc, TCSANOW, &values);
-    if (res) {
-       perror("Cannot set attributes");
-       return res;
-    }
-    return 0;
-}
-
diff --git a/sources/SharedMem.c b/sources/SharedMem.c
deleted file mode 100644 (file)
index 7e5d554..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/* SharedMem.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/***************************************************************
- *
- * File SharedMem.c 
- * Routines for Shared Memory use. 
- *
- * Define two interfaces, the first one use SysV shared memory, the
- * second POSIX shared memory.
- *
- * Author: S. Piccardi
- *
- * $Id: SharedMem.c,v 1.6 2003/03/05 00:45:30 piccardi Exp $
- *
- ***************************************************************/
-#include <sys/shm.h>                  /* SysV IPC shared memory declarations */
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdio.h>                                 /* standard I/O functions */
-#include <fcntl.h>
-#include <signal.h>                          /* signal handling declarations */
-#include <unistd.h>
-#include <sys/mman.h>
-#include <string.h>
-#include <errno.h>
-
-#include "macros.h"
-/* *************************************************************************
- *
- *  Functions for SysV shared memory
- *
- * ************************************************************************* */
-/*
- * Function ShmCreate:
- * Create and attach a SysV shared memory segment to the current process.
- *
- * First call get a shared memory segment with KEY key access and size SIZE,
- * by creating it with R/W privilege for the user (this is the meaning of
- * the ored flags). The function return an identifier shmid used for any 
- * further reference to the shared memory segment. 
- * Second call attach the shared memory segment to this process and return a
- * pointer to it (of void * type). 
- * Then initialize shared memory to the given value
- *
- * Input:  an IPC key value
- *         the shared memory segment size
- *         the permissions
- *         the fill value
- * Return: the address of the shared memory segment (NULL on error)
- */
-void * ShmCreate(key_t ipc_key, int shm_size, int perm, int fill) 
-{
-    void * shm_ptr;
-    int shm_id;                       /* ID of the IPC shared memory segment */
-    shm_id = shmget(ipc_key, shm_size, IPC_CREAT|perm);        /* get shm ID */
-    if (shm_id < 0) { 
-       return NULL;
-    }
-    shm_ptr = shmat(shm_id, NULL, 0);                  /* map it into memory */
-    if (shm_ptr < 0) {
-       return NULL;
-    }
-    memset((void *)shm_ptr, fill, shm_size);                 /* fill segment */
-    return shm_ptr;
-}
-/*
- * Function ShmFind:
- * Find a SysV shared memory segment 
- * Input:  an IPC key value
- *         the shared memory segment size
- * Return: the address of the segment (NULL on error)
- */
-void * ShmFind(key_t ipc_key, int shm_size) 
-{
-    void * shm_ptr;
-    int shm_id;                      /* ID of the SysV shared memory segment */
-    shm_id = shmget(ipc_key, shm_size, 0);          /* find shared memory ID */
-    if (shm_id < 0) {
-       return NULL;
-    }
-    shm_ptr = shmat(shm_id, NULL, 0);                  /* map it into memory */
-    if (shm_ptr < 0) {
-       return NULL;
-    }
-    return shm_ptr;
-}
-/*
- * Function ShmRemove:
- * Schedule removal for a SysV shared memory segment 
- * Input:  an IPC key value
- *         the shared memory segment size
- * Return: 0 on success, -1 on error
- */
-int ShmRemove(key_t ipc_key, void * shm_ptr) 
-{
-    int shm_id;                      /* ID of the SysV shared memory segment */
-    /* first detach segment */
-    if (shmdt(shm_ptr) < 0) {
-       return -1;
-    }
-    /* schedule segment removal */
-    shm_id = shmget(ipc_key, 0, 0);                 /* find shared memory ID */
-    if (shm_id < 0) {
-       if (errno == EIDRM) return 0;
-       return -1;
-    }
-    if (shmctl(shm_id, IPC_RMID, NULL) < 0) {             /* ask for removal */
-       if (errno == EIDRM) return 0;
-       return -1;
-    }
-    return 0;
-}
-/* *************************************************************************
- *
- *  Functions for POSIX shared memory
- *
- * ************************************************************************* */
-/*
- * Function CreateShm:
- * Create a POSIX shared memory segment and map it to the current process.
- *
- *
- * Input:  a pathname
- *         the shared memory segment size
- *         the permissions
- *         the fill value
- * Return: the address of the shared memory segment (NULL on error)
- */
-void * CreateShm(char * shm_name, off_t shm_size, mode_t perm, int fill) 
-{
-    void * shm_ptr;
-    int fd;
-    int flag;
-    /* first open the object, creating it if not existent */
-    flag = O_CREAT|O_EXCL|O_RDWR;
-    fd = shm_open(shm_name, flag, perm);    /* get object file descriptor */
-    if (fd < 0) { 
-       perror("errore in shm_open");
-       return NULL;
-    }
-    /* set the object size */
-    if (ftruncate(fd, shm_size)) {
-       perror("errore in ftruncate");
-       return NULL;
-    }
-    /* map it in the process address space */
-    shm_ptr = mmap(NULL, shm_size, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
-    if (shm_ptr == MAP_FAILED) {
-       perror("errore in mmap");
-       return NULL;
-    }
-    memset((void *) shm_ptr, fill, shm_size);                /* fill segment */
-    return shm_ptr;
-}
-/*
- * Function FindShm:
- * Find a POSIX shared memory segment 
- * Input:  a name
- *         the shared memory segment size
- * Return: the address of the segment (NULL on error)
- */
-void * FindShm(char * shm_name, off_t shm_size) 
-{
-    void * shm_ptr;
-    int fd;                           /* ID of the IPC shared memory segment */
-    /* find shared memory ID */
-    if ((fd = shm_open(shm_name, O_RDWR|O_EXCL, 0)) < 0) {
-       debug("Cannot open %s\n", shm_name);
-       return NULL;
-    }
-    /* take the pointer to it */
-    shm_ptr = mmap(NULL, shm_size, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
-    if (shm_ptr == MAP_FAILED) {
-       return NULL;
-    }
-    return shm_ptr;
-}
-/*
- * Function RemoveShm:
- * Remove a POSIX shared memory segment 
- * Input:  the object name
- * Return: 0 on success, -1 on error
- */
-int RemoveShm(char * shm_name)
-{
-    return shm_unlink(shm_name);
-}
diff --git a/sources/SigHand.c b/sources/SigHand.c
deleted file mode 100644 (file)
index 6b2cf95..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* SigHand.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*****************************************************************************
- *
- * File SigHand.c: define a set of functions for signal manipulation 
- *
- * Author: S. Piccardi Dec. 2002
- *
- * $Id: SigHand.c,v 1.3 2002/12/11 00:51:38 piccardi Exp $
- *
- *****************************************************************************/
-#include <errno.h>                               /* error simbol definitions */
-#include <stdio.h>                                 /* standard I/O functions */
-#include <signal.h>                          /* signal handling declarations */
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "Gapil.h"
-#include "macros.h"
-
-/*
- * Function Signal
- * Initialize a signal handler.
- * To enable the signal handling a process we need to tell it to
- * kernel; this is done writing all needed info to a sigaction structure
- * named sigact, and then callind sigaction() system call passing the
- * information stored in the sigact structure variable.
- *
- * Input:  the signal to handle 
- *         the signal handler function
- * Return: the previous sigaction structure
- */
-inline SigFunc * Signal(int signo, SigFunc *func) 
-{
-    struct sigaction new_handl, old_handl;
-    new_handl.sa_handler = func;                      /* set signal handler */
-    /* clear signal mask: no signal blocked during execution of func */
-    if (sigemptyset(&new_handl.sa_mask)!=0){       /* initialize signal set */
-        return SIG_ERR;
-    }
-    new_handl.sa_flags=0;                            /* init to 0 all flags */
-    /* change action for signo signal */
-    if (sigaction(signo,&new_handl,&old_handl)){ 
-        return SIG_ERR;
-    }
-    return (old_handl.sa_handler);
-}
-/* 
- * Functions: HandSigCHLD
- * Generic handler for SIGCHLD signal
- * 
- * Simone Piccardi Dec. 2002
- * $Id: SigHand.c,v 1.3 2002/12/11 00:51:38 piccardi Exp $
- */
-void HandSigCHLD(int sig)
-{
-    int errno_save;
-    int status;
-    pid_t pid;
-    /* save errno current value */
-    errno_save = errno;
-    /* loop until no */
-    do {
-       errno = 0;
-       pid = waitpid(WAIT_ANY, &status, WNOHANG);
-       if (pid > 0) {
-           debug("child %d terminated with status %x\n", pid, status);
-       }
-    } while ((pid > 0) && (errno == EINTR));
-    /* restore errno value*/
-    errno = errno_save;
-    /* return */
-    return;
-}
diff --git a/sources/SimpleEchoTCPClient.c b/sources/SimpleEchoTCPClient.c
deleted file mode 100644 (file)
index 70855ad..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/* SimpleEchoTCPClient.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program echo: 
- * Simple TCP client for echo service (port 7)
- *
- * Author: Simone Piccardi
- * Jun. 2001
- *
- * Usage: echo -h give all info's
- *
- * $Id: SimpleEchoTCPClient.c,v 1.6 2003/02/02 20:35:33 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <unistd.h>      /* include unix standard library */
-#include <arpa/inet.h>   /* IP addresses conversion utiliites */
-#include <sys/socket.h>  /* socket library */
-#include <stdio.h>      /* include standard I/O library */
-
-#define MAXLINE 256
-void usage(void);
-void EchoClient(FILE * filein, int socket);
-
-/* Program begin */
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int sock_fd, i;
-    struct sockaddr_in serv_add;
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           printf("Wrong -h option use\n");
-           usage();
-           return(0);
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* create socket */
-    if ( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
-       perror("Socket creation error");
-       return -1;
-    }
-    /* initialize address */
-    memset((void *) &serv_add, 0, sizeof(serv_add)); /* clear server address */
-    serv_add.sin_family = AF_INET;                   /* address type is INET */
-    serv_add.sin_port = htons(7);                    /* echo port is 7 */
-    /* build address using inet_pton */
-    if ( (inet_pton(AF_INET, argv[optind], &serv_add.sin_addr)) <= 0) {
-       perror("Address creation error");
-       return -1;
-    }
-    /* extablish connection */
-    if (connect(sock_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
-       perror("Connection error");
-       return -1;
-    }
-    /* read daytime from server */
-    EchoClient(stdin, sock_fd);
-    /* normal exit */
-    return 0;
-}
-/*
- * routine to print usage info and exit 
- */
-void usage(void) {
-    printf("Take daytime from a remote host \n");
-    printf("Usage:\n");
-    printf("  daytime [-h] [-v] [host in dotted decimal form] \n");
-    printf("  -v          set verbosity on\n");
-    printf("  -h          print this help\n");
-    exit(1);
-}
-
-void EchoClient(FILE * filein, int socket) 
-{
-    char sendbuff[MAXLINE], recvbuff[MAXLINE];
-    int nread; 
-    while (fgets(sendbuff, MAXLINE, filein) != NULL) {
-       FullWrite(socket, sendbuff, strlen(sendbuff)); 
-       nread = FullRead(socket, recvbuff, strlen(sendbuff));
-       recvbuff[nread] = 0;
-       fputs(recvbuff, stdout);
-    }
-    return;
-}
diff --git a/sources/SimpleEchoTCPServer.c b/sources/SimpleEchoTCPServer.c
deleted file mode 100644 (file)
index 890954d..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/* SimpleEchoTCPServer.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program echod: 
- * Elementary TCP server for echo service (port 7)
- *
- * Author: Simone Piccardi
- * Jun. 2001
- *
- * Usage: echod
- *
- * $Id: SimpleEchoTCPServer.c,v 1.6 2003/02/02 20:35:34 piccardi Exp $ 
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <unistd.h>      /* include unix standard library */
-#include <arpa/inet.h>   /* IP addresses conversion utiliites */
-#include <sys/socket.h>  /* socket library */
-#include <stdio.h>      /* include standard I/O library */
-#include <time.h>
-
-#define BACKLOG 10
-#define MAXLINE 256
-
-/* Subroutines declaration */
-void usage(void);
-void SockEcho(int sockfd);
-/* Program beginning */
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int list_fd, conn_fd;
-    pid_t pid;
-    struct sockaddr_in serv_add;
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    int i;
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           printf("Wrong -h option use\n");
-           usage();
-           return(0);
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* create socket */
-    if ( (list_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
-       perror("Socket creation error");
-       exit(-1);
-    }
-    /* initialize address */
-    memset((void *)&serv_add, 0, sizeof(serv_add)); /* clear server address */
-    serv_add.sin_family = AF_INET;                  /* address type is INET */
-    serv_add.sin_port = htons(7);                   /* echo port is 7 */
-    serv_add.sin_addr.s_addr = htonl(INADDR_ANY);   /* connect from anywhere */
-    /* bind socket */
-    if (bind(list_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
-       perror("bind error");
-       exit(-1);
-    }
-    /* listen on socket */
-    if (listen(list_fd, BACKLOG) < 0 ) {
-       perror("listen error");
-       exit(-1);
-    }
-    /* handle echo to client */
-    while (1) {
-       /* accept connection */
-       if ( (conn_fd = accept(list_fd, NULL, NULL)) < 0) {
-           perror("accept error");
-           exit(-1);
-       }
-       /* fork to handle connection */
-       if ( (pid = fork()) < 0 ){
-           perror("fork error");
-           exit(-1);
-       }
-       if (pid == 0) {      /* child */
-           close(list_fd);          /* close listening socket */   
-           SockEcho(conn_fd);       /* handle echo */
-           exit(0);
-       } else {             /* parent */
-           close(conn_fd);          /* close connected socket */
-       }
-    }
-    /* normal exit, never reached */
-    exit(0);
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Simple daytime server\n");
-    printf("Usage:\n");
-    printf("  daytimed [-h] \n");
-    printf("  -h          print this help\n");
-    exit(1);
-}
-/*
- * routine to handle echo for connection
- */
-void SockEcho(int sockfd) {
-    char buffer[MAXLINE];
-    int nread, nwrite;
-    
-    /* main loop, reading 0 char means client close connection */
-    while ( (nread = read(sockfd, buffer, MAXLINE)) != 0) {
-       printf("Letti %d bytes, %s ", nread, buffer);
-       nwrite = FullWrite(sockfd, buffer, nread);
-    }
-    return;
-}
diff --git a/sources/Sleep.c b/sources/Sleep.c
deleted file mode 100644 (file)
index ce5e416..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Sleep.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program Sleep.c: 
- * Example implementation for sleep
- *
- * Author: Simone Piccardi
- * Apr. 2002
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <unistd.h>      /* unix standard library */
-#include <signal.h>      /* POSIX signal library */
-
-void alarm_hand(int);
-
-unsigned int sleep(unsigned int seconds)
-{
-/* 
- * Variables definition  
- */
-    struct sigaction new_action, old_action;
-    sigset_t old_mask, stop_mask, sleep_mask;
-    /* set the signal handler */
-    sigemptyset(&new_action.sa_mask);              /* no signal blocked */
-    new_action.sa_handler = alarm_hand;            /* set handler */
-    new_action.sa_flags = 0;                       /* no flags */
-    sigaction(SIGALRM, &new_action, &old_action);  /* install action */
-    /* block SIGALRM to avoid race conditions */
-    sigemptyset(&stop_mask);                       /* init mask to empty */
-    sigaddset(&stop_mask, SIGALRM);                /* add SIGALRM */
-    sigprocmask(SIG_BLOCK, &stop_mask, &old_mask); /* add SIGALRM to blocked */
-    /* send the alarm */
-    alarm(seconds); 
-    /* going to sleep enabling SIGALRM */
-    sleep_mask = old_mask;                         /* take mask */
-    sigdelset(&sleep_mask, SIGALRM);               /* remove SIGALRM */
-    sigsuspend(&sleep_mask);                       /* go to sleep */
-    /* restore previous settings */
-    sigprocmask(SIG_SETMASK, &old_mask, NULL);     /* reset signal mask */    
-    sigaction(SIGALRM, &old_action, NULL);         /* reset signal action */
-    /* return remaining time */
-    return alarm(0);
-}
-/*
- * Signal Handler for SIGALRM
- */
-void alarm_hand(int sig) {
-    /* just return to interrupt sigsuspend */
-    return;
-}
diff --git a/sources/TCP_cunc_daytimed.c b/sources/TCP_cunc_daytimed.c
deleted file mode 100644 (file)
index 5be9d23..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/* TCP_cunc_daytimed.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program TCP_cunc_daytimed.c
- * Elementary TCP cuncurrent server for daytime service (port 13)
- *
- * Author: Simone Piccardi
- * May. 2001
- *
- * Usage: daytimed -h give all info
- *
- * $Id: TCP_cunc_daytimed.c,v 1.1 2003/04/29 15:33:39 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <unistd.h>      /* include unix standard library */
-#include <arpa/inet.h>   /* IP addresses conversion utiliites */
-#include <sys/socket.h>  /* socket library */
-#include <stdio.h>      /* include standard I/O library */
-#include <time.h>
-
-#define MAXLINE 80
-#define BACKLOG 10
-/* Program begin */
-void usage(void);
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int list_fd, conn_fd;
-    int i;
-    struct sockaddr_in serv_add, client;
-    char buffer[MAXLINE];
-    socklen_t len;
-    time_t timeval;
-    pid_t pid;
-    int logging=0;
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hv")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           printf("Wrong -h option use\n");
-           usage();
-           return(0);
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-           return(0);
-           break;
-       case 'v':
-           logging = 1;
-           break;
-       default:    /* should not reached */
-           usage();
-           return(0);
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* create socket */
-    if ( (list_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
-       perror("Socket creation error");
-       exit(-1);
-    }
-    /* initialize address */
-    memset((void *)&serv_add, 0, sizeof(serv_add)); /* clear server address */
-    serv_add.sin_family = AF_INET;                  /* address type is INET */
-    serv_add.sin_port = htons(13);                  /* daytime port is 13 */
-    serv_add.sin_addr.s_addr = htonl(INADDR_ANY);   /* connect from anywhere */
-    /* bind socket */
-    if (bind(list_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
-       perror("bind error");
-       exit(-1);
-    }
-    /* listen on socket */
-    if (listen(list_fd, BACKLOG) < 0 ) {
-       perror("listen error");
-       exit(-1);
-    }
-    /* write daytime to client */
-    while (1) {
-       if ( (conn_fd = accept(list_fd, (struct sockaddr *)&client, &len)) 
-            <0 ) {
-           perror("accept error");
-           exit(-1);
-       }
-       /* fork to handle connection */
-       if ( (pid = fork()) < 0 ){
-           perror("fork error");
-           exit(-1);
-       }
-       if (pid == 0) {                 /* child */
-           close(list_fd);
-           timeval = time(NULL);
-           snprintf(buffer, sizeof(buffer), "%.24s\r\n", ctime(&timeval));
-           if ( (write(conn_fd, buffer, strlen(buffer))) < 0 ) {
-               perror("write error");
-               exit(-1);
-           }
-           if (logging) {
-               inet_ntop(AF_INET, &client.sin_addr, buffer, sizeof(buffer));
-               printf("Request from host %s, port %d\n", buffer,
-                      ntohs(client.sin_port));
-           }
-           close(conn_fd);
-           exit(0);
-       } else {                        /* parent */
-           close(conn_fd);
-       }
-    }
-    /* normal exit, never reached */
-    exit(0);
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Simple daytime server\n");
-    printf("Usage:\n");
-    printf("  daytimed [-hv] \n");
-    printf("  -h          print this help\n");
-    printf("  -v          print request source on stdout\n");
-    exit(1);
-}
-
diff --git a/sources/TCP_daytime.c b/sources/TCP_daytime.c
deleted file mode 100644 (file)
index 4ed7e4f..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/* TCP_daytime.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program daytime: 
- * Elementary TCP client for daytime service (port 13)
- *
- * Author: Simone Piccardi
- * Apr. 2001
- *
- * Usage: daytime -h give all info's
- *
- * $Id: TCP_daytime.c,v 1.2 2003/04/29 15:33:39 piccardi Exp $ 
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <unistd.h>      /* include unix standard library */
-#include <arpa/inet.h>   /* IP addresses conversion utiliites */
-#include <sys/socket.h>  /* socket library */
-#include <stdio.h>      /* include standard I/O library */
-
-#define MAXLINE 80
-/* Program begin */
-void usage(void);
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int sock_fd;
-    int i, nread;
-    struct sockaddr_in serv_add;
-    char buffer[MAXLINE];
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           printf("Wrong -h option use\n");
-           usage();
-           return(0);
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* create socket */
-    if ( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
-       perror("Socket creation error");
-       return -1;
-    }
-    /* initialize address */
-    memset((void *) &serv_add, 0, sizeof(serv_add)); /* clear server address */
-    serv_add.sin_family = AF_INET;                   /* address type is INET */
-    serv_add.sin_port = htons(13);                   /* daytime port is 13 */
-    /* build address using inet_pton */
-    if ( (inet_pton(AF_INET, argv[optind], &serv_add.sin_addr)) <= 0) {
-       perror("Address creation error");
-       return -1;
-    }
-    /* extablish connection */
-    if (connect(sock_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
-       perror("Connection error");
-       return -1;
-    }
-    /* read daytime from server */
-    while ( (nread = read(sock_fd, buffer, MAXLINE)) > 0) {
-       buffer[nread]=0;
-       if (fputs(buffer, stdout) == EOF) {          /* write daytime */
-           perror("fputs error");
-           return -1;
-       }
-    }
-    /* error on read */
-    if (nread < 0) {
-       perror("Read error");
-       return -1;
-    }
-    /* normal exit */
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Take daytime from a remote host \n");
-    printf("Usage:\n");
-    printf("  daytime [-h] [-v] [host in dotted decimal form] \n");
-    printf("  -v          set verbosity on\n");
-    printf("  -h          print this help\n");
-    exit(1);
-}
diff --git a/sources/TCP_echod.c b/sources/TCP_echod.c
new file mode 100644 (file)
index 0000000..606f852
--- /dev/null
@@ -0,0 +1,204 @@
+/* ElemEchoTCPServer.c
+ * 
+ * Copyright (C) 2001 Simone Piccardi
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/****************************************************************
+ *
+ * Program echod 
+ * Elementary TCP server for echo service (port 7)
+ *
+ * Author: Simone Piccardi
+ * Jun. 2001
+ *
+ * Usage: echod -h give all info
+ *
+ * $Id: TCP_echod.c,v 1.1 2003/05/02 09:50:55 piccardi Exp $ 
+ *
+ ****************************************************************/
+/* 
+ * Include needed headers
+ */
+#include <sys/types.h>   /* predefined types */
+#include <unistd.h>      /* include unix standard library */
+#include <arpa/inet.h>   /* IP addresses conversion utiliites */
+#include <sys/socket.h>  /* socket library */
+#include <stdio.h>      /* include standard I/O library */
+#include <time.h>
+#include <syslog.h>      /* syslog system functions */
+#include <signal.h>      /* signal functions */
+#include "Gapil.h"
+
+#define BACKLOG 10
+#define MAXLINE 256
+int demonize  = 1;  /* daemon use option */
+int debugging = 0;  /* debug info printing option */
+/* Subroutines declaration */
+void usage(void);
+void ServEcho(int sockfd);
+void PrintErr(char * error);
+/* Program beginning */
+int main(int argc, char *argv[])
+{
+/* 
+ * Variables definition  
+ */
+    int list_fd, conn_fd;
+    pid_t pid;
+    struct sockaddr_in serv_add;
+    /*
+     * Input section: decode parameters passed in the calling 
+     * Use getopt function
+     */
+    int i;
+    opterr = 0;         /* don't want writing to stderr */
+    while ( (i = getopt(argc, argv, "hdi")) != -1) {
+       switch (i) {
+       /* 
+        * Handling options 
+        */ 
+       case 'h':  
+           printf("Wrong -h option use\n");
+           usage();
+           return(0);
+           break;
+       case 'i':
+           demonize = 0;
+           break;
+       case 'd':
+           debugging = 1;
+           break;
+       case '?':   /* unrecognized options */
+           printf("Unrecognized options -%c\n",optopt);
+           usage();
+       default:    /* should not reached */
+           usage();
+       }
+    }
+    /* ***********************************************************
+     * 
+     *          Options processing completed
+     *
+     *               Main code beginning
+     * 
+     * ***********************************************************/
+    /* install SIGCHLD handler */
+    Signal(SIGCHLD, HandSigCHLD);  /* establish handler */
+    /* create socket */
+    if ( (list_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+       perror("Socket creation error");
+       exit(1);
+    }
+    /* initialize address */
+    memset((void *)&serv_add, 0, sizeof(serv_add)); /* clear server address */
+    serv_add.sin_family = AF_INET;                  /* address type is INET */
+    serv_add.sin_port = htons(7);                   /* echo port is 7 */
+    serv_add.sin_addr.s_addr = htonl(INADDR_ANY);   /* connect from anywhere */
+    /* bind socket */
+    if (bind(list_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
+       perror("bind error");
+       exit(1);
+    }
+    /* release privileges and go daemon */
+    if (setgid(65534) !=0) { /* first give away group privileges */
+       perror("cannot give away group privileges");
+       exit(1);
+    }
+    if (setuid(65534) !=0) { /* and only after user ... */
+       perror("cannot give away user privileges");
+       exit(1);
+    }
+    if (demonize) {          /* go daemon */
+        openlog(argv[0], 0, LOG_DAEMON); /* open logging */
+       if (daemon(0, 0) != 0) {
+           perror("cannot start as daemon");
+           exit(1);
+       }
+    }
+    /* main body */
+    if (listen(list_fd, BACKLOG) < 0 ) {
+       PrintErr("listen error");
+       exit(1);
+    }
+    /* handle echo to client */
+    while (1) {
+       /* accept connection */
+       if ( (conn_fd = accept(list_fd, NULL, NULL)) < 0) {
+           PrintErr("accept error");
+           exit(1);
+       }
+       /* fork to handle connection */
+       if ( (pid = fork()) < 0 ){
+           PrintErr("fork error");
+           exit(1);
+       }
+       if (pid == 0) {      /* child */
+           close(list_fd);          /* close listening socket */   
+           ServEcho(conn_fd);       /* handle echo */
+           exit(0);
+       } else {             /* parent */
+           close(conn_fd);          /* close connected socket */
+       }
+    }
+    /* normal exit, never reached */
+    exit(0);
+}
+/*
+ * routine to print usage info and exit
+ */
+void usage(void) {
+    printf("Elementary echo server\n");
+    printf("Usage:\n");
+    printf("  echod [-h] \n");
+    printf("  -h          print this help\n");
+    printf("  -d          print debug info\n");
+    printf("  -i          use interactively\n");
+    exit(1);
+}
+/*
+ * routine to handle echo for connection
+ */
+void ServEcho(int sockfd) {
+    char buffer[MAXLINE];
+    int nread, nwrite;
+    char debug[MAXLINE+20];
+    int size;
+    /* main loop, reading 0 char means client close connection */
+    while ( (nread = read(sockfd, buffer, MAXLINE)) != 0) {
+       nwrite = FullWrite(sockfd, buffer, nread);
+       if (debugging) {
+           buffer[nread] = 0;
+           snprintf(debug, MAXLINE+20, "Letti %d byte, %s", nread, buffer);
+           if (demonize) {          /* go daemon */
+               syslog(LOG_DEBUG, debug);
+           } else {
+               printf("%s", debug);
+           }
+       }
+    }
+    return;
+}
+/*
+ * routine to print error on stout or syslog
+ */
+void PrintErr(char * error) {
+    if (demonize) {          /* go daemon */
+       syslog(LOG_ERR, error);
+    } else {
+       perror(error);
+    }
+    return;
+}
diff --git a/sources/TCP_iter_daytimed.c b/sources/TCP_iter_daytimed.c
deleted file mode 100644 (file)
index e50e763..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/* TCP_iter_daytimed.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program daytimed: 
- * Elementary TCP server for daytime service (port 13)
- *
- * Author: Simone Piccardi
- * Apr. 2001
- *
- * Usage: daytimed -h give all info
- *
- * $Id: TCP_iter_daytimed.c,v 1.1 2003/04/29 15:33:39 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <sys/types.h>   /* predefined types */
-#include <unistd.h>      /* include unix standard library */
-#include <arpa/inet.h>   /* IP addresses conversion utiliites */
-#include <sys/socket.h>  /* socket library */
-#include <stdio.h>      /* include standard I/O library */
-#include <time.h>
-
-#define MAXLINE 80
-#define BACKLOG 10
-/* Program begin */
-void usage(void);
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int list_fd, conn_fd;
-    int i;
-    struct sockaddr_in serv_add;
-    char buffer[MAXLINE];
-    time_t timeval;
-    /*
-     * Input section: decode parameters passed in the calling 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':  
-           printf("Wrong -h option use\n");
-           usage();
-           return(0);
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* create socket */
-    if ( (list_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
-       perror("Socket creation error");
-       exit(-1);
-    }
-    /* initialize address */
-    memset((void *)&serv_add, 0, sizeof(serv_add)); /* clear server address */
-    serv_add.sin_family = AF_INET;                  /* address type is INET */
-    serv_add.sin_port = htons(13);                  /* daytime port is 13 */
-    serv_add.sin_addr.s_addr = htonl(INADDR_ANY);   /* connect from anywhere */
-    /* bind socket */
-    if (bind(list_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
-       perror("bind error");
-       exit(-1);
-    }
-    /* listen on socket */
-    if (listen(list_fd, BACKLOG) < 0 ) {
-       perror("listen error");
-       exit(-1);
-    }
-    /* write daytime to client */
-    while (1) {
-       if ( (conn_fd = accept(list_fd, (struct sockaddr *) NULL, NULL)) <0 ) {
-           perror("accept error");
-           exit(-1);
-       }
-       timeval = time(NULL);
-       snprintf(buffer, sizeof(buffer), "%.24s\r\n", ctime(&timeval));
-       if ( (write(conn_fd, buffer, strlen(buffer))) < 0 ) {
-           perror("write error");
-           exit(-1);
-       }
-       close(conn_fd);
-    }
-
-    /* normal exit */
-    exit(0);
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Simple daytime server\n");
-    printf("Usage:\n");
-    printf("  daytimed [-h] \n");
-    printf("  -h          print this help\n");
-    exit(1);
-}
diff --git a/sources/TestRen.c b/sources/TestRen.c
deleted file mode 100644 (file)
index 805bfda..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/* TestRen.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program TestRen.c: 
- * Program to test function rename
- *
- * Author: Simone Piccardi
- * Oct. 2001
- *
- * Usage: testrem -h give all info's
- *
- * $Id: TestRen.c,v 1.2 2002/05/19 13:25:04 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#include <errno.h>       /* error definitions and routines */ 
-#include <stdlib.h>      /* C standard library */
-#include <unistd.h>      /* unix standard library */
-#include <stdio.h>      /* standard I/O library */
-#include <string.h>      /* string functions */
-
-/* Help printing routine */
-void usage(void);
-
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int i;
-    char *buf,*copy;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    buf = malloc(100);
-
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':   /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* There must be 2 remaing parameters */
-    if ( (argc-optind) != 2 )  {
-       printf("From %d arguments, removed %d options\n", argc, optind);
-       usage();
-    }
-    if ( rename(argv[optind], argv[optind+1]) ) {
-       copy = strerror_r(errno, NULL, 0);
-       perror("cannot rename");
-       exit(1);
-    }
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program testren : test renaming of file/directories  \n");
-    printf("Usage:\n");
-    printf("  testrem [-h] fileorig filedest \n");
-    printf("  -h          print this help\n");
-    
-    exit(1);
-}
-
diff --git a/sources/WriteShm.c b/sources/WriteShm.c
deleted file mode 100644 (file)
index 455f5cc..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/* WriteShm.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*****************************************************************************
- *
- * File WriteShm.c: 
- *
- * An example of POSIX shared memory use: wwrite some content to a
- * shared memory segment
- *
- * Author: S. Piccardi Jan. 2003
- *
- * $Id: WriteShm.c,v 1.1 2003/02/03 18:07:38 piccardi Exp $
- *
- *****************************************************************************/
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>        /* directory */
-#include <stdlib.h>        /* C standard library */
-#include <unistd.h>
-#include <stdio.h>
-
-#include "Gapil.h"
-#include "macros.h"
-
-/* Help printing routine */
-void usage(void);
-
-int main(int argc, char *argv[]) 
-{
-    int i;
-    int size = 4096;
-    char * file_name = NULL;
-    int fd = 0;
-    int mutex;
-    char * mutex_file;
-    void * shm_ptr;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hs:f:")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 's':                                     /* set pause (in sec.) */
-           size = strtol(optarg, NULL, 10);
-           break;
-       case 'f':                                     /* set pause (in sec.) */
-           file_name = optarg;
-           break;
-       case 'h':                                             /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case '?':                                    /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:                                       /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    if ((argc - optind) != 1) {          /* There must be remaing parameters */
-       printf("Wrong number of arguments %d\n", argc - optind);
-        usage();
-    }
-    mutex_file = tempnam("/tmp","mutex");
-    if ((mutex = CreateMutex(mutex_file)) == -1) {            /* get a Mutex */
-       perror("Cannot create mutex");
-       goto errmutex;
-    }
-    /* main loop */
-    shm_ptr = CreateShm(argv[1], size, 0644, 0);
-    if (shm_ptr == NULL) {
-       perror("Error creating shared memory");
-       goto errshared;
-    }
-    if (file_name) {
-       fd = open(file_name, O_RDONLY);
-    }
-    FullRead(fd, shm_ptr, size);
-//    RemoveShm(argv[1]);
-    RemoveMutex(mutex_file);
-    exit(0);
- errshared:
-    RemoveShm(argv[1]);
-    RemoveMutex(mutex_file);
- errmutex:
-    exit(1);
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program myls: list file in a directory \n");
-    printf("Usage:\n");
-    printf("  WriteShm [-h] [-s size] [-f file] name \n");
-    printf("  -h          print this help\n");
-    printf("  -s size     size of segment \n");
-    printf("  -f file     filename to read contents \n");
-    exit(1);
-}
diff --git a/sources/gethost.c b/sources/gethost.c
deleted file mode 100644 (file)
index 3912dd4..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/* gethost.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program gethost.c: 
- * Program to test gethostbyname and getaddrinfo
- *
- * Author: Simone Piccardi
- * Aug. 2002
- *
- * Usage: gethost -h give all info's
- *
- * $Id: gethost.c,v 1.1 2002/08/27 16:05:04 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#define _GNU_SOURCE
-#include <errno.h>       /* error definitions and routines */ 
-#include <stdlib.h>      /* C standard library */
-#include <unistd.h>      /* unix standard library */
-#include <stdio.h>      /* standard I/O library */
-#include <string.h>      /* string functions */
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-
-/* Help printing routine */
-void usage(void);
-
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int i;
-    int use = 0;
-    struct hostent *host;
-    struct in_addr addr;
-    struct addrinfo hint;
-    struct addrinfo *address;
-    struct sockaddr_in *socket;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "han")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':   /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case 'a':   /* help option */
-           use = 1;
-           break;
-       case 'n':   /* help option */
-           use = 0;
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    if ((argc-optind)!= 1)  {
-        printf("From %d arguments, removed %d options\n", argc, optind);
-        usage();
-    }
-    if (use == 0) {
-       host = gethostbyname(argv[optind]);
-       printf("gethostbyname %s\n", argv[optind]);
-       printf("Official host name %s\n", host->h_name);
-       printf("Address Type %d\n", host->h_addrtype);
-       printf("Address Lenght %d\n", host->h_length);
-       addr.s_addr = *( (unsigned long *)host->h_addr);
-       printf("Address  %s\n", inet_ntoa(addr));
-    } else {
-/*     host = getipnodebyname(argv[optind], AF_INET, 0, &i); */
-/*     if (!host) printf("Error\n"); */
-/*     printf("getipnodebyname %s, error %d\n", argv[optind], i); */
-/*     printf("Official host name %s\n", host->h_name); */
-/*     printf("Address Type %d\n", host->h_addrtype); */
-/*     printf("Address Lenght %d\n", host->h_length); */
-/*     addr.s_addr = *( (unsigned long *)host->h_addr); */
-/*     printf("Address  %s\n", inet_ntoa(addr)); */
-       hint.ai_flags = 0;
-       hint.ai_family = PF_INET;
-       hint.ai_socktype = 0;
-       hint.ai_protocol = 0;
-       hint.ai_addrlen = 0;
-       hint.ai_addr = NULL;
-       hint.ai_canonname = NULL;
-       hint.ai_next = NULL;
-       if (i = getaddrinfo(argv[optind], "telnet", &hint, &address)) {
-           printf("getaddrinfo %s = %s \n", argv[optind], gai_strerror(i));
-       } else {
-           printf("Address flag %d\n", address->ai_flags);
-           printf("Address family %d\n", address->ai_family);
-           printf("Address socket type %d\n", address->ai_socktype);
-           printf("Address protocol %d\n", address->ai_protocol);
-           printf("Address lenght %d\n", address->ai_addrlen);
-           printf("Canonical name %s\n", address->ai_canonname);
-           socket = (struct sockaddr_in *) address->ai_addr;
-           printf("Address %s\n", inet_ntoa(socket->sin_addr));
-           printf("Port %d\n", htons(socket->sin_port));
-           printf("Family %d\n", socket->sin_family);
-           
-       }
-    }
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program gehost: test host name functions  \n");
-    printf("Usage:\n");
-    printf("  gethost [-h] address \n");
-    printf("  -h          print this help\n");
-    printf("  -a          use getaddrinfo\n");
-    printf("  -n          use gethostbyname\n");
-    
-    exit(1);
-}
-
diff --git a/sources/getparam.c b/sources/getparam.c
deleted file mode 100644 (file)
index 54212e3..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/* getparam.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program getparam.c: 
- * Program to test function fopen
- *
- * Author: Simone Piccardi
- * Jan. 2002
- *
- * Usage: getparam -h give all info's
- *
- * $Id: getparam.c,v 1.1 2002/01/03 23:44:14 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#define _GNU_SOURCE
-#include <errno.h>       /* error definitions and routines */ 
-#include <stdlib.h>      /* C standard library */
-#include <unistd.h>      /* unix standard library */
-#include <string.h>      /* string functions */
-#include <limits.h>
-#include <stdio.h>
-
-
-#include <time.h>        /* for CLK_TCK e CLOCKS_PER_SEC */
-
-/* Table of constants for sysconf() */
-char *sc_names[]={"_SC_ARG_MAX",
-                 "_SC_CHILD_MAX",
-                 "_SC_OPEN_MAX",
-                 "_SC_STREAM_MAX",
-                 "_SC_TZNAME_MAX",
-                 "_SC_NGROUPS_MAX",
-                 "_SC_SSIZE_MAX",
-                 "_SC_CLK_TCK",
-                 "_SC_JOB_CONTROL",
-                 "_SC_SAVED_IDS",
-                 "_SC_VERSION"};
-
-int sc_argument[]={_SC_ARG_MAX,
-                  _SC_CHILD_MAX,
-                  _SC_OPEN_MAX,
-                  _SC_STREAM_MAX,
-                  _SC_TZNAME_MAX,
-                  _SC_NGROUPS_MAX,
-                  _SC_SSIZE_MAX,
-                  _SC_CLK_TCK,
-                  _SC_JOB_CONTROL,
-                  _SC_SAVED_IDS,
-                  _SC_VERSION};
-
-/* 
-   Set the defined[] array to true if the macro is defined else set it
-   to false and define the macro to -1 as a marker
-*/
-int defined[]={
-#ifdef  ARG_MAX
-    1,
-#else
-#define ARG_MAX               -1  
-    0,
-#endif
-#ifdef  CHILD_MAX
-    1,
-#else
-#define CHILD_MAX             -1
-    0,
-#endif
-#ifdef  OPEN_MAX
-    1,
-#else
-#define OPEN_MAX              -1 
-    0,
-#endif
-#ifdef  STREAM_MAX
-    1,
-#else
-#define STREAM_MAX            -1
-    0,
-#endif
-#ifdef  NGROUPS_MAX
-    1,
-#else
-#define NGROUPS_MAX           -1
-    0,
-#endif
-#ifdef  TZNAME_MAX
-    1,
-#else
-#define TZNAME_MAX            -1
-    0,
-#endif
-#ifdef  SSIZE_MAX
-    1
-#else
-#define SSIZE_MAX             -1
-    0
-};
-
-
-
-/* values of stadard macros */
-long values[]={ARG_MAX, 
-              CHILD_MAX,
-              OPEN_MAX,
-              STREAM_MAX,
-              TZNAME_MAX,
-              NGROUPS_MAX,
-              SSIZE_MAX,
-              CLOCKS_PER_SEC,
-              _POSIX_JOB_CONTROL,
-              _POSIX_SAVED_IDS,
-              _POSIX_VERSION};
-
-/* Help printing routine */
-void usage(void);
-
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int i;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':   /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* There must be 2 remaing parameters */
-    if ( (argc-optind) != 1 )  {
-       printf("From %d arguments, removed %d options\n", argc, optind);
-       usage();
-    }
-    for (i=0; i<=4; i++) {
-       printf("Response for %s is %ld, values is %ld\n", names[i], 
-              sysconf(argument[i]), values[i]);
-    }
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program testfopen : test fopen for a file  \n");
-    printf("Usage:\n");
-    printf("  testfopen [-h] file mode \n");
-    printf("  -h          print this help\n");
-    
-    exit(1);
-}
-
diff --git a/sources/macros.h b/sources/macros.h
deleted file mode 100644 (file)
index 9784c7a..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* macros.h
- * 
- * Copyright (C) 2000-2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*
- * Endianess conversion for int and short types
- */
-#define BE32_TO_LE32(val) ({typeof (val) v= (val);  \
-        (v>>24) | ((v>>8)&0xFF00) | (v<<24) | ((v<<8)&0xFF0000); } )
-#define BE16_TO_LE16(val) ({typeof (val) v= (val);  (v>>8) | (v<<8); } )
-/* 
- * Define a protected, right typed, no side effects macro for min
- */
-#define min(x, y) ({typeof (x) x_ = (x); typeof (y) y_ = (y); \
-                  x_ < y_ ? x_ : y_;}) 
-/* 
- * debugging print definition
- */
-#ifdef IS_DAEMON
-#define report(fmt, args...) UserNotify(fmt,##args)
-#else
-#define report(fmt, args...) printf(fmt,##args)
-#endif /* IS_DAEMON */
-
-#ifdef DEBUG                     /* done only on debugging */
-#define debug  report
-#else
-#define debug(fmt, arg...)
-#endif /* DEBUG */
-
-
-/*
- * Just to print an hex dump of a buffer,
- * ptr is the address, m is how many word per line
- * and l how many lines
- */
-#define PRINT_BUF(ptr, l, m) ({ \
-    int _i, _j; \
-    unsigned short *_ptr= (unsigned short *)(ptr); \
-    for (_i = 0; _i< (int) l; _i++) { \
-       printf("Val[%d]=", m * _i); \
-       for (_j = 0; _j < (int) m; _j++) { \
-           printf("%x ", *_ptr);\
-           _ptr++;\
-       }\
-       printf("\n"); \
-    }\
-})
diff --git a/sources/myls.c b/sources/myls.c
deleted file mode 100644 (file)
index bc2e1a9..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/* myls.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*****************************************************************************
- *
- * File myls.c: An example ls
- *
- * Author: S. Piccardi Jan. 2003
- *
- * $Id: myls.c,v 1.2 2003/01/04 17:24:30 piccardi Exp $
- *
- *****************************************************************************/
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>        /* directory */
-#include <stdlib.h>        /* C standard library */
-#include <unistd.h>
-
-#include "Gapil.h"
-/*
- * Program myls
- *
- * List files and their size inside a given directory
- */
-/* Help printing routine */
-void usage(void);
-/* computation function for DirScan */
-int do_ls(struct dirent * direntry);
-
-int main(int argc, char *argv[]) 
-{
-    int i;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "hs:l:wrbf")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':                                            /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case '?':                                    /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:                                       /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    if ((argc - optind) != 1) {          /* There must be remaing parameters */
-       printf("Wrong number of arguments %d\n", argc - optind);
-        usage();
-    }
-    DirScan(argv[1], do_ls);
-    exit(0);
-}
-/*
- * Routine to print file name and size inside DirScan
- */
-int do_ls(struct dirent * direntry) 
-{
-    struct stat data;
-    stat(direntry->d_name, &data);                          /* get stat data */
-    printf("File: %s \t size: %d\n", direntry->d_name, data.st_size);
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program myls: list file in a directory \n");
-    printf("Usage:\n");
-    printf("  myls [-h] dirname \n");
-    printf("  -h          print this help\n");
-    exit(1);
-}
diff --git a/sources/sleep1.c b/sources/sleep1.c
deleted file mode 100644 (file)
index 2225c96..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/* sleep1.c
- * 
- * Copyright (C) 2002 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program sleep1.c: 
- * Example of a broken implementation for sleep
- *
- * Author: Simone Piccardi
- * Mar. 2002
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#define _GNU_SOURCE
-#include <unistd.h>      /* unix standard library */
-#include <signal.h>      /* signal standard library */
-
-void alarm_hand(int sig) {
-    /* check if the signal is the right one */
-    if (sig != SIGALRM) { /* if not exit with error */
-       printf("Something wrong, handler for SIGALRM\n");
-       exit(1);
-    } else {    /* do nothing, just interrupt pause */
-       return;
-    }
-}
-unsigned int sleep(unsigned int seconds)
-{
-    sighandler_t prev_handler;
-    /* install and check new handler */
-    if ((prev_handler = signal(SIGALRM, alarm_hand)) == SIG_ERR) {
-       printf("Cannot set handler for alarm\n"); 
-       exit(-1);
-    }
-    /* set alarm and go to sleep */
-    alarm(seconds); 
-    pause(); 
-    /* restore previous signal handler */
-    signal(SIGALRM, prev_handler);
-    /* return remaining time */
-    return alarm(0);
-}
diff --git a/sources/test_fopen.c b/sources/test_fopen.c
deleted file mode 100644 (file)
index f783afe..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/* test_fopen.c
- * 
- * Copyright (C) 2001 Simone Piccardi
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/****************************************************************
- *
- * Program test_fopen.c: 
- * Program to test function fopen
- *
- * Author: Simone Piccardi
- * Oct. 2001
- *
- * Usage: testfopen -h give all info's
- *
- * $Id: test_fopen.c,v 1.1 2002/01/03 23:44:14 piccardi Exp $
- *
- ****************************************************************/
-/* 
- * Include needed headers
- */
-#define _GNU_SOURCE
-#include <errno.h>       /* error definitions and routines */ 
-#include <stdlib.h>      /* C standard library */
-#include <unistd.h>      /* unix standard library */
-#include <stdio.h>      /* standard I/O library */
-#include <string.h>      /* string functions */
-
-/* Help printing routine */
-void usage(void);
-
-int main(int argc, char *argv[])
-{
-/* 
- * Variables definition  
- */
-    int i;
-    FILE * file;
-    char * ptr;
-    /*
-     * Input section: decode command line parameters 
-     * Use getopt function
-     */
-    opterr = 0;         /* don't want writing to stderr */
-    while ( (i = getopt(argc, argv, "h")) != -1) {
-       switch (i) {
-       /* 
-        * Handling options 
-        */ 
-       case 'h':   /* help option */
-           printf("Wrong -h option use\n");
-           usage();
-           return -1;
-           break;
-       case '?':   /* unrecognized options */
-           printf("Unrecognized options -%c\n",optopt);
-           usage();
-       default:    /* should not reached */
-           usage();
-       }
-    }
-    /* ***********************************************************
-     * 
-     *          Options processing completed
-     *
-     *               Main code beginning
-     * 
-     * ***********************************************************/
-    /* There must be 2 remaing parameters */
-    if ( (argc-optind) != 2 )  {
-       printf("From %d arguments, removed %d options\n", argc, optind);
-       usage();
-    }
-    if ( !(file = fopen(argv[1], argv[2]))) {
-       perror("cannot open file");
-       exit(1);
-    }
-    i = 100;
-    ptr = malloc(i);
-    getline(&ptr, &i, file);
-//    fclean(file);  /* do not exist on Linux */
-    flockfile(file);
-    fclose(file);
-    return 0;
-}
-/*
- * routine to print usage info and exit
- */
-void usage(void) {
-    printf("Program testfopen : test fopen for a file  \n");
-    printf("Usage:\n");
-    printf("  testfopen [-h] file mode \n");
-    printf("  -h          print this help\n");
-    
-    exit(1);
-}
-