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

  FORUM HardWare.fr
  Programmation
  C

  speed_t

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

speed_t

n°1475844
yartempion
Posté le 15-11-2006 à 14:55:48  profilanswer
 

Bonjour,
Dans mon prog je cherche a recuperer les vitesses des terminaux via la fonction cfget(i ou o)speed qui renvoie un type speed_t d'une structure termios.
Cete fonction doit renvoyer un code du genre B0 ou B1200 ou B quelque chose qui est une vitesse de sortie ou d'entree du terminal.
Je cherche a afficher ce code sur stdout, j'ai essaye avec printf("%d" ),const speed_t vitesse) et plein d'autres rien y fait.
Evidement j'ai declare une var vitesse de type speed_t, une var terminal de struct termios et j'ai recupere.
Comment doit on s'y prendre un petit bout de code serai le bienvenu.
Merci.

mood
Publicité
Posté le 15-11-2006 à 14:55:48  profilanswer
 

n°1476046
matafan
Posté le 15-11-2006 à 20:49:16  profilanswer
 

Donne ton printf() et ce qu'il affiche pour voir ?

Message cité 1 fois
Message édité par matafan le 15-11-2006 à 20:49:29
n°1476542
yartempion
Posté le 16-11-2006 à 15:37:01  profilanswer
 

matafan a écrit :

Donne ton printf() et ce qu'il affiche pour voir ?


 
Bonjour,
Voici la potion de code:

Code :
  1. printf("\nRecuperation de la vitesse du terminal" );
  2. cgetattr(STDIN_FILENO,&terminal_out);
  3. speed_o=cfgetospeed(&terminal_out);
  4. printf("\nvitesse du terminal en out %d",speed_o);
  5. struct termios terminal_out;
  6. speed_t speed_o,speed_i;


le printf donne 16 avec %d et 10 avec %X

n°1476774
matafan
Posté le 16-11-2006 à 19:05:26  profilanswer
 

Donc il n'y a pas de probleme... Chez moi 0x10 correspond a B19200. Les Bxxx, c'est des #define. cfgetospeed renvoie la valeur d'un de ces #defines.
 
Et puis aussi, met les \n en fin de chaine plutot qu'en debut, ca permettra de flusher la sortie correctement.

n°1476952
yartempion
Posté le 17-11-2006 à 08:24:19  profilanswer
 

Bonjour,
Ou trouves tu les #defines?

n°1476954
yartempion
Posté le 17-11-2006 à 08:33:13  profilanswer
 

yartempion a écrit :

Bonjour,
Ou trouves tu les #defines?


J'ai un autre pb voici un bout de code,

Code :
  1. SOUS_OPTION_NEGOCIEE(mess_nego11,socket11)
  2. {
  3. int i;
  4. unsigned char *terminal,*mess_nego13;
  5. struct termios terminal_out;
  6. speed_t speed_o,speed_i;
  7. mess_nego13=mess_nego11;
  8. printf("\nVerification de la sous option a negocier valeur de la SB %d",*(mess_nego13+2));
  9. switch (*(mess_nego13+2))
  10. {
  11. case 24:{
  12. /*Recuperation d'info sur le treminal*/
  13. printf("\nSous option Type de terminal actuel: %s",terminal=getenv("TERM" ));
  14. printf("\nsequence recue taille du message %d %d %d %d",*(mess_nego13+0),*(mess_nego13+1),*(mess_nego13+2),*(mess_nego13+3));
  15. printf("\navant for" );
  16. for(i=0;i<5;i++)
  17. printf("i=%d ",i);
  18. printf("\nfin du for" );
  19. }
  20. break;
  21. case 32:{
  22. printf("\nSous option Terminal speed" );
  23. printf("\nRecuperation de la vitesse du terminal" );
  24. tcgetattr(STDIN_FILENO,&terminal_out);
  25. speed_o=cfgetospeed(&terminal_out);
  26. printf("\vitesse du terminal en out %d",speed_o);
  27. }
  28. break;
  29. case 33: printf("\nSous option LFLOW" );
  30. break;
  31. case 36: printf("\nSous option environnement" );
  32. break;
  33. default: printf("\nSous option non negociee" );
  34. break;
  35. }
  36. }


dans le case 24 j'ai rajoute un for depuis impossible de breaker le switch pour en sortir ou l'erreur.


Message édité par yartempion le 17-11-2006 à 08:36:23
n°1476965
yartempion
Posté le 17-11-2006 à 08:57:20  profilanswer
 

Pour  le Pb dans le switch case 24 tout est Ok.
Par contre je suis toujours interesse pour les define.

n°1476973
Emmanuel D​elahaye
C is a sharp tool
Posté le 17-11-2006 à 09:07:23  profilanswer
 

yartempion a écrit :

Bonjour,
Ou trouves tu les #defines?


Euh, genre dans la doc...
 
http://man.he.net/man2/tcgetattr
http://man.developpez.com/man3/tcgetattr.3.php


Message édité par Emmanuel Delahaye le 17-11-2006 à 09:10:50

---------------
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°1477203
yartempion
Posté le 17-11-2006 à 11:44:25  profilanswer
 

Pourriez vous me donner la correspondance entre Bxx et le code renvoye.
B0=
B50=
B75=
B
 
 
 
B19200=16
etc,etc
Merci.

n°1477222
Elmoricq
Modérateur
Posté le 17-11-2006 à 11:58:49  profilanswer
 

Ben affiche-les, ce sont des constantes POSIX.1 définies dans termios.h [:mlc]
 
Emmanuel t'a donné les liens en plus, donc t'as pas dû les lire.
 
Et comme je suis trop con gentil, regarde (chez moi) :
 

$ cat test.c                        
#include <stdio.h>
#include <termios.h>
 
int main(void)
{
   printf("%d\n", B9600);
   
   return 0;
}
$ gcc -pedantic -W -Wall -O2 test.c
$ a.out
13
$  


 
 
edit : ceci dit, puisque tu as les constantes de définies, tu ne devrais pas avoir à te préoccuper de leur valeur...

Message cité 1 fois
Message édité par Elmoricq le 17-11-2006 à 12:02:59
mood
Publicité
Posté le 17-11-2006 à 11:58:49  profilanswer
 

n°1477225
Emmanuel D​elahaye
C is a sharp tool
Posté le 17-11-2006 à 12:01:28  profilanswer
 

yartempion a écrit :

Pourriez vous me donner la correspondance entre Bxx et le code renvoye.
B0=
B50=
B75=
B
 
B19200=16
etc,etc


Ca ne sert à rien. Tu fais un switch-case et c'est reglé (le nom des constantes est suffisamment explicite, non ?). Tu n'a pas besoin de connaitre les valeurs exactes. Il faut apprendre à travailler en abstraction...

Code :
  1. switch (champ_debit)
  2.    {
  3.    case B50:
  4.       bauds = 50;
  5.       break;

etc.


---------------
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°1477227
Emmanuel D​elahaye
C is a sharp tool
Posté le 17-11-2006 à 12:02:38  profilanswer
 

Elmoricq a écrit :


ceci dit, puisque tu as les constantes de définies, tu ne devrais pas avoir à te préoccuper de leur valeur...


+1


---------------
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°1477326
Elmoricq
Modérateur
Posté le 17-11-2006 à 14:22:42  profilanswer
 

(je précise juste pour appuyer le fait qu'il faille utiliser les constantes, que sur mon serveur, B19200 vaut 14 [:petrus75] )

n°1483339
yartempion
Posté le 28-11-2006 à 20:05:27  profilanswer
 

Bonjour,
Si je veux communiquer la vitesse de mon terminal a un distant sur un seul octet est ce que je lui envoie la valeur retour de cfgetspeed().

n°1483343
Emmanuel D​elahaye
C is a sharp tool
Posté le 28-11-2006 à 20:17:24  profilanswer
 

yartempion a écrit :

Bonjour,
Si je veux communiquer la vitesse de mon terminal a un distant sur un seul octet est ce que je lui envoie la valeur retour de cfgetspeed().


Non. Il faut définir une convention 'réseau' indépendante de toute implémentation


enum
{
   ...,
   NET_BDS_9600 = 4,
   ...,
};


et faire la conversion dans les deux sens :

 
  • En émission : système -> reseau
  • En reception : réseau  -> système


Par exemple :

 

Sys A : emission


switch (sys_bds)
{
case B9600:
   net_bds = NET_BDS_9600;
   break;
etc.

 

Sys B : récéption


switch (net_bds)
{
case NET_BDS_9600:
   sys_bds = B9600;
   break;
etc.

 

C'est la seule façon d'être indépendant.
 
Mais quand est-ce qu'on va se décider à enseigner la conception en informatique...


Message édité par Emmanuel Delahaye le 28-11-2006 à 20:22:17

---------------
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°1483461
yartempion
Posté le 29-11-2006 à 08:00:29  profilanswer
 

Bonjour,
Dans la rfc 1079 concernant la transmition des vitess du terminal comment est transmise la valeur de la vitesse du terminal.
Mon probleme c'est que j'ai ecris un client telnet qui se connecte a certain equipement mais pas a d'autre.
Par exemple j'arrive a ouvrir une connection sur un routeur cisco, nortel etc  mais pas sur un serveur unix ou certain autres routeurs.
Ils sont en attente de reponse d'options a negocier.

n°1483534
Emmanuel D​elahaye
C is a sharp tool
Posté le 29-11-2006 à 10:15:04  profilanswer
 

yartempion a écrit :

Dans la rfc 1079 concernant la transmition des vitess du terminal comment est transmise la valeur de la vitesse du terminal.
Mon probleme c'est que j'ai ecris un client telnet qui se connecte a certain equipement mais pas a d'autre.
Par exemple j'arrive a ouvrir une connection sur un routeur cisco, nortel etc  mais pas sur un serveur unix ou certain autres routeurs.
Ils sont en attente de reponse d'options a negocier.


La RFC 1079 concerne l'échange d'information entre terminaux Telnet sous X/Window (Motif, X11 etc.). Tu te sens concerné ?

 

Je vais essayer de comprendre ce que tu veux faire.

 
  • Tu veux écrire un client Telnet. OK
  • Celui-ci se connecte à certains équipement et pas à d'autres. OK


Ton problème est donc de savoir pourquoi.

 

Telnet est un protocole qui régit l'échange d'informations entre 2 équipements. Un serveur et un client. Il est spécifié par la RFC 854.

 

http://www.ietf.org/rfc/rfc0854.txt
 
Pour que ton client ait la moindre chance de se connecter à un serveur Telnet quelconque, il doit absolument supporter l'ensemble de ces dispositions. Si ce n'est pas le cas, ça ne fonctionnera pas dans tous les cas (ca peut fonctionner sur certains serveurs simplifiés).

 

C'est probablement pour ça que la connexion ne s'établit pas sur certains serveurs.

 

Il ne reste plus qu'à implémenter le protocole coté client.


Message édité par Emmanuel Delahaye le 29-11-2006 à 10:17:19

---------------
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°1484038
yartempion
Posté le 30-11-2006 à 09:38:09  profilanswer
 

Bonjour,
Ca y'est j'ai compris comment ca se passe.
On envoie reellement la vitesse du terminal sous forme de caracteres ascii tout simplement a charge au distant de l'interpreter.
Exp: IAC SB TERMINAL-SPEED IS "1200,1200" IAC SE
on ecrit sur la socket sous forme de caractere ascii avec le caracter ascii (,) virgule comme separateur entre la vitesse Tx et Rx mais doit on transmetre les double cotes ou pas
 

n°1484229
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-11-2006 à 12:08:20  profilanswer
 

yartempion a écrit :

Ca y'est j'ai compris comment ca se passe.
On envoie reellement la vitesse du terminal sous forme de caracteres ascii tout simplement a charge au distant de l'interpreter.


Ben oui, par exemple.

Citation :

Il faut définir une convention 'réseau' indépendante de toute implémentation


 


---------------
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/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  speed_t

 

Sujets relatifs
[Batch,VBS] Infos carte reseau (speed, duplex)[installer] ADSL USB(speed touch) sous MDK 8
Plus de sujets relatifs à : speed_t


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)