Petits problemes en C ( unix)
Résolu/Fermé
aveuglemspas_sourd
Messages postés
286
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
12 octobre 2009
-
2 janv. 2009 à 21:38
HACKER 712 Messages postés 1282 Date d'inscription lundi 15 décembre 2008 Statut Contributeur Dernière intervention 10 décembre 2009 - 29 janv. 2009 à 18:30
HACKER 712 Messages postés 1282 Date d'inscription lundi 15 décembre 2008 Statut Contributeur Dernière intervention 10 décembre 2009 - 29 janv. 2009 à 18:30
A voir également:
- Petits problemes en C ( unix)
- Petite amie virtuelle en français - Accueil - Intelligence artificielle
- Fichier executable unix ✓ - Forum MacOS
- Telecharger unix ✓ - Forum Linux / Unix
- Petite cle en haut a droite samsung - Forum Samsung
- Petits chiffres ✓ - Forum Windows
10 réponses
aveuglemspas_sourd
Messages postés
286
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
12 octobre 2009
20
3 janv. 2009 à 12:19
3 janv. 2009 à 12:19
heu c'est mon prof qui m'a dit que c'était faux.. et que je devais faire wait(&p) ..
HACKER 712
Messages postés
1282
Date d'inscription
lundi 15 décembre 2008
Statut
Contributeur
Dernière intervention
10 décembre 2009
255
4 janv. 2009 à 12:42
4 janv. 2009 à 12:42
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 !
HACKER 712
Messages postés
1282
Date d'inscription
lundi 15 décembre 2008
Statut
Contributeur
Dernière intervention
10 décembre 2009
255
29 janv. 2009 à 18:30
29 janv. 2009 à 18:30
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.
HACKER 712
Messages postés
1282
Date d'inscription
lundi 15 décembre 2008
Statut
Contributeur
Dernière intervention
10 décembre 2009
255
3 janv. 2009 à 13:01
3 janv. 2009 à 13:01
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.......................
aveuglemspas_sourd
Messages postés
286
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
12 octobre 2009
20
3 janv. 2009 à 13:27
3 janv. 2009 à 13:27
ah j'aimerai bien que ça soit ça car ça me parle ce que tu vien de dire :)
HACKER 712
Messages postés
1282
Date d'inscription
lundi 15 décembre 2008
Statut
Contributeur
Dernière intervention
10 décembre 2009
255
3 janv. 2009 à 13:28
3 janv. 2009 à 13:28
eh bien alors je ne me suis pas trompé !
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!
aveuglemspas_sourd
Messages postés
286
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
12 octobre 2009
20
3 janv. 2009 à 17:37
3 janv. 2009 à 17:37
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.