Newsgroup: it.comp.os.linux.development
Titolo: kill()

gcc -Wall -pedantic -ansi src.c -o src
src.c: In function `main': 
src.c:63: warning: implicit declaration of function `kill'
Non capisco cosa deve fare
Ho incluso tutte le librerie che mi diceva il manuale ma niente
Dove si trova la fuzione kill()
Pulphix


1) man 2 kill
2) di solito e' meglio se posti il codice, almeno la parte incriminata.
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

Crimea wrote:

Ti sei dimenticato gli include con i prototipi di funzione.
Luca
-- 
<<>><<>><<>><<>><<>><<>><<<>><<>><<>><<
Luca Paredi
Computing technical supporter              
Universita' degli Studi dell'Insubria  
<<>><<>><<>><<>><<>><<>><<<>><<>><<>><<

#include <stdio.h>
#include <signal.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
#include <fcntl.h>
/*Ho aggiunto le librerie*/
#include <wait.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
/*fine lib*/
/*Questo fuori dal main*/
static void Gestore (int);
/*******/
int main() {
    int   pipefd[2];                   /* descrittore pipe       */
    int fd,  n , numMin=0, numMai=0;
	pid_t idlettore;
    char buf[10],Maiuscole[6],Minuscole[16384];
 
    int   pselettore;
    pipe(pipefd);
    if ( (pselettore=fork()) < 0)
    {
		perror ("fork error \n");
		exit (1);
    }
    if (pselettore==0)
       {
	   /* processo figlio (Selettore) */
	  while (numMai<5)
          {
             close(pipefd[1]);
	     	 n=read (pipefd[0],buf,1);
             if (n <0 )
     	                {
			 perror ("Errore in read su pipe");
                         exit(3);
                        }
             if (isupper(buf[0]))
             {
              Maiuscole[numMai]=buf[0];
              numMai++;
             }
              else
              {
               Minuscole[numMin]=buf[0];
               numMin++;
              }
          }
          idlettore=getppid();
          if (idlettore <0)
     	                {
			 perror ("Errore in getppid()");
                         exit(3);
                        }
          if ( kill(idlettore,SIGUSR1) == -1)
	   {
		printf ("kill error \n");
           }
          Maiuscole[numMai]='\0';
	      Minuscole[numMin]='\0';	  
	      printf(" Vettore Caratteri Maiuscoli : %s \n",Maiuscole);
          printf(" Vettore Caratteri Minuscoli : %s \n",Minuscole);
          close(pipefd[0]);
          exit(3);
	}
     else
      {  /* processo padre (Lettore) */
        signal (SIGUSR1, Gestore);
		close(pipefd[0]);
        fd = open ("f1", O_RDONLY);  /* Solo lettura */
	if (fd == -1)
	{
			perror ("Errore in open()");
                        exit(2);
        }
       while (1)
        {
        n=read (fd,buf,1);
        if (n < 0)
     	                {
			 perror ("Errore in read()");
                         exit(3);
                        }
        n=write(pipefd[1],buf,1);
        if (n < 0)
     	                {
			 perror ("Errore in write su pipe()");
                         exit(3);
                         }
        }
      }
}  /* Chiudo main */
static void Gestore (int signo)
{
		/* procedura per gestire il segnale SIGUSR1 */
                if (signo == SIGUSR1)
                {
                	printf ("Catturato il segnale SIGUSR1\n");
 
					/*nella wait serve un puntatore a intero per lo status metto null perdendolo*/
					wait(NULL);
                	exit(0);
                }
}

In che caso si rompe la pipe?
Pulphix