Processus et Tubes 1
Spaki
Messages postés
38
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
Bonjour,
Je suis debutante en programmation C système. J'ai besoin de votre aide pour résoudre un exo :
ecrire un cat en deux morceaux : le processus père lit le fichier ( donnée en paramètre) et l'écrit dans le tube , tandis que le fils le lit depuis le tube et l'affiche.
J'ai commencé à faire l'exo :
#include<stdio.h>
#include<unistd.h>
#include<assert.h>
#define SIZE 32//taille du tampon
char tmp[SIZE];//tampon
void cat( char * fichier){
pipe(p);
pid_t pidfils;
int fds;
int lus1,ecrits1;
int lus2;
if((pidfils=fork())<0){
perror("fork()\n");
exit(EXIT_FAILURE);
}
if(pidfils!=0){
fds=open(fichier,O_RDONLY);
if(fds<0){
perror("open");
exit(1);
}
while((lus1=read(fds,tmp,SIZE))!=0){
ecrits1=write(p[1],tmp,SIZE);
assert(lus1==ecrits1);
}
close(fds);
close(p[1]);
}
else{
while((lus2=read(p[0],tmp,SIZE))!=0){
printf("%d\n",lus2);
}
close(p[0]);
}
}
Problème: je ne comprends pad pourquoi sous DEV C le programme affiche des erreurs pour les fonctions fork(),... je pense qu'il ne les reconnait pas!
Comment faire , quelqu'un pourrait m'aider !!!!
Merci
Bonjour,
Je suis debutante en programmation C système. J'ai besoin de votre aide pour résoudre un exo :
ecrire un cat en deux morceaux : le processus père lit le fichier ( donnée en paramètre) et l'écrit dans le tube , tandis que le fils le lit depuis le tube et l'affiche.
J'ai commencé à faire l'exo :
#include<stdio.h>
#include<unistd.h>
#include<assert.h>
#define SIZE 32//taille du tampon
char tmp[SIZE];//tampon
void cat( char * fichier){
pipe(p);
pid_t pidfils;
int fds;
int lus1,ecrits1;
int lus2;
if((pidfils=fork())<0){
perror("fork()\n");
exit(EXIT_FAILURE);
}
if(pidfils!=0){
fds=open(fichier,O_RDONLY);
if(fds<0){
perror("open");
exit(1);
}
while((lus1=read(fds,tmp,SIZE))!=0){
ecrits1=write(p[1],tmp,SIZE);
assert(lus1==ecrits1);
}
close(fds);
close(p[1]);
}
else{
while((lus2=read(p[0],tmp,SIZE))!=0){
printf("%d\n",lus2);
}
close(p[0]);
}
}
Problème: je ne comprends pad pourquoi sous DEV C le programme affiche des erreurs pour les fonctions fork(),... je pense qu'il ne les reconnait pas!
Comment faire , quelqu'un pourrait m'aider !!!!
Merci
A voir également:
- Processus et Tubes 1
- Processus d'execution client serveur - Forum Windows 10
- Processus hote windows rundll32 - Forum Virus
- Quest ce que Processus hôte windows(Rundll32) ✓ - Forum Logiciels
- Processus inactif du systeme ✓ - Forum Windows
- Modifier priorité processus windows 10 permanent - Forum Programmation
6 réponses
Salut,
fork est spécifique à Unix/GNULinux pour windows il faut voir les threads
http://www.siteduzero.com/tutoriel-3-3291-les-threads-et-les-mutex.html
https://franckh.developpez.com/tutoriels/posix/pthreads/
fork est spécifique à Unix/GNULinux pour windows il faut voir les threads
http://www.siteduzero.com/tutoriel-3-3291-les-threads-et-les-mutex.html
https://franckh.developpez.com/tutoriels/posix/pthreads/
Ah ok,
Il faut que j'utilise fork() car on n'a pas vu les threads en courw.
J'ai commencé a faire ce tp à l'école sur linux , je dois le terminer pour demain.
Je n'ai pas installé linux sur mon pc, il faudrait que je le fasse rapidement.
Mais comme je dois rendre ce tp pour demain, quelqu'un pourrait jeter un coup d'oeil sur le code???
Si c correct ou pas.
Merci
Il faut que j'utilise fork() car on n'a pas vu les threads en courw.
J'ai commencé a faire ce tp à l'école sur linux , je dois le terminer pour demain.
Je n'ai pas installé linux sur mon pc, il faudrait que je le fasse rapidement.
Mais comme je dois rendre ce tp pour demain, quelqu'un pourrait jeter un coup d'oeil sur le code???
Si c correct ou pas.
Merci
Salut,
Si tu fais un clic sur le mot fork dans mon message tu ira sur un bon tuto concernant le fork.
Pour pouvoir tester ton programme tu peux utiliser un cd live linux, pas besoin d'installer quoi que ce soit.
Il suffit de télécharger un petit linux, par exemple puppylinux qui fait 105 Mo.
Si tu as un bon débit tu peux prendre un Ubuntu qui peut être utilisé en mode live.
Si tu fais un clic sur le mot fork dans mon message tu ira sur un bon tuto concernant le fork.
Pour pouvoir tester ton programme tu peux utiliser un cd live linux, pas besoin d'installer quoi que ce soit.
Il suffit de télécharger un petit linux, par exemple puppylinux qui fait 105 Mo.
Si tu as un bon débit tu peux prendre un Ubuntu qui peut être utilisé en mode live.
Si je telecharge puppylinux , je pourrait tester compiler et executer mon programme???
Je n'aurait donc pas installer linux, si j'ai bien compris.
Pour le cd live linux sur ubundu , il faut que je commande , je pense.
Je n'aurait donc pas installer linux, si j'ai bien compris.
Pour le cd live linux sur ubundu , il faut que je commande , je pense.
Re,
En mode CD Live tu n'installes rien, en revanche tu peux tester, compiler ton code
Si tu veux Ubuntu, tu peux le télécharger directement depuis https://ubuntu.com/
En mode CD Live tu n'installes rien, en revanche tu peux tester, compiler ton code
Si tu veux Ubuntu, tu peux le télécharger directement depuis https://ubuntu.com/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ok,
pour le cd live , if faut que je télecharge la version image CD ubuntu sur un CD vierge????
Mais puppylinux , c quoi ????
Si j'installe puppylinux sur on pc , j'aurais toujours acces a windows???
pour le cd live , if faut que je télecharge la version image CD ubuntu sur un CD vierge????
Mais puppylinux , c quoi ????
Si j'installe puppylinux sur on pc , j'aurais toujours acces a windows???
Re,
Si tu prends Ubuntu tu n'as plus besoin d'un autre linux.
Si tu prends PuppyLinux pareil.
Il s'agit des deux distribution GNU/Linux
Tu n'installe rien de tout.
Tu télécharges l'image iso, tu graves l'image avec ton logiciel ( regarde ici https://www.commentcamarche.net/faq/3942-graver-une-image-disque-iso-nrg
Ensuite tu boote ton pc avec le cd gravé et tu fais tes tests.
Pour accéder à nouveau sur ton windows il suffira de démarrer le pc.
Si tu prends Ubuntu tu n'as plus besoin d'un autre linux.
Si tu prends PuppyLinux pareil.
Il s'agit des deux distribution GNU/Linux
Tu n'installe rien de tout.
Tu télécharges l'image iso, tu graves l'image avec ton logiciel ( regarde ici https://www.commentcamarche.net/faq/3942-graver-une-image-disque-iso-nrg
Ensuite tu boote ton pc avec le cd gravé et tu fais tes tests.
Pour accéder à nouveau sur ton windows il suffira de démarrer le pc.