OVH Cloud OVH Cloud

Utilisation de "named pipe"

12 réponses
Avatar
Romain PETIT
Salut,

quelqu'un a-t-il déjà utilisé les "named pipe" sous WD ?
(avec les API CreateNamedPipe et consort).
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/base/named_pipes.asp

Des problèmes particuliers ?

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)

10 réponses

1 2
Avatar
Romain PETIT
Romain PETIT a pensé très fort :

quelqu'un a-t-il déjà utilisé les "named pipe" sous WD ?
(avec les API CreateNamedPipe et consort).
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/base/named_pipes.asp



Laissez tomber, à priori il suffit d'utiliser les fonctions de fichiers
externes pour écrire/lire dans un named pipe (En WD7 et en tant que
client du moins)...

exemple :
//le pipe .pipecom1 est créé par une autre application
// (VMWare dans mon cas)

eNumFic est un entier = fouvre(".pipecom1", folectureecriture)
si eNumfic<>-1 alors
fecrit("toto"+eot)
FIN
fferme(eNumFic)

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
MiF
Une classe WD5.5 qui devrait se porter facilement en 7 si besoin :
http://www.hexo7.net/windev/sharemem.zip


"Romain PETIT" a écrit dans le message de
news:
Romain PETIT a pensé très fort :

> quelqu'un a-t-il déjà utilisé les "named pipe" sous WD ?
> (avec les API CreateNamedPipe et consort).
>


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/base/named_pipes.asp

Laissez tomber, à priori il suffit d'utiliser les fonctions de fichiers
externes pour écrire/lire dans un named pipe (En WD7 et en tant que
client du moins)...

exemple :
//le pipe .pipecom1 est créé par une autre application
// (VMWare dans mon cas)

eNumFic est un entier = fouvre(".pipecom1", folectureecriture)
si eNumfic<>-1 alors
fecrit("toto"+eot)
FIN
fferme(eNumFic)

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)



Avatar
Romain PETIT
MiF avait énoncé :
Une classe WD5.5 qui devrait se porter facilement en 7 si besoin :
http://www.hexo7.net/windev/sharemem.zip



Merci mais ce n'est pas vraiment la même chose qu'un pipe...

Ma solution (fonctions fOuvre fEcrit flit..) fonctionne bien dans le
sens de l'écriture mais j'ai un blocage lorsque j'essaie de lire :

ch est une chaîne
eNumfic est un entier
sNomPipe est une chaîne = ".pipecom1"
szCh est une chaîne ASCIIZ sur 2
//j'ai essayé avec plusieurs modes différents
eNumfic = fOuvre(sNomPipe,foLectureEcriture)
szCh="1"
SI eNumfic<>-1 ALORS
TANTQUE szCh<>EOT ET szCh<>""
//j'ai essayé aussi avec la 2eme synthaxe de fLit
//j'ai essayé avec un buffer de 2048
szCh = fLit(eNumfic, 1) //blocage
// le blocage est libéré si je libère le pipe du
// coté serveur (j'arrete ma machine virtuelle VMWare)
ch += szCh
FIN
fferme(eNumfic)
FIN

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Romain PETIT avait écrit le 08/01/2004 :
quelqu'un a-t-il déjà utilisé les "named pipe" sous WD ?



Ceci-dit, si vous pouvez résoudre mon problème qui m'a incité à tenter
d'utiliser les pipes, je veux bien :
(j'ai mis une balise bruit, ça n'a pas grand chose à voir avec WD)

Configuration Windows XP pro sous un portable Dell récent (P4 1.4 GHz,
512 Mo RAM)
VMWare WS 4
Machine virtuelle QNX4.25 tournant sous Windows.

J'ai un programme sous QNX qui communique via le port série à 9600
bauds.
(qui fonctionne parfaitement sous un QNX4.25 "réel")
La VM VMWare utilise le port comm physique pour simuler le port comm
virtuel.

Ca fonctionne mais j'ai des caractères qui disparaissent (trop souvent)
au milieu des trames.
En baissant la vitesse à 4800 bauds (dans mon programme QNX et avec
l'appareil connecté, ça a l'air de fonctionner correctement mais
evidemment, je préfèrerais communiquer à 9600 bauds (je n'ai pas
forcément le choix pour ce qui est de l'autre côté du port série).
J'ai essayé de changer les buffer dans les paramètrages Windows mais
sans plus de succès (en fait le paramétrage sous windows du port comm
n'a aucune influence).

Avec VMWare, on a aussi la possibilité d'utiliser un pipe (serveur)
pour simuler le port série.
Je pensais donc pouvoir utiliser Windev pour :
- 1/ scruter le port comm sous Windows
- 2/ rediriger vers le pipe (donc vers le port comm virtuel QNX)
- 3/ scruter le pipe
- 4/ rediriger vers le port comm sous Windows
Et accessoirement tracer dans un fichier texte toutes les
communications.

Pas de problème pour les points 1/ 2/ et 4/ mais le 3/ me bloque
l'application.

Quelqu'un utilise-t-il VMWare (quelque soit l'OS guest) en communiquant
via un port série à 9600 bauds (au moins) ?

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
STASZEWSKI André
Romain PETIT wrote:
Romain PETIT avait écrit le 08/01/2004 :
quelqu'un a-t-il déjà utilisé les "named pipe" sous WD ?



Ceci-dit, si vous pouvez résoudre mon problème qui m'a incité à tenter
d'utiliser les pipes, je veux bien :
(j'ai mis une balise bruit, ça n'a pas grand chose à voir avec WD)

Configuration Windows XP pro sous un portable Dell récent (P4 1.4 GHz,
512 Mo RAM)
VMWare WS 4
Machine virtuelle QNX4.25 tournant sous Windows.

J'ai un programme sous QNX qui communique via le port série à 9600
bauds.
(qui fonctionne parfaitement sous un QNX4.25 "réel")
La VM VMWare utilise le port comm physique pour simuler le port comm
virtuel.

Ca fonctionne mais j'ai des caractères qui disparaissent (trop
souvent) au milieu des trames.
En baissant la vitesse à 4800 bauds (dans mon programme QNX et avec
l'appareil connecté, ça a l'air de fonctionner correctement mais
evidemment, je préfèrerais communiquer à 9600 bauds (je n'ai pas
forcément le choix pour ce qui est de l'autre côté du port série).
J'ai essayé de changer les buffer dans les paramètrages Windows mais
sans plus de succès (en fait le paramétrage sous windows du port comm
n'a aucune influence).

Avec VMWare, on a aussi la possibilité d'utiliser un pipe (serveur)
pour simuler le port série.
Je pensais donc pouvoir utiliser Windev pour :
- 1/ scruter le port comm sous Windows
- 2/ rediriger vers le pipe (donc vers le port comm virtuel QNX)
- 3/ scruter le pipe
- 4/ rediriger vers le port comm sous Windows
Et accessoirement tracer dans un fichier texte toutes les
communications.

Pas de problème pour les points 1/ 2/ et 4/ mais le 3/ me bloque
l'application.

Quelqu'un utilise-t-il VMWare (quelque soit l'OS guest) en
communiquant via un port série à 9600 bauds (au moins) ?

A+



Quelle est la longueur du câble relié à ton port série ?
--
Cordialement,
André STASZEWSKI
www.PlaneteDev.fr.st
Avatar
Romain PETIT
STASZEWSKI André avait écrit le 08/01/2004 :

Quelle est la longueur du câble relié à ton port série ?



3m.
Le câble n'est pas en cause, tout se passe bien avec une machine QNX
"réelle" (sans VMWare).

Merci quand même.

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Il se trouve que Romain PETIT a formulé :

Le câble n'est pas en cause, tout se passe bien avec une machine QNX "réelle"
(sans VMWare).



Pour info, j'ai trouvé ma solution grâce à David Gibbs sur le forum qnx
adéquat.
Il faut activer le tampon FIFO du côté QNX (16550 uart)
Dans mon fichier /etc/config/sysinit.$NODE

/bin/Dev.ser -t8 (+autres parametres...)

Donc pas besoin de bidouille avec un pipe...

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
MiF
> J'ai un programme sous QNX qui communique via le port série à 9600
bauds.
(qui fonctionne parfaitement sous un QNX4.25 "réel")
La VM VMWare utilise le port comm physique pour simuler le port comm
virtuel.

Ca fonctionne mais j'ai des caractères qui disparaissent (trop souvent)
au milieu des trames.
En baissant la vitesse à 4800 bauds (dans mon programme QNX et avec
l'appareil connecté, ça a l'air de fonctionner correctement mais
evidemment, je préfèrerais communiquer à 9600 bauds (je n'ai pas
forcément le choix pour ce qui est de l'autre côté du port série).
J'ai essayé de changer les buffer dans les paramètrages Windows mais
sans plus de succès (en fait le paramétrage sous windows du port comm
n'a aucune influence).




Si j'ai bien compris, les applications WD et QNX tournent sur la même
machine, mais sous 2 OS distincts grâce à VMWare ?
Si c'est le cas, pourquoi ne pas essayer de faire la même chose avec le port
réseau ?
J'ai déjà fait des tests avec VMWare, et j'avais vu qu'il était possible
d'assigner deux adresses IP différentes à la même carte réseau, selon chaque
OS. Je suppose qu'une communication à base de sockets devrait fonctionner
dans ton cas, et ce serait certainement plus fiable qu'un port série.

Michel Fages
Avatar
STASZEWSKI André
MiF wrote:
J'ai un programme sous QNX qui communique via le port série à 9600
bauds.
(qui fonctionne parfaitement sous un QNX4.25 "réel")
La VM VMWare utilise le port comm physique pour simuler le port comm
virtuel.

Ca fonctionne mais j'ai des caractères qui disparaissent (trop
souvent) au milieu des trames.
En baissant la vitesse à 4800 bauds (dans mon programme QNX et avec
l'appareil connecté, ça a l'air de fonctionner correctement mais
evidemment, je préfèrerais communiquer à 9600 bauds (je n'ai pas
forcément le choix pour ce qui est de l'autre côté du port série).
J'ai essayé de changer les buffer dans les paramètrages Windows mais
sans plus de succès (en fait le paramétrage sous windows du port comm
n'a aucune influence).




Si j'ai bien compris, les applications WD et QNX tournent sur la même
machine, mais sous 2 OS distincts grâce à VMWare ?
Si c'est le cas, pourquoi ne pas essayer de faire la même chose avec
le port réseau ?
J'ai déjà fait des tests avec VMWare, et j'avais vu qu'il était
possible d'assigner deux adresses IP différentes à la même carte
réseau, selon chaque OS. Je suppose qu'une communication à base de
sockets devrait fonctionner dans ton cas, et ce serait certainement
plus fiable qu'un port série.

Michel Fages



Tien ? Michel Fages du club Win's ??
--
Cordialement,
André STASZEWSKI
www.PlaneteDev.fr.st
Avatar
Romain PETIT
MiF a pensé très fort :

Si j'ai bien compris, les applications WD et QNX tournent sur la même
machine, mais sous 2 OS distincts grâce à VMWare ?



Oui et non :-)
En fait il s'agit d'un PC portable pour mes déplacements.
J'ai WD et tout le toutim sous Windows et la plupart des connexions
d'automates que j'effectue sont réalisées sous QNX (un Unix-like) dans
un petit système embarqué (accesible via réseau et qui communique avec
l'automate par une liaison série)
J'ai besoin principalement du compilateur C (et parfois du débogueur
;-) sous QNX pour mettre à jour un programme de connexion par exemple.
Du coup, pour éviter d'avoir 2 partitions et un multiboot, j'ai préféré
la solution VMWare sous Windows :
- j'ai mon environnement Windows habituel pour ma bureautique, ma
documentation, Windev et tout le toutim,
- j'ai également, sous VMWare, ma machine de développement QNX.
(évidemmment les performances sont fortement dégradées mais je n'en ai
pas véritablement besoin)

Si c'est le cas, pourquoi ne pas essayer de faire la même chose avec le port
réseau ?
J'ai déjà fait des tests avec VMWare, et j'avais vu qu'il était possible
d'assigner deux adresses IP différentes à la même carte réseau, selon chaque
OS.



Oui, oui, les 2 machines (la réelle et la virtuelle QNX) ont toutes 2
une adresse IP disctincte.
Bientôt j'ajouterais une seconde machine virtuelle sous Linux pour les
tests de notre nouveau projet en Java...
J'ai même pu configurer (avec quelques difficultés étant donné que QNX
n'est pas un système officiellement supporté par VMWare) ma machine
virtuelle en NAT. Ainsi, quel que soit le réseau LAN auquel je suis
connecté (en clientèle par exemple), ma machine virtuelle conserve la
même adresse IP et commnunique sans problème avec tout le réseau sans
que je n'ai à modifier quoi que ce soit en paramétrage (du moins tout
ce qui est accessible par Windows et les passerelles paramétrées).
J'ai même configuré mon QNX pour qu'il puisse compiler mes sources en C
qui sont stockées sous Windows (avec le SMB client, je "monte" un
répertoire partagé sous Windows). Ainsi je garde mon éditeur C préféré
sous Windows (UltraEdit) et je crée mon binaire QNX d'un clic, que je
transfert par FTP d'un autre clic sur le système embarqué du client via
le réseau. Royal.

Pour revenir à VMware, on peut carrément se créer son petit réseau
interne avec plusieurs machines virtuelles, faire des ponts, du DHCP,
du NAT, tout cela avec un seul PC ! C'est très impressionnant (mais
évidemment il ne faut pas s'attendre à avoir des machines virtuelles
très performantes).

Je ne sais pas ce qui a été dit aux Windeveries concernant VMWare mais
je trouve que c'est un outil *FANTASTIQUE* et qui vaut largement les
300 euros qu'il faut débourser pour la version Workstation.

Je ne connaîs pas VirtualPC mais j'imagine qu'on doit pouvoir faire le
même genre de chose.

Je suppose qu'une communication à base de sockets devrait fonctionner
dans ton cas, et ce serait certainement plus fiable qu'un port série.



En fait, il ne s'agit pas de communication entre ces 2 OS (sinon je
l'aurais effectivement fait par socket ou par échange de fichiers),
mais de communication entre ma machine sous QNX et un automate (ou un
simulateur) relié au port série pour du débogage ou pour valider mon
programme de communication (mais j'ai besoin de Windows pour d'autres
choses...).

Il y a encore peu d'automates dans mon secteur qui communiquent par
socket...

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
1 2