France Hardware : Forums de discussion
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
22 730 membres enregistrés - 1 886 888 posts - 96 483 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Sujets divers
                [C] faire un minishell (Urgent, rendu dans 12h)
19 connectés(record : 207 le 05 juin 2007 - 05 h 23)

Vous devez vous connecter pour répondre au topic.
Precedent | 1,2,3,4 | Suivant
[C] faire un minishell (Urgent, rendu dans 12h)

Erel69
206
(¯`·.__[T3aM.L1b3rTe©]__.·´¯)

Messages : 19 449
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 18 novembre 2004 - 21 h 37 m 00 s
Reprise du message précédent :

déjà ajouter du char avec du int c'est normal ?



Obscurité au-delà du crépuscule, pourpre au-delà du sang qui coule, enfoui dans le flot du temps, en ton haut nom, je jure fidélité à l'obscurité. Que les fous qui se dressent devant nous soient détruits, par le pouvoir que toi et moi possédons...

Woofy
Pour les bons tuyaux me demander

Messages : 26 210
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 18 novembre 2004 - 21 h 39 m 17 s
ou ca?


Bon, choix difficile, mais je crois que je vais tout recommencer depuis le debut.

Apres tout, j'ai encore 11h20 pour faire ce que j'ai mis 1 semaine a 10h/jours a faire! :(


Message édité 1 fois, la dernière par Woofy le 18 novembre 2004 - 21 h 40.

:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


Erel69
206
(¯`·.__[T3aM.L1b3rTe©]__.·´¯)

Messages : 19 449
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 18 novembre 2004 - 21 h 41 m 13 s
dans ta fonction my_hash



Obscurité au-delà du crépuscule, pourpre au-delà du sang qui coule, enfoui dans le flot du temps, en ton haut nom, je jure fidélité à l'obscurité. Que les fous qui se dressent devant nous soient détruits, par le pouvoir que toi et moi possédons...

bernie38
Waldorf (le pote à Statler)

Messages : 11 419
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 18 novembre 2004 - 21 h 41 m 36 s


Le 18 novembre 2004 - 21 h 37, Erel69 a écrit :
déjà ajouter du char avec du int c'est normal ?

oui, parce que en C un char c'est un entier. Si, si, je t'assure !



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Woofy
Pour les bons tuyaux me demander

Messages : 26 210
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 18 novembre 2004 - 21 h 42 m 34 s
Oui, je le prend caractere par caractere, donc le code ascii qui est un entier.



:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


bernie38
Waldorf (le pote à Statler)

Messages : 11 419
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 18 novembre 2004 - 21 h 44 m 51 s
dans make_list_path tu fais :


head[i] = ll_create();
head[i] = 0;

du coup head[i] = ll_create(); est écrasé...



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


bernie38
Waldorf (le pote à Statler)

Messages : 11 419
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 18 novembre 2004 - 21 h 46 m 37 s


Le 18 novembre 2004 - 21 h 42, Woofy a écrit :
Oui, je le prend caractere par caractere, donc le code ascii qui est un entier.

fais gaffe quand même aux débordement qui pourraient être dus aux négatifs. Parfois, vaut mieux utiliser des unsigned...



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Woofy
Pour les bons tuyaux me demander

Messages : 26 210
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 18 novembre 2004 - 21 h 46 m 56 s
Heu... oui mais non, y a le for avant.
donc quand on aura head[i] = 0, i ne sera pas egal a head[i] = ll_create.

Mais je vais l'enlever pour voir, il n'est pas indispensable.



:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


bernie38
Waldorf (le pote à Statler)

Messages : 11 419
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 18 novembre 2004 - 21 h 50 m 31 s


Le 18 novembre 2004 - 21 h 46, Woofy a écrit :
Heu... oui mais non, y a le for avant.
donc quand on aura head[i] = 0, i ne sera pas egal a head[i] = ll_create.

Mais je vais l'enlever pour voir, il n'est pas indispensable.

j'avais pas vu, d'où l'intérêt de toujours encadrer les if, for, while et consorts par des {} même pour une seule instruction.

EDIT : et ce qui n'est pas indispensable est inutile, donc est néfaste et encombre... Le C c'est déjà bien assez touffu comme ça !


Message édité 1 fois, la dernière par bernie38 le 18 novembre 2004 - 21 h 52.

La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Woofy
Pour les bons tuyaux me demander

Messages : 26 210
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 18 novembre 2004 - 21 h 51 m 56 s
ouaip, sauf quand tu est limite a 25 lignes (et je depasse largement)



:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


bernie38
Waldorf (le pote à Statler)

Messages : 11 419
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 18 novembre 2004 - 21 h 55 m 51 s


Le 18 novembre 2004 - 21 h 51, Woofy a écrit :
ouaip, sauf quand tu est limite a 25 lignes (et je depasse largement)

pourquoi 25 lignes ? une limitation du prof ? alors explique lui que les {et } ne comptent pas, et pourtant sont d'une importance terrible. J'ai vu dans un prog des trucs comme ça, et une personne qui devait faire de la maintenance a voulu rajouter une instruction (un delete sql) au if, a pas vu qu'il y avait pas de {}, du coup le prog a gentiment supprimé un tas de lignes de la base de données à la 1ère éxécution (en test, heureusement, mais ça aurait pu passer inaperçu dans autre chose qu'un delete et être tout aussi grave)



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Woofy
Pour les bons tuyaux me demander

Messages : 26 210
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 18 novembre 2004 - 22 h 12 m 15 s
Ben c'est la norme qui est fait comme ca, j'y peut rien moi. Beaucoup on essaye, mais personne n'y est arrive.

Si la fonction fait plus de 25 lignes, alors il faut la decouper en plusieurs fonction. Si c'est pas possible, alors elle est mal faite et doit etre repensee.

Bon j'ai laisse tombe et tout repris depuis le debut.



:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


iraysyvalo
-

Messages : 9 647
Inscrit le 19/11/02
Ville : Lyon
Non connecté
  Posté le 18 novembre 2004 - 22 h 36 m 51 s

Ben tu appelles a la rescousse aussi 12h avant la fin :roll:

T'as pas un ftp free ou tu peux mettre le tarball ??




Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.


Woofy
Pour les bons tuyaux me demander

Messages : 26 210
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 18 novembre 2004 - 23 h 01 m 31 s
Heu... pas le temps, la j'ai tout repris, vitesse grand V.

Pour l'instant, j'ai une structure qui marche bien, le tableau de pointeur sur fonction marche, le prompt marche, exit marche, s'il ne trouve pas de built in il lance un fork avec un execve, ca marche (mon, iol me lance une fonction au pif pour l'instant, j'ai pas encore fait mon tableau de liste chainnee).
Si j'appel a la rescousse, c'est aussi un peu bernie qui m'a pousse, j'essaie de faire sans aide ce qu'on me demande.

bon, mon code jusqu'a present :


mysh.c :



/*
** mysh.c for minishell in /u/ept3s/nicola_f/rendu/c/minishell/shell
**
** Made by florian nicolais
** Login <nicola_f@epita.fr>
**
** Started on Thu Nov 18 21:55:48 2004 florian nicolais
** Last update Thu Nov 18 22:33:36 2004 florian nicolais
*/

#include "my.h"
#include <stdlib.h>

char *my_read();
int exec_com(int ac, char **av);

int my_tablen(char **av)
{
int count;

count = 0;
while (av[count])
count++;
return (count);
}

int main()
{
char *s;
char **av;
int ac;

while (1)
{
my_putstr("Prompt -=>");
s = my_read();
if (s)
{
av = my_str_to_wordtab(s);
ac = my_tablen(av);
if (my_strcmp(s, "exit") == 0)
break;
else
exec_com(ac, av);
}
free(s);
}
return (0);
}



my_read.c :



/*
** my_read.c for minishell in /u/ept3s/nicola_f/rendu/c/minishell/shell
**
** Made by florian nicolais
** Login <nicola_f@epita.fr>
**
** Started on Thu Nov 18 21:56:47 2004 florian nicolais
** Last update Thu Nov 18 22:08:53 2004 florian nicolais
*/

#include <unistd.h>
#include <stdlib.h>

char *my_read()
{
int i;
int lenread;
char bufread[255];
char *bufres;

i = 0;
bufres = malloc(sizeof(*bufres) * 256);
lenread = read(0, &bufread, 255);
while (i < lenread && bufread[i] != '\n')
{
bufres[i] = bufread[i];
i++;
}
bufres[i] = '\0';
if (lenread == 1)
return (NULL);
return (bufres);
}


exec_com.c :



/*
** exec_com.c for minishell in /u/ept3s/nicola_f/rendu/c/minishell/shell
**
** Made by florian nicolais
** Login <nicola_f@epita.fr>
**
** Started on Thu Nov 18 22:24:24 2004 florian nicolais
** Last update Thu Nov 18 22:48:57 2004 florian nicolais
*/

#include "my.h"
#include <unistd.h>
#include <sys/wait.h>

struct s_com
{
char *com;
int (*f)();
};

struct s_com tab_com[]=
{
{0,0}
};

extern char **environ;

int exec_com(int ac, char **av)
{
int i;

i = 0;
while (tab_com[i].com != 0)
{
if (my_strcmp(av[0], tab_com[i].com) == 0)
{
tab_com[i].f(ac, av);
break;
}
i++;
}
if (tab_com[i].com == 0)
{
if (!fork())
{
execve("/bin/df", av, environ);
exit (0);
}
else
wait(0);
}
return (0);
}



Voila, ca compile sans Warning et ca marche.
Prochaines etapes : passer environ dans une liste chainee, et faire la fonction pour passer la liste chainee en tableau de char.



:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


iraysyvalo
-

Messages : 9 647
Inscrit le 19/11/02
Ville : Lyon
Non connecté
  Posté le 18 novembre 2004 - 23 h 05 m 33 s

C'est tout a ton honneur :)

Sauf que la, c'est trop short .. rien que le temps pour reflechir a l'architecture du mini-shell ou l'architecture que tu veux mettre en place manque .. ce qui fait qu'on a une vison tres parcellaire de ce que tu veux faire .:(




Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.


iraysyvalo
-

Messages : 9 647
Inscrit le 19/11/02
Ville : Lyon
Non connecté
  Posté le 18 novembre 2004 - 23 h 14 m 14 s

Au fait, c'est facile a faire un tgz puis ca prend pas du temps de l'envoyer au lieu de mettre plein de trace de toi sur le forum .. :P




Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.


Woofy
Pour les bons tuyaux me demander

Messages : 26 210
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 18 novembre 2004 - 23 h 56 m 56 s
Oui, mais ca aide a la remontee dans bigboard! :D

Bon, me reste lpus qu'a faire la fonction de conversion list -> tableau et je pourrais tester, si ca passe je passe a l'etape suivante.

Plus que 9h!



:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


Woofy
Pour les bons tuyaux me demander

Messages : 26 210
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 19 novembre 2004 - 00 h 46 m 34 s
Bon, la j'ai un gros segfault qui fait chier en plein dans une fonction, et je sais pas pourquoi!!!!
Le meme code qui marche pour une variable et ne marche pas pour la suivant! Je vois pas ce qui cloche!



:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


Erel69
206
(¯`·.__[T3aM.L1b3rTe©]__.·´¯)

Messages : 19 449
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 19 novembre 2004 - 01 h 43 m 59 s
Je sens la nuit blanche :D



Obscurité au-delà du crépuscule, pourpre au-delà du sang qui coule, enfoui dans le flot du temps, en ton haut nom, je jure fidélité à l'obscurité. Que les fous qui se dressent devant nous soient détruits, par le pouvoir que toi et moi possédons...

Woofy
Pour les bons tuyaux me demander

Messages : 26 210
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 19 novembre 2004 - 01 h 44 m 57 s
Ben de toute facon, si je suis pas parti a 23h42 je ne peut pas rentrer chez moi : plus de RER!


Tiens, tu t'y connais en pointeurs?

Ca fait 2h que je suis sur ma segfault!



:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


Erel69
206
(¯`·.__[T3aM.L1b3rTe©]__.·´¯)

Messages : 19 449
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 19 novembre 2004 - 01 h 48 m 25 s
Y'a un an ça aurait été sans problème, mais la il faudrait que je me mette dans le trip, et je pense plus à mon lit :dodo:

Tu devrais poser tes problèmes quelques jours avant ça serait mieux quand même :P Mais je suppose que c'est au jour le jour dans ton 'école'


Message édité 1 fois, la dernière par Erel69 le 19 novembre 2004 - 01 h 48.

Obscurité au-delà du crépuscule, pourpre au-delà du sang qui coule, enfoui dans le flot du temps, en ton haut nom, je jure fidélité à l'obscurité. Que les fous qui se dressent devant nous soient détruits, par le pouvoir que toi et moi possédons...

Precedent | 1,2,3,4 | Suivant
Page genérée en 2.0294 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL |Actualité ADSL | e-commerce | Commande Au Volant
Creative Commons
Message Boards and Forums Directory