Je suis tombé par hazard sur ce bout de code :
Je trouve ça très drôle, comme concept... le programme auto-suicidaire...
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
/*
* is this the stupidest code all over the world ?
* or any student first system call code ?
*
*/
int main(int argc, char *argv[])
{
if (argc != 2)
{
// if the fucking user doesn't give a signal code on args, then kill -9 program
kill(getpid(), 9);
return EXIT_SUCCESS;
}
// else apply user arg as signal sent to the program
if (kill(getpid(), atoi(argv[1])) == -1 )
perror(NULL);
return EXIT_SUCCESS;
}
# Marrant
Posté par barmic . Évalué à 3.
Marrant j'imagine (je l'ai pas essayé) qu'une fois sur deux le signal n'arrive jamais à destination …
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
# Simplifiable.
Posté par Batchyx . Évalué à 2.
la fonction raise() permet déjà de s'envoyer un signal.
[^] # Re: Simplifiable.
Posté par netsurfeur . Évalué à 2.
kill() est un appel système.
raise() est une fonction C (qui utilise kill).
[^] # Re: Simplifiable.
Posté par Batchyx . Évalué à 4.
brk est un appel système.
malloc est une fonction C (qui utilise brk et mmap)
Donc il faut remplacer malloc par brk ?
[^] # Re: Simplifiable.
Posté par netsurfeur . Évalué à 1.
brk ne fait que déplacer l'adresse de fin du segment de données, la taille allouée a pour granularité celle d'une page mémoire.
malloc/free apportent un confort d'utilisation car ils ont une valeur ajoutée par rapport à brk : malloc/free gèrent l'allocation de tailles quelconques, le chaînage des espaces libérés par free,.... Bref, un niveau d'abstraction largement supérieur à celui fourni par brk.
raise(sig) se résume à un signal(getpid(), sig). J'ai du mal à voir en quoi cela simplifie le programme cité dans ce post.
[^] # Re: Simplifiable.
Posté par ninis666 . Évalué à 1.
raise est plus 'thread safe' que kill, cf man raise :
Dans un programme monothreadé, elle est équivalente à :
Dans un programme multithreadé, elle est équivalente à :
Donc mieux autant utiliser raise sans trop se poser la question :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.