Rebonjour,

pour Daneel : je dois me baser sur des commandes existantes.

pour les autres : En fait j'étudie dans une fac en Norvège et je ne comprends pas tout ce qui ce dit. Et ce cours sur Unix et ses enfants comme un calvaire.
en ce qui concerne ce travail on doit faire le programme demandé (d'1 manière ou d'une autre) et surtout être capable d'en expliquer la moindre ligne. ils savent qu'internet ca existe en Norvège. 🙂
Bonsoir, y a un forum de developpement qui n'est pas mal du tout: developpez.com, d'ailleurs la plupart des gens d'ici doivent aussi y poster 😉

Pour le C/C++ : http://c.developpez.com/cours/
salut

Ce n'est pas le côté C++ qui me dérange c'est tout ce qui concerne unix

merci quand même
Si tu peux te baser sur l'existant c'est simple : dans stdlib.h tu as la fonction "system" qui te permet d'appeler des commandes système.

Exemple (en C) :
#include <stdlib.h>
int main(void) {
    system("date +%H:%M:%S");
    return 0;
}
te donnera le même résultat que (dans ton terminal) :
date +%H:%M:%S
(à savoir l'heure).

Donc pour la partie "shell" c'est facile, après j'imagine que tu sauras intégrer le bout de code que tu as déjà.

A toi de jouer...
Programmation d'un shell... Le bon vieux sujet bateau de programmation système (soupir...)
fork, pipe, dup(2) et les signaux... Que du bonheur :-o
Ouais, ben voyons, mon pauvre petit, tu comprends rien à ce que disent les maichan Hommes du nord ? Je suppose qu'on t'a également forcé à aller étudier là-bas ? Si tu étudies là-bas, c'est ton choix, vu la quantité impressionnante de documentation sur Unix, que les pays du nord proposent souvent des cours en Anglais, ne te plains pas. Assume tes choix et ne rejette pas tes erreurs sur les autres !

@daneel: je ne pense pas que l'appel system() soit approprié dans le cadre de la programmation d'un shell.
Salut.

Regarde du côté des bouquins sur la programmation système pour la partie "théorique". Fais un truc par toi-même, même imparfait, ne cherche pas à de vouloir repomper qq chose de déjà fait...

++
bonjour

@ sat !
qui a dit que je me plaignais
-je suis une fille (ça explique peut-être au yeux de certain pourquoi je n'y comprends pas grand chose)
-ne soit pas jaloux des beaux blonds
-les cours sont en anglais, le livre aussi " operating system concepts" mais l'exo est dans une langue de viking. mais bon, mes copains ne comprennent pas mieux que moi !

====>et au lieu de tirer des plans sur la comète aide moi

@ autre et à sat

j'ai suivi vos conseil et g lu quelques cours en français (Molière c bien) je pense que je comprend un peu maintenant.
je crois que je dois que utiliser pour commencer ce programme je l'ai pris sur internet mais il y a presque le même dans le livre et les cours alors ce n'est pas de la triche !!! la différence c'est que je comprends mieux! mais pas tout
je l'ai un peu modifier et je crois que je peux enlever les sleep
et puis le traduire en c++ ?? pour commencer c ca ?

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include <sys/wait.h>

int fils,pidfils,iden;
char etat1[1024];
char etat2[1024];
main()
{
int pid_p;
pid_p=getpid();
printf("pere: je suis le processus pere mon pid=%d\n",getpid());
sleep(2);

system(etat1);
iden=fork();
if(iden==-1)
{
printf("erreur de creation de processus fils\n");
exit(1);
}
if(iden==0)
{
int pid_f;
pid_f=getpid();
printf("\nfils: je suis le processus fils mon pid=%d\n\n",pid_f);
sprintf(etat2,"ps -o s -p%d",pid_f);
system(etat2);
sleep(90);
execl("prog","prog",0);
}
else
{
printf("\npere: maintenant je dors 5 secondes\n");
sleep(5);
printf("pere: je suis reveille\n\n");
pidfils=wait(&fils);
printf("pere: mon processus fils termine son execution et son pidfils=%d\n\n",pidfils);
}
}
Je vais vaguement te donner quelques idées, mais pour les détails, faudra plutôt demander sur un forum de C++

En gros tu vas devoir faire des fork() a chaque commande, et le fils executera la commande (en utilisant les fonctions exec**), histoire que tu récupère la main. Pour le reste, bonne chance :-P

(utilise un switch plutôt que des if 🙁, mais c'est par là que tu dois regarder)
@Sat : Non je sais, mais c'est simple et rapide et ça amène à d'autre pistes. Notamment certaines documentations sur la programmation système. Mais c'est sur que c'est pas très propre pour faire un shell.

@gaguime : Et voilà ça commence bien, tu as déjà la création de fils...
Que tu sois une fille, ne fais pas de toi une personne moins intelligente.
Par contre, quand on décide d'aller faire ses études en Norvège, on assume.

Je vais te taper sur les doigts pour
- l'absence de la valeur de retour. Utilises la macro EXIT_SUCCESS
- n'utilises pas system() ! ça invoque un shell et c'est un appel bloquant. Utilises fork() et les exec*(), les pages man relative à la libc sont particulièrement bien traduites et à jour. Tu as également accès au manuel de la GNU Libc via info.
- tricherie évidente, le style n'est pas consistant.
- One True Braces Style.

Sinon, qu'est-ce que tu appelles "traduire en C++" ? Si on fait attention, un bon code C est un code C++ valide ...

@melianos: +1
Que tu sois une fille, ne fais pas de toi une personne moins intelligente
Présumons pas, on verra à l'usage ...
Hej,

@ sat : J'assume
que veux tu dire par l'absence de la valeur de retour. Utilises la macro EXIT_SUCCESS
c koi un style consistant

@ sat et autres

voilà mon travaille (je suis morte) ; je suis sure qu'il manque des choses alors libre a vous de critiquer

le prof ne veut pas de system call du genre system . il tient vraiment à me compliquer la vie
il veut du pur c++
il veut fork exec et waitpid (quelle est la difference entre wait et waitpid )
c quoi la lib pour wait en c++



#include <iostream>
#include <sys/wait.h>

using namespace std;

int main()
{
int pid_p=getpid();
int pid=fork();
int pidfils;

cout<<"pere: je suis le processus pere mon pid = "<<pid_p<<endl;

if(pid<0)
{
cout<<"erreur de creation de processus fils"<<endl;
}
else if(pid==0)
{
pidfils=getpid();
cout<<"fils: je suis le processus fils mon pid = "<<pidfils <<endl;
execl("/bin/prog","prog",0);
}
else
{
cout<<" maintenant je dors 5 secondes"<<endl;
sleep(5);
cout<<"pere: je suis reveille"<<endl;
int pid_f=getpid();
wait(0);
cout<<"pere: mon processus fils termine son execution et son pidfils ="<<pidfils<<endl;
}
return 0;
}
hej

@ tous
maintenant je vous traduit la partie que je ne comprends pas

plus concrêtement on doit pouvoir executer un programe en écrivant le nom d'un fichier .exe! on doit pouvoir envoyer de nombreux arguments. un processus fils doit être fait et le program doit être executer dans ce programme fils. A la fin de cette étape on doit pouvoir lancer un programme qui ce trouve dans le meme catalogue.

la traduction est parfaite (je crois) . mais le contenu est un peut nébuleux pour moi.

quelques explications seront les bien venues même de toi sat qui me même la vie dure

a plus
Salut.

Tu veux nous faire faire ton projet ? Si tu sais "forker" alors tu peux faire ton travail...

++
luce
@ prof
non je ne peux pas c pas un cours sur unix c un cours sur les SE en general.


mais si toi qui est prof m'explique peut etre que je comprendrai

si t un bon prof je veux dire
t'as combien de temps pour faire l'exercice ?
Salut.
Je n'ai ni le temps, ni l'envie... De plus, c'est pas trop le lieu... Tu trouvevras plein de cours sous www.developpez.com

++