Mini shell linux a implementer

Fermé
rule111 Messages postés 2 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 14 février 2009 - 13 févr. 2009 à 16:32
rule111 Messages postés 2 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 14 février 2009 - 14 févr. 2009 à 03:38
Bonjour,
ce code en c apeller smsh1 permet bien sur avec d'autre code que possede deja permet d'executer des minimes operations d'une shell linux comme:
-presenter un prompt de commande (>).
-preleve et analise la commande en mode de le separer ds ses deux parties.
-execute la commande a travers un processus fils.
ok moi je veux maintenant ajouter des fonctions a ce code pour qu'il fasse plus d'operation plus precisement:
-possibiliter d'accepter plus une commande sur la meme ligne separer par des points virgullles.
-possibiliter d'accepter comme terminale de commande le symbole & pour esecuter la commande en blackground.
-possibiliter de rediriger le stdin (cmd1<fileIn) et le stdout(cmd2>fileOut)
-possibiliter de metre ensemble plus de commande a travers pipelines(cmd1 | cmd2 ).
-gerer les signaux de maniere que smsh1se comporte de la meme maniere que shellutiliser quand il recoit les signaux SIGQUIT et SIGINT.
-implementer les commandes internes cd et pwd.
voici le code :

/* smsh1.c - small-shell version 1
*
version d'une prompt-shell qui execute un parsing
*
de la ligne de commande en une serie de caractere
*
et utilise fork, exec, wait et ignore les signaux
*/


#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <signal.h>

#include "smsh.h"


#define DFL_PROMPT "> "


void setup();

void fatal(char *s1, char *s2, int n);


int main()
{
char *cmdline,*prompt,**arglist;

int result;


prompt = DFL_PROMPT;

setup();


while( (cmdline = next_cmd(prompt,stdin)) != NULL ) {

if( (arglist = splitline(cmdline)) != NULL ) {

result = execute(arglist);

free(arglist);
}

free(cmdline);
}

return 0;
}


void setup()

/* scopo: inizializzazione della shell
* ritorna: nulla. chiama fatal() in caso di problemi
*/

{
signal(SIGINT,SIG_IGN);

signal(SIGQUIT,SIG_IGN);
}


void fatal(char *s1, char *s2, int n)
{

fprintf(stderr,"ERROR: %s, %s\n",s1,s2);
exit(n);

}

aider moi svp.
c'est un tp.
A voir également:

1 réponse

Pourquoi tu veux implementer quelque chose comme ci?

C'est pour apprendre?

Je te recommande de voir le "source code" de netcat.

http://netcat.sourceforge.net/
1
rule111 Messages postés 2 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 14 février 2009
14 févr. 2009 à 03:38
je veux executer plus de commande que ce que fait celle-ci
0