Petits problemes en C ( unix)
Résolu
aveuglemspas_sourd
Messages postés
312
Statut
Membre
-
HACKER 712 Messages postés 1463 Statut Contributeur -
HACKER 712 Messages postés 1463 Statut Contributeur -
Bonjour,
Voila si je fais :
int *p;
wait(p);
ça ne fonctionne pas, il faudrait que je fasse
wait(&p);
Seulement je ne suis pas sur de bien avoir saisi pourquoi.. si une âme généreuse passe dans le coin :)
Voila si je fais :
int *p;
wait(p);
ça ne fonctionne pas, il faudrait que je fasse
wait(&p);
Seulement je ne suis pas sur de bien avoir saisi pourquoi.. si une âme généreuse passe dans le coin :)
A voir également:
- Petits problemes en C ( unix)
- Petite amie virtuelle en français gratuit - Accueil - Intelligence artificielle
- Petite cle en haut a droite samsung - Forum Samsung
- Fichier executable unix ✓ - Forum MacOS
- Apparition d'une clé d'entretien sur écran samsung s5 > sm-g800F ✓ - Forum Samsung
- Icone de forme clé agfiché sur mon téléphone samsung - Forum Samsung
10 réponses
Bonjour !
j'ai une question a vous poser :
( deux en fait ! )
a quoi servent très exactement les fonctions
-malloc ()
-wait ()
prototypes et explications .......
merci a tous !
j'ai une question a vous poser :
( deux en fait ! )
a quoi servent très exactement les fonctions
-malloc ()
-wait ()
prototypes et explications .......
merci a tous !
La fonction malloc sert à allouer de l'espace.
Exemple: créer un tableau d'entier de taille 5:
int main(){
int *tableau = malloc(5*sizeof(int));
tableau[0]=12; tableau[1]=7; tableau[2]=3; tableau[3]=19;
printf("affichage de la case 3 : %d et de la case 5 : %d\n", tableau[2], tableau[4]);
return 1;
}
La fonction calloc sert à allouer de l'espace et à effacer chacune des cases:
Exemple: créer un tableau d'entier de taille 5:
int main(){
int *tableau = calloc(5, sizeof(int));
tableau[0]=12; tableau[1]=7; tableau[2]=3; tableau[3]=19;
printf("affichage de la case 3 : %d et de la case 5 : %d\n", tableau[2], tableau[4]);
return 1;
}
La fonction wait sert à attendre la fin d'un processus fils
Exemple: attendre la fin du premier processus fils fini. (fork() sur UNIX)
int main(){
int i;
if(fork()){
printf("processus père");
i=wait(NULL);
printf("Fin du fils de PID : %d\n" i);
printf("PID père : %d\n", getpid());
}
else{
for(i=0;i<5;i++)
sleep(1);
printf("PID fils : %d \n", getpid());
exit(1);
}
return 1;
}
Cette fonction n'est utile qu'avec les processus.
Pour mettre en pause un processus pendant int x secondes, il faut utiliser la fonction sleep(x);
Exemple: mettre en pause son programme pendant deux secondes:
int main(){
printf("debut");
sleep(2);
printf("2 secondes plus tard");
return 1;
}
Normalement, tout cela devrait marcher. Attention aux fork bombs !
Exemple: créer un tableau d'entier de taille 5:
int main(){
int *tableau = malloc(5*sizeof(int));
tableau[0]=12; tableau[1]=7; tableau[2]=3; tableau[3]=19;
printf("affichage de la case 3 : %d et de la case 5 : %d\n", tableau[2], tableau[4]);
return 1;
}
La fonction calloc sert à allouer de l'espace et à effacer chacune des cases:
Exemple: créer un tableau d'entier de taille 5:
int main(){
int *tableau = calloc(5, sizeof(int));
tableau[0]=12; tableau[1]=7; tableau[2]=3; tableau[3]=19;
printf("affichage de la case 3 : %d et de la case 5 : %d\n", tableau[2], tableau[4]);
return 1;
}
La fonction wait sert à attendre la fin d'un processus fils
Exemple: attendre la fin du premier processus fils fini. (fork() sur UNIX)
int main(){
int i;
if(fork()){
printf("processus père");
i=wait(NULL);
printf("Fin du fils de PID : %d\n" i);
printf("PID père : %d\n", getpid());
}
else{
for(i=0;i<5;i++)
sleep(1);
printf("PID fils : %d \n", getpid());
exit(1);
}
return 1;
}
Cette fonction n'est utile qu'avec les processus.
Pour mettre en pause un processus pendant int x secondes, il faut utiliser la fonction sleep(x);
Exemple: mettre en pause son programme pendant deux secondes:
int main(){
printf("debut");
sleep(2);
printf("2 secondes plus tard");
return 1;
}
Normalement, tout cela devrait marcher. Attention aux fork bombs !
merci de cette longue réponse :) !
c'ets sympa !
ah oui, quand meme : ca veut dire quoi "fork bombs"
(non je ne suis pas con, ni lourd...)
et aussi, saurais tu ou apprendre le langage C ( partout sauf sur le site du zero ) ! STP !
c'ets sympa !
ah oui, quand meme : ca veut dire quoi "fork bombs"
(non je ne suis pas con, ni lourd...)
et aussi, saurais tu ou apprendre le langage C ( partout sauf sur le site du zero ) ! STP !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionint *p; wait(p);C'est correct, il n'y a pas à faire:
wait(&p);on peut même écrire
wait(NULL);si l'on est pas intéressé par le code retour.
Mais dans tous les cas cela doit fonctionner.
Nota: La fonction wait n'attend pas un certain temps (pour cela il faut utiliser la fonction sleep); la fonction attend la terminaison d'un processus fils; s'il n' y a pas de fils la fonction echoue et reviens immédiatement.
salut !
tout simplement car le int *p
crée un pointeur !
si tu affiche p
ca te donne l'adresse de de la valeur du pointeur
&p indique la valer en elle meme !
en fin, je crois.......................
tout simplement car le int *p
crée un pointeur !
si tu affiche p
ca te donne l'adresse de de la valeur du pointeur
&p indique la valer en elle meme !
en fin, je crois.......................
Que les choses soient claires.
Le prototype de la fonction wait est le suivant:
Le prototype de la fonction wait est le suivant:
pid_t wait (int* status)donc pour utiliser cette fonction il faut :
int status; wait (&status);ou
int* status = malloc (sizeof(int)); wait (status);Au choix c'est une question de goût!
Daccord mais peut tu m'expliquer pourquoi (concretement)
ça c'est bon
int status;
wait (&status);
et pas
int status;
wait (status);
juste pour que je comprenne
Apres malloc j'en ai entendu parler mais pas encore vu..
ça c'est bon
int status;
wait (&status);
et pas
int status;
wait (status);
juste pour que je comprenne
Apres malloc j'en ai entendu parler mais pas encore vu..
Passage de paramètres par valeur ou par référence... ça te dit quelque chose ?
Si on passe un paramètre par valeur, c'est à dire si on donne la valeur d'un paramètre à une fonction, la fonction reçoit en fait une copie du paramètre et si elle modifie cette valeur l'appelant n'en sera pas informé.
Par contre si on passe un paramètre par référence, la fonction reçoit l'adresse du paramètre et si elle modifie ce paramètre, l'appelant en sera donc informé.
C'est la raison pour laquelle la fonction 'wait' attend un pointeur afin de pouvoir retourner une information (en l'occurence la raison de la mort du fils) à l'appelant. Ceci est obligatoire car 'wait' retourne déjà une information (en l'occurence le PID du fils).
Lorsqu'on a plus d'une information à retourner, il est indispensable de passer des paramètres par référence.
Si on passe un paramètre par valeur, c'est à dire si on donne la valeur d'un paramètre à une fonction, la fonction reçoit en fait une copie du paramètre et si elle modifie cette valeur l'appelant n'en sera pas informé.
Par contre si on passe un paramètre par référence, la fonction reçoit l'adresse du paramètre et si elle modifie ce paramètre, l'appelant en sera donc informé.
C'est la raison pour laquelle la fonction 'wait' attend un pointeur afin de pouvoir retourner une information (en l'occurence la raison de la mort du fils) à l'appelant. Ceci est obligatoire car 'wait' retourne déjà une information (en l'occurence le PID du fils).
Lorsqu'on a plus d'une information à retourner, il est indispensable de passer des paramètres par référence.