J'ai trouvé cet exercice avec correction sur internet mais je n'arrive ps à comprendre la solution :
Voici l'énoncé : Exercice 1.
1. Combien de processus engendre l’évaluation de la commande C fork() && ( fork() || fork() ) ;
2. Dessiner l’arbre généalogique des processus engendrés par cette ligne
et voici la solution :
Le processus courant (appelons-le le père) engendre dans l’ensemble 3 autres processus. En effet, comme dans une instruction a && b, b n’est pas évaluée si l’évaluation de a donne 0, de même, dans dans une instruction a || b, b n’est pas évaluée si l’évaluation de a ne donne pas 0. Donc, dans fork() && b seulement le père exécute b, et dans fork() || b seulement le fils exécute b
include <unistd.h>
int main()
{
if(fork() && (fork() || fork()));
sleep(10);
exit(0);
}
C'est surtout cette ligne que je ne comprend pas :
if(fork() && (fork() || fork()));
Que signifie un "if" avec un point virgule à la fin?
et ceci " b n’est pas évaluée si l’évaluation de a ne donne pas 0" pourquoi? vu que c'est un "OU" logique donc b devrait être évalué même si a donne 0 non?
et surtout je voudrais savoir à quel ligne les fils reprennent-ils l'exécution du code?
Un if avec un point virgule a la fin veux dire qu'on fais rien en fonction de la condition
exemple :
age = 19;
if (age > 18);
printf("tu as %d age \n", age);
Peux importe l'age, on executera toujours l'instruction printf, on se moque du retour de la condition
Pour repondre à ton deuxieme points
Dans un && (et) , si la première condition est fausse , on s’arrête la , pas besoin d'aller vérifier la deuxième condition vu que de toute façon y'en a au moin une de fausse , ce qui donne un test && (et) faux de toute façon.
Voila pourquoi.
Cependant dans un test || (ou) , on dois tester chaque condition du test car une seul suffit a valider la condition total.
autre chose , dans un main on evite le exit, vaux mieu un return (EXIT_SUCCESS)
- Edité par Oldaric 30 mai 2016 à 19:44:57
On estime à environ 550 millions le nombre d'armes à feu actuellement en circulation. Autrement dit il y a un homme sur douze qui est armé sur cette planète. La seule question c'est … comment armer les onze autres ?
il exécute en parallèle le même code a partir du moment ou tu fork.
On estime à environ 550 millions le nombre d'armes à feu actuellement en circulation. Autrement dit il y a un homme sur douze qui est armé sur cette planète. La seule question c'est … comment armer les onze autres ?
Que signifie un "if" avec un point virgule à la fin?
Formellement, la syntaxe du if sans else est:
if(expression)instruction
Ici, l'instruction est constituée du seule point-virgule. Cette instruction vide ne fait évidemment rien. On peut aussi utiliser une paire d'accolades vide, ça revient au même.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
On estime à environ 550 millions le nombre d'armes à feu actuellement en circulation. Autrement dit il y a un homme sur douze qui est armé sur cette planète. La seule question c'est … comment armer les onze autres ?
On estime à environ 550 millions le nombre d'armes à feu actuellement en circulation. Autrement dit il y a un homme sur douze qui est armé sur cette planète. La seule question c'est … comment armer les onze autres ?
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Pas d'aide concernant le code par MP, le forum est là pour ça :)