Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1058 connectés 

  FORUM HardWare.fr
  Programmation
  C

  imposer une fin de chaine par une touche particulière

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

imposer une fin de chaine par une touche particulière

n°952104
canto13
Posté le 13-01-2005 à 00:48:31  profilanswer
 

J'aimerai savoir comment faire pour imposer une fin de chaine autrement que par la touche entrée ( caractère fin de ligne \n ). En effet, je voudrais que mon programme lise sur l'entrée standard des caractères jusqu'à ce que je tape la touche '>' et non la touche entrée. Merci pour votre aide.

mood
Publicité
Posté le 13-01-2005 à 00:48:31  profilanswer
 

n°952107
Emmanuel D​elahaye
C is a sharp tool
Posté le 13-01-2005 à 01:01:19  profilanswer
 

canto13 a écrit :

J'aimerai savoir comment faire pour imposer une fin de chaine autrement que par la touche entrée ( caractère fin de ligne \n ). En effet, je voudrais que mon programme lise sur l'entrée standard des caractères jusqu'à ce que je tape la touche '>' et non la touche entrée. Merci pour votre aide.


C'est pas possible.  
 
Si tu y tiens, tu ne doit pas utiliser l'entrée standard (stdin), mais l'entrée clavier directe. C'est pas possible en C standard, mains certains compilateurs fournissent les extensions nécessaires (conio, ncurses...).  
 
Machine ? OS ?


Message édité par Emmanuel Delahaye le 13-01-2005 à 01:02:11

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°952109
canto13
Posté le 13-01-2005 à 01:09:59  profilanswer
 

ah ok je savais pas merci.  
En fait je bosse sur linux. Je dois faire un mini-shell qui doit faire des redirections comme on en fait avec les opérateurs > et < . Et j'avais dans l'idée de délimiter avec le caractère '>' une chaine de caractère qui est en fait la commande qui doit etre redirigée en sortie sur un fichier. Je sais pas si tu vois ce que je veux dire, mais si t'a capté et que tu as une meilleure idée, ca serait vachement sympa de me la communiquer. Merci d'avance.

n°952111
Taz
bisounours-codeur
Posté le 13-01-2005 à 01:15:01  profilanswer
 

quel rapport avec la saisie ?
 
tu lis une ligne normalement, et si y a un >, tu coupes en 2, à gauche la commande, à droite le fichier

n°952112
canto13
Posté le 13-01-2005 à 01:17:15  profilanswer
 

Et comment tu fais ca stp?

n°952113
Taz
bisounours-codeur
Posté le 13-01-2005 à 01:18:59  profilanswer
 

avec les doigts.
 
tu prends ta chaine s
 
p = strchr(s, '>');
 
if(p) {
// redirection
*p = '\0';
filename = p+1;
}
 
et voilà, s c'est la commande, filename le fichier :o

n°952114
canto13
Posté le 13-01-2005 à 01:26:10  profilanswer
 

En fait, pour mon programme sur les redirections, j'ai une fonction main qui prend 3 arguments. le premier c'est le nom du programme. Le deuxieme c'est la commande à rediriger. Et le 3e c'est le fichier qui recoit le résultat de la commande. En fait, j'exécute la commande à rediriger avec system dont l'argument qu'il recoit est le deuxieme. Le problème, c'est que cette commande il la recoit sous la forme d'une chaine de caractères et je suis obligé de mettre des guillemets pour la saisir correctement. T'aurai pas une idée pour éviter de mettre les guillemets et mettre le '>' ?

n°952118
Taz
bisounours-codeur
Posté le 13-01-2005 à 02:21:18  profilanswer
 

"j'exécute la commande à rediriger avec system" ... genre tu fais presque appel à un autre shell dans ton shell ?
 
 
sinon je comprends rien à ton histoire de guillemet. Tout va bien sans

n°952121
matafan
Posté le 13-01-2005 à 03:03:19  profilanswer
 

Faut pas faire system(). Faut faire execve().

n°952222
canto13
Posté le 13-01-2005 à 11:17:34  profilanswer
 

Taz a écrit :

"j'exécute la commande à rediriger avec system" ... genre tu fais presque appel à un autre shell dans ton shell ?
 
 
sinon je comprends rien à ton histoire de guillemet. Tout va bien sans


 
En fait, mon devoir consiste à développer un mini-shell qui a entre-autres, comme particularité de savoir gérer les redirections. En gros faut que je fasse un programme qui permette d'exécuter la commande
" ls -l fichier1 > fichier 2 " par exemple. Pour cela, j'ai redirigé la sortie standard sur "ls -l fichier1" et l'entrée standard sur fichier2. Cependant, pour la commande avant le > , je dois faire un appel à system avec en argument la chaine de caractère "ls -l fichier" que je suis obligé de mettre entre guillemets quand je le tape. En fait je cherche un moyen pour éviter de mettre les guillemets et de faire comprendre au programme d'exécuter la commande avant le caractère > . En fait, ce que j'essai de faire, c'est de faire un programme qui réalise la commande : " commande > fichier " le plus fidèlement possible. Si vous avez des idées, merci beaucoup de me les faire partager. Merci.

mood
Publicité
Posté le 13-01-2005 à 11:17:34  profilanswer
 

n°952278
Taz
bisounours-codeur
Posté le 13-01-2005 à 12:12:02  profilanswer
 

non, n'utilise pas system :o
 
tu dois faire un fork + exec en redirigeant comme il faut les descripteurs de fichiers après le fork.

n°952286
canto13
Posté le 13-01-2005 à 12:29:54  profilanswer
 

Taz a écrit :

non, n'utilise pas system :o
 
tu dois faire un fork + exec en redirigeant comme il faut les descripteurs de fichiers après le fork.


 
Ok, mais avec exec, je suis obligé de donner en arguments les différents paramètres de la commande dans mon programme et puis il faut que je donne le bon fichier à charger. Ainsi, si je veux faire une commande ls, il faudra que je charge le fichier /bin/ls mais si je veux faire un wc il faudra que je charge /usr/bin/wc . Et donc à chaque fois il faudra que change le fichier à charger en argument dans mon programme en fonction de la commande à réaliser. C'est pour ca que j'ai fait system. A moins que tu puisse charger un fichier ou il y a toutes les commandes... Mais alors, il faudra quand meme que je tape:
argv[1]= cmd;
argv[2]= "-l"; // par exemple
argv[3]= "fichier1";
Et comment faire pour introduire le caractère > ?

n°952288
canto13
Posté le 13-01-2005 à 12:33:40  profilanswer
 

Bon en gros ma question devient maintenant:
comment faire un programme qui effectue la commande  
"commande > fichier "  ??
Fork? Exec? System?
Merci de détailler votre idée. Je suis pas très fort en programmation comme vous vous en doutez.
Merci à tous pour les réponses.

n°952299
Taz
bisounours-codeur
Posté le 13-01-2005 à 12:59:01  profilanswer
 

mais "> fichier" ne fais pas partie de la commande bordel. Ton problème, c'est que tu comprends pas ce que fais un shell...

n°952304
canto13
Posté le 13-01-2005 à 13:06:12  profilanswer
 

Ok, alors puisque je comprend rien, explique moi ce que tu ferais toi?

n°952312
Taz
bisounours-codeur
Posté le 13-01-2005 à 13:14:01  profilanswer
 

tu lis une ligne
tu coupes : le chemin du programme, ses arguments, la redirection si nécessaire et le fichier
tu fork
tu positionnes les descripteurs de fichiers comme demandé par la redirection
tu fais un exec du programme avec ses arguments

n°952322
canto13
Posté le 13-01-2005 à 13:41:26  profilanswer
 

Excuse moi mais je suis vraiment mauvais. Tu peux me donner un petit exemple s'il te plait? Merci.

n°952337
Taz
bisounours-codeur
Posté le 13-01-2005 à 14:10:16  profilanswer
 

les 3 premiers points, tu dois pouvoir les faire tout seul déjà.

n°952355
canto13
Posté le 13-01-2005 à 14:20:18  profilanswer
 

Ben justement, c'est les 2 derniers que je pense pouvoir faire.  
Sinon, je lis ma ligne avec scanf par exemple et je fais strchr c'est ca?

n°952383
Taz
bisounours-codeur
Posté le 13-01-2005 à 14:44:46  profilanswer
 

non, tu lis ta ligne avec fgets
après oui, tu tronçonnes avec strchr.

n°952386
canto13
Posté le 13-01-2005 à 14:48:08  profilanswer
 

j'ai jamais utilisé strchr. Comment je fais pour tronconner par exemple " ls -l fichier1 > fichier2 " ?
Et une fois que j'ai tronconné, je fais quoi? J'ai pas compris pourquoi je dois créer un processus fils ici.

n°952420
Taz
bisounours-codeur
Posté le 13-01-2005 à 15:26:10  profilanswer
 

allez, arrête de payer notre tête. Tu sais même pas manipuler une chaîne de caractères, alors raconte pas que tu sais faire un fork, rediriger les descripteur et terminer par un exec.
 
man strchr
man fork
man dup
 

n°952445
canto13
Posté le 13-01-2005 à 15:46:50  profilanswer
 

Taz a écrit :

allez, arrête de payer notre tête. Tu sais même pas manipuler une chaîne de caractères, alors raconte pas que tu sais faire un fork, rediriger les descripteur et terminer par un exec.
 
man strchr
man fork
man dup


 
attends mec, j'ai jamais dit que je savais parfaitement le faire et que j'étais un dieu de la programmation. Maintenant si ca te fait chier de me répondre parce que j'ai plus de difficultés à capter que toi, et bien tu te dispenses de me répondre tout simplement. Tu penses bien que j'ai autre chose à foutre que me payer ta gueule en te parlant de fork, strch ou dup quand meme! Faut pas déconner non plus.
La programmation c'est pas donné à tout le monde. Alors soit un peu plus indulgent avec les moins balaises stp, merci.

n°952613
Taz
bisounours-codeur
Posté le 13-01-2005 à 19:34:49  profilanswer
 

savoir manipuler une chaine de caractères, c'est une aptitude fondamentale. Si tu ne l'as pas, ne va pas plus loin.

n°952761
canto13
Posté le 13-01-2005 à 23:51:06  profilanswer
 

Bon ok, soit. Sinon pour le exec, c'est quel fichier que je charge stp?

n°952763
Taz
bisounours-codeur
Posté le 13-01-2005 à 23:52:29  profilanswer
 

...

n°952777
canto13
Posté le 14-01-2005 à 00:14:34  profilanswer
 

Allez, fait pas le rat. Crache le morceau va!

n°952800
Taz
bisounours-codeur
Posté le 14-01-2005 à 00:37:22  profilanswer
 

c'est ta question qui ne veut rien dire.

n°952805
canto13
Posté le 14-01-2005 à 00:41:21  profilanswer
 

ah bon, parce que dans les arguments de exec, t'en a pas un qui est la référence d'un fichier à charger???

n°952807
Taz
bisounours-codeur
Posté le 14-01-2005 à 00:44:09  profilanswer
 

quel fichier ?

n°952808
canto13
Posté le 14-01-2005 à 00:45:21  profilanswer
 

Finalement, c'est peut-etre toi qui connait pas bien tes cours de programmation....

n°952809
masklinn
í dag viðrar vel til loftárása
Posté le 14-01-2005 à 00:47:24  profilanswer
 

canto13 a écrit :

ah bon, parce que dans les arguments de exec, t'en a pas un qui est la référence d'un fichier à charger???


 [:petrus75]  
 
tu l'as regardée au moins la doc d'exec*?
 
non parce que là Taz t'a tout donné (et même plus), t'as plus qu'à aller te faire les docs [:petrus75]  
 
(d'ailleurs taz je te trouve bien urbain ces temps ci)

canto13 a écrit :

Finalement, c'est peut-etre toi qui connait pas bien tes cours de programmation....


 [:thierry3]


Message édité par masklinn le 14-01-2005 à 00:48:06

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°952810
canto13
Posté le 14-01-2005 à 00:54:04  profilanswer
 

Attends, t'a bien une référence de fichier à donner dans les arguments de exec? Ou sinon mon bouquin est périmé...

n°952811
Taz
bisounours-codeur
Posté le 14-01-2005 à 00:59:10  profilanswer
 

tu te rends compte que sur un système *n*x, tout est fichier ? alors quand tu dis 'fichier', y a pas plus vague. Tu parles de quoi ?

n°952812
Taz
bisounours-codeur
Posté le 14-01-2005 à 01:00:41  profilanswer
 

citons Emmanuel, citant Camus

Citation :

Mal nommer les choses c'est ajouter du malheur au monde.

n°952816
canto13
Posté le 14-01-2005 à 01:08:11  profilanswer
 

Taz a écrit :

tu te rends compte que sur un système *n*x, tout est fichier ? alors quand tu dis 'fichier', y a pas plus vague. Tu parles de quoi ?


 
Je parles de rien, je fais que répéter ce qu'ya marqué sur mon bouquin de programmation où est utilisé le mot "fichier"...  
Par exemple, pour execl("/bin/ls","ls","-l","/",NULL), tu charges le fichier de référence /bin/ls pour exécuter la commande ls -l / avec la fonction main du programme correspondant.
Toi comprendre ce que moi vouloir dire???

n°952817
Taz
bisounours-codeur
Posté le 14-01-2005 à 01:09:38  profilanswer
 

Maintenant oui : tu n'as pas lu le 'man exec', c'est certain.

n°952822
canto13
Posté le 14-01-2005 à 01:11:39  profilanswer
 

Je suis pas sur unix la, alors dis moi ce qu'il dit...

n°952824
masklinn
í dag viðrar vel til loftárása
Posté le 14-01-2005 à 01:13:13  profilanswer
 

canto13 a écrit :

Je suis pas sur unix la, alors dis moi ce qu'il dit...


 [:google]  [:google]  [:google]  
 [:google]  http://rulzofpunk.free.fr/smileys/google_fou.gif [:google]  
 [:google]  [:google]  [:google]  
 
 [:regardelafaq]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°952831
canto13
Posté le 14-01-2005 à 01:19:20  profilanswer
 

Non non non, pas de google, dis moi ce qu'elle fait cette fameuse exec...

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
  FORUM HardWare.fr
  Programmation
  C

  imposer une fin de chaine par une touche particulière

 

Sujets relatifs
concaténation de chaîne - jdk 1.5Formatage d'un caractère spécial dans une chaine
Trouver un mot dans une chaine de caracteresComment simuler l'appui sur une touche du clavier ?
obtenir une chaine de caractère avec System.in.read()chaine de caractère
gestion touche directionnelleFormat d'une chaine de caractères alphanumérique
conversion d'une chaine de caractère en un entier uniqueComment savoir si une varaibale est un nombre, une chaine ????
Plus de sujets relatifs à : imposer une fin de chaine par une touche particulière


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR