Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : funktion kill()



hnzi
06-09-2002, 12:01
hi leute,

ich hab folgeneds problem mit der c-func kill, mein make sagt immer:


gcc -ansi -pedantic -Werror -Wall -g -c -o ttySniffer.o ttySniffer.c
cc1: warnings being treated as errors
ttySniffer.c: In function `main':
ttySniffer.c:164: warning: implicit declaration of function `kill'
make: *** [ttySniffer.o] Error 1


das heisst doch dass der compiler die zugehoerigen header dateien nicht findet! ich habe aber signal.h und sys/types.h wie es im manpage steht, eingebunden.

wenn jemand eine idee hat, woran das liegt, oder einen anderen weg kennt, soll er posten.

ich will prozesse, die ich mit fork gestartet habe 'sauber' beenden

ein auszug aus meinem program:


fork_id = fork();
switch( fork_id )
{
case 0: /* child */
child_id = fork();
switch( child_id )
{
case 0: /* child2 (child) */
if( monitor_ttyS( fd_b, 1 ) == EXIT_FAILURE )
{
fprintf( stderr, "main::monitor_ttyS() %d", __LINE__ );
perror( "" );
exit( EXIT_FAILURE );
}
break;
case -1: /* error */
fprintf( stderr, "main::fork() %d", __LINE__ );
perror( "" );
exit( EXIT_FAILURE );
break;
default: /* child1 (parent) */
if( monitor_ttyS( fd_a, 0 ) == EXIT_FAILURE )
{
fprintf( stderr, "main::monitor_ttyS() %d", __LINE__ );
perror( "" );
exit( EXIT_FAILURE );
}
wait( NULL );
break;
}
break;
case -1: /* error */
fprintf( stderr, "main::fork() %d", __LINE__ );
perror( "" );
exit( EXIT_FAILURE );
break;
default: /* parent */
do
{
control = fgetc( stdin );
}
while( control != 'q' );
if( kill( -2, SIGKILL ) )
{
fprintf( stderr, "main::kill() %d", __LINE__ );
perror( "" );
exit( EXIT_FAILURE );
}
break;
}


hnzi

peschmae
06-09-2002, 12:32
wie genau hast du die eingebunden?
es gibt ja n include für lokale und eines für files im pfad, hast du das richtige genommen? (#include <>)

sind die headers überhaupt auf dem system? evtl. fehlt noch eine dev - package...
mit locate testen

MfG Peschmä

hnzi
06-09-2002, 14:58
ja klar, ist alles richtig eingebunden:

#include <signal.h>
#include <sys/types.h>

das restliche programm funktioniert ja, unter anderem stdio, stdlib, termios,usw.

hnzi

anda_skoa
06-09-2002, 15:17
Probier mal es anders rum zu inkludieren.
In der man page steht



#include <sys/types.h>
#include <signal.h>


Es könnte auch ein Problem sein, dass du -2 als PID hast.
falls pid_t keine negativen Zahlen zuläßt, gibt es keine Funktion die int las ersten Parameter hat.

Ciao,
_

hnzi
09-09-2002, 12:41
nein, das hat alles nichts genutzt.

ich habe die sys/includes vor allen anderen includes gesetzt, dann habe ich die -2 mit der pid-variable die mir fork zurueckgibt ersetzt, und die fork-return-variable die als int deklariert war, ist jetzt auch pid_t. es tritt immer noch die gleiche warnung auf! wenn ich das programm starte und wieder mit 'q' beende, tritt ein ganz sonderbarer effekt auf:
das ganze system schliesst seine consolen, und bringt mir wieder die login aufforderung! offentsichtlich pfusche ich da am init-prozess rum, obwohl ich normal-user bin?!

kann mir jemand helfen?

hnzi

hnzi
10-09-2002, 15:38
ich habs soweit geschafft, dass gcc diese warning nicht mehr bringt:

und zwar habe ich mir signal.h, in der die deklaration von kill drin stehen soll, mal angeschaut, und festgestellt dass dort externer verweis auf kill drinsteht. nun gut, dacht ich mir sowas kann ich auch und hab das gleiche mit meinen c programm gemacht:

extern int kill( pid_t, int );

und siehe da, es klappt! wenn jetzt jemand mir noch erklaeren koennte warum, waere ich wunschlos gluecklich!

hnzi