Bonjour à tous,
Lorsque j'exécute ce code je reçois une erreur de segmentation, je n'arrive pas à comprendre pq. Les instructions sont écrites en commentaire. Demandez-moi si davantage d'explication sont requises.
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <string.h>
/*
* Écrivez un programme qui crée un fils.
Lorsque le fils reçoit le signal SIGTSTP (CTRL-Z), il affiche dans un fichier, dont le nom est passé comme premier argument au programme, la phrase ''C'est en forgeant''. De plus, lorsque le programme reçoit le signal SIGINT (CTRL-C), il affiche la phrase ''que l'on devient forgeron'' dans un fichier dont le nom est passé comme second argument au programme, puis il se termine.
Le père attend des commandes au clavier. Lorsqu'il reçoit une ligne contenant respectivement "SIGTSTP" ou "SINGINT", il envoie le signal correspondant à son fils. Dans les autres cas, il imprime son mode d'emploi.
*/
FILE* fichier = NULL;
// SIGTSTP
void fils(int sig){
fputs("C'est en forgeant ", fichier);
}
// SIGINT
void forgeron(int sig){
fputs("que l'on devient forgeron.", fichier);
fclose(fichier);
exit(0);
}
int main(int argc, char* argv []){
char * tab = strcat(argv[1],".txt");
fichier = fopen(tab, "w");
signal(SIGINT, forgeron);
pid_t pid;
pid = fork ();
/* On suppose qu'il n'y a pas de problèmes avec le fichier pour ne pas surcharger le code.
*/
while(1){
if (pid >0 ) {
char * commandes;
char * SIGS = "SIGTSTP";
char * SIGI = "SIGINT";
scanf("%s",commandes);
if(strcmp(commandes,SIGS)==0){
kill(SIGTSTP, 0);// Que dois-je précisier pour l'envoyer au