<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://forum.ubuntu-fr.org/extern.php?action=feed&amp;tid=1180481&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Forum Ubuntu-fr.org / Instructions dans un processus]]></title>
		<link>http://forum.ubuntu-fr.org/viewtopic.php?id=1180481</link>
		<description><![CDATA[Les sujets les plus récents dans Instructions dans un processus.]]></description>
		<lastBuildDate>Tue, 29 Jan 2013 09:48:33 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Réponse à&#160;:  Instructions dans un processus]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12381651#p12381651</link>
			<description><![CDATA[<p>En fait tu peux très bien avoir plusieurs descripteurs ouverts sur un même fichier (un même flux, en l&#039;occurrence, mais c&#039;est pareil).<br />Quand tu fais dup2(tube[1],1) tu copie les paramètres du descripteur &quot;tube[1]&quot; dans le descripteur 1 (sortie standard).<br />A ce moment tu as deux descripteurs qui désignent le même flux.<br />&quot;ls&quot;, comme tout le monde, écrit dans le flux du descripteur 1. Par contre, personne n&#039;utilise plus le descripteur tube[1]. On peut donc fermer tube[1], c&#039;est à dire casser la connexion entre le descripteur et le flux. Ça ne change rien au descripteur 1 qui, lui, reste connecté au flux.</p><p>idem, dans l&#039;autre sens, pour &quot;sort&quot;, l&#039;entrée standard et tube[0]</p><p>Par ailleurs, c&#039;est plutôt une bonne idée de fermer les descripteurs dont on n&#039;a plus besoin. Après tout, il n&#039;y en a qu&#039;un nombre limité. C&#039;est comme pour un fichier : quand tu as finit de le lire, ou quand tu n&#039;as plus rien à y écrire, tu le fermes.</p>]]></description>
			<author><![CDATA[dummy@example.com (Melrock)]]></author>
			<pubDate>Tue, 29 Jan 2013 09:48:33 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12381651#p12381651</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  Instructions dans un processus]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12372061#p12372061</link>
			<description><![CDATA[<p>Merci beaucoup de ta réponse melrock si je commente la ligne du execl, le printf s&#039;affiche normalement et comme le printf arrive avant le execl je me demandais le rapport de cause à effet.</p><p>Ok faut que je regarde toute cette histoire de blocage alors <img src="http://forum.ubuntu-fr.org/img/smilies/tongue.png" width="15" height="15" alt="tongue" /> </p><p>Dernière petite question : dans tous les cours &quot;propres&quot; que j&#039;ai pu voir, il y a ces lignes : </p><p>close(tube[0]);<br />dup2(tube[1],1);<br />close(tube[1]);</p><p>La première, aucun souci on ferme le coté du tube qu&#039;on utilise pas dans le processus.<br />La deuxième no souci non plus, on connecte les flux.<br />Mais la troisième : pourquoi ferme t&#039;on le descripteur crée via un pipe si on doit l&#039;utiliser par la suite?Ici, on connecte l&#039;entrée du tube a la sortie standard mais pourquoi ferme t-on l&#039;entrée du tube juste après?</p><p>Merci encore.</p>]]></description>
			<author><![CDATA[dummy@example.com (sin92)]]></author>
			<pubDate>Mon, 28 Jan 2013 12:32:36 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12372061#p12372061</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  Instructions dans un processus]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12368641#p12368641</link>
			<description><![CDATA[<div class="quotebox"><cite>sin92 a écrit&#160;:</cite><blockquote><div><p>Pourquoi les printf(&quot;coucou&quot;); ne s&#039;exécutent pas?</p></div></blockquote></div><p>Les printf s’exécutent, mais la sortie standard est bufferisée. Le buffer est vidé à chaque retour chariot ou quand on lui demande explicitement (en ajoutant&#160; fflush (stdout); après chaque printf) ou en faisant une lecture sur l&#039;entrée standard. Dans ton cas, les 3 conditions sont fausses et manifestement (je l&#039;ignorais <img src="http://forum.ubuntu-fr.org/img/smilies/roll.png" width="15" height="15" alt="roll" />) le execl repart d&#039;un buffer vide pour sa sortie standard.</p><div class="quotebox"><cite>sin92 a écrit&#160;:</cite><blockquote><div><p>De plus si j&#039;ai bien compris les processus sont tués dès que leurs instructions sont terminés mais admettons que le fils doit envoyer un message au père via un pipe; Admettons que ce soit au père de s&#039;exécuter en premier il va terminer ses instructions, voyant qu&#039;il n&#039;y a rien à lire pour le moment et ne pourra pas lire ce que le fils lui envoie puis va mourir?</p></div></blockquote></div><p>Tout dépend de la façon dont le père attend la lecture. En général une lecture sur l&#039;entrée standard est bloquante : le process attend tant qu&#039;il n&#039;y a rien à lire. Mais on peut aussi le programmer de façon à ce qu&#039;il n&#039;attende pas et il mourra si son fils n&#039;est pas assez rapide à lui écrire.</p><div class="quotebox"><cite>sin92 a écrit&#160;:</cite><blockquote><div><p>mais dans la réalité les deux arrivent à communiquer donc quand un processus meurt-il réellement?</p></div></blockquote></div><p>Dans ton cas, le fils exécute &quot;sort&quot; qui reste bloquant en attendant qu&#039;il arrive quelque chose sur son entrée standard et le père exécute &quot;ls&quot; qui envoie des données sur sa sortie standard donc sur l&#039;entrée standard de son fils, puis meurt. Le fils cesse d&#039;être bloqué par son entrée standard quand le pipe est rompu par la mort du père (à la fin de l&#039;exéution du &quot;ls&quot;), fait alors le tri, affiche le résultat et meurt.</p><div class="quotebox"><cite>sin92 a écrit&#160;:</cite><blockquote><div><p>Tourne t-il en boucle plusieurs fois de suite?</p></div></blockquote></div><p>Donc non.:P</p><div class="quotebox"><cite>sin92 a écrit&#160;:</cite><blockquote><div><p>Ou lors de l&#039;accès en lecture d&#039;un descripteur va t-il se mettre en pause jusqu&#039;a ce qu&#039;une donnée apparaisse?</p></div></blockquote></div><p>Donc oui <img src="http://forum.ubuntu-fr.org/img/smilies/wink.png" width="15" height="15" alt="wink" />, sauf si on définit explicitement le descripteur comme non bloquant.</p>]]></description>
			<author><![CDATA[dummy@example.com (Melrock)]]></author>
			<pubDate>Mon, 28 Jan 2013 07:28:35 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12368641#p12368641</guid>
		</item>
		<item>
			<title><![CDATA[Instructions dans un processus]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12356191#p12356191</link>
			<description><![CDATA[<p>Bonjour voila y&#039;a quelque chose que je n&#039;arrive pas a comprendre je débute dans la programmation système : </p><p>voici mon code : il s&#039;agit simplement de faire communiquer un processus père avec un processus fils</p><div class="codebox"><pre class="vscroll"><code>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
void pipe_shell(char* argv1, char* argv2);

int main(int argc,char* argv[])
{
        if(argc!=3)
                 exit(-1);

	pipe_shell(argv[1],argv[2]);
		
	return EXIT_SUCCESS;
}

void pipe_shell(char* argv1, char* argv2)
{
	int tube[2];
	pipe(tube);
	pid_t result_fork=fork();

	switch(result_fork)
	{
		case -1 : printf(&quot;Erreur creation processus\n&quot;);
			exit(-1);

		case 0 : /*processus fils*/
                        printf(&quot;coucou&quot;);
			close(tube[1]);
			dup2(tube[0],0);
			close(tube[0]);
			execl(&quot;/usr/bin/sort&quot;,&quot;sort&quot;,NULL);
			break;

		default : /*processus pere*/
			printf(&quot;coucou&quot;);
			close(tube[0]);
			dup2(tube[1],1);
			close(tube[1]);
			execl(&quot;/bin/ls&quot;,&quot;ls&quot;,NULL);

	}
}</code></pre></div><p>Pourquoi les printf(&quot;coucou&quot;); ne s&#039;exécutent pas? </p><p>De plus si j&#039;ai bien compris les processus sont tués dès que leurs instructions sont terminés mais admettons que le fils doit envoyer un message au père via un pipe; Admettons que ce soit au père de s&#039;exécuter en premier il va terminer ses instructions, voyant qu&#039;il n&#039;y a rien à lire pour le moment et ne pourra pas lire ce que le fils lui envoie puis va mourir? mais dans la réalité les deux arrivent à communiquer donc quand un processus meurt-il réellement?Tourne t-il en boucle plusieurs fois de suite?Ou lors de l&#039;accès en lecture d&#039;un descripteur va t-il se mettre en pause jusqu&#039;a ce qu&#039;une donnée apparaisse?</p><p>Merci !</p>]]></description>
			<author><![CDATA[dummy@example.com (sin92)]]></author>
			<pubDate>Sat, 26 Jan 2013 22:27:08 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12356191#p12356191</guid>
		</item>
	</channel>
</rss>
