Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Distributions > SUSE

SUSE Vos questions sur la distribution Suse

Réponse
 
Outils de la discussion
Vieux 19/05/2008, 22h17   #1 (permalink)
Invité régulier
 
Date d'inscription: mars 2008
Localisation: Toulouse
Âge: 22
Messages: 11
Par défaut comportement différent sous vista/cygwin et opensuse

Salut,
Ma question est simple : comment se fait-il qu'un programme ait un comportement différent sous cygwin que sous opensuse 10.3 ?

Je m'explique : un pote a écrit un programme en C sous vista/cygwin qui fonctionne exactement comme on le souhaite. Nous devons cross-compiler ce programme pour l'exécuter sur un linux embarqué, mais d'abord nous voulons qu'il fonctionne sur opensuse, ça serait déjà bien... Mais ce n'est pas le cas.

Ce programme est en gros un serveur fonctionnant en multithreading.

est-ce le changement de pc qui a changé le comportement du programme, ou bien le changement de système d'exploitation ?

Toma.
toma_n7 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/05/2008, 07h12   #2 (permalink)
Membre Expert
 
Avatar de frp31
 
Date d'inscription: juillet 2006
Localisation: toulouse
Messages: 1 474
Par défaut

c'est l'environnement (donc les couches soft basses) qui peuvent changer +ou- le comportement du programme par exemple
/dev/random ou encore /proc/* etc... peuvent etre differents
de plus cygwin n'est pas un unix mais seulement un shell unix et un environnement de base pour windows donc forcément assez elloigné d'un unix c'est comme comparer un volant identique sur une renault Turbo5 et un Man TGA, tu n'aurra pas du tout les même sensations... et le volant est pourtant le meme.... et pourtant il est toujours au bout de la colone de direction mais dans un cas tu as un environnement complet (voiture de sport et dans l'autre un camion)...ca braque pas pareil

si le programme change beaucoup son comportement c'est qu'il est mal ecrit...enfin du moins....pas écrit pour être , à la fois portable & non-OS dépendant, est plus exact.
__________________
Bye @+
(\__/)
(o..o)
(") (")

Soutenez le logiciel libre
frp31 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/05/2008, 12h43   #3 (permalink)
Invité régulier
 
Date d'inscription: mars 2008
Localisation: Toulouse
Âge: 22
Messages: 11
Par défaut

Citation:
Envoyé par frp31 Voir le message
c'est l'environnement (donc les couches soft basses) qui peuvent changer +ou- le comportement du programme par exemple
/dev/random ou encore /proc/* etc... peuvent etre differents
Quelles sont les différences à prendre en compte pour écrire un programme tel que le notre ? Y-a-t-il des différences dans :
* La gestion des priorités entre les threads ?
* La gestion d'un réseau udp ? (notre programme utilise un port udp pour la communication entre processus).

On a l'impression que, sur le linux, les processus arrêtent d'écouter au port au bout d'un moment, et que les données envoyées sur ce port sont mis dans un tampon, qui se "vide" lorsque les processus sont relancés (on reçoit tout d'un coup).

Ce comportement nous parait étrange...
toma_n7 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 28/05/2008, 19h06   #4 (permalink)
Invité régulier
 
Date d'inscription: mars 2008
Localisation: Toulouse
Âge: 22
Messages: 11
Par défaut

Personne n'a donc pu m'aider

Bon, je vais vous dire ce qui était différent entre windows et linux, et qui nous embêtait dans notre programme, ça pourra peut-être servir un jour à quelqu'un, qui sait...

Donc voila : notre programme repose sur une structure multithread. Il semblerait qu'il existe un nombre maximum de processus joignables. Ce nombre est plus grand sous windows que sous linux, donc cette limite n'a pas été atteint lorsque le programme a été exécuté sous windows/cygwin. Cependant, pour Suse (et également Fedora, et pt être aussi les autres distrib, c'est à tester...), ce nombre maximum a été atteint, d'où le comportement aléatoire que j'ai décrit.

Nous avons donc modifié notre programme en utilisant des processus non joignables, et c'était gagné !

@+, Toma
toma_n7 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 28/05/2008, 21h56   #5 (permalink)
Membre éclairé
 
Date d'inscription: juin 2002
Localisation: Lyon
Messages: 311
Par défaut

en effet, la gestion du thread est différente de windows à unix, du au standard du language C :

The _beginthread and _endthread calls are Microsoft specific extensions to
the C standard; they respectively start and end a thread, performing
Microsoft C runtime initialization and cleanup. The corresponding Cygwin
primitives are called posix_create and posix_end.

You may get lucky and get your code working by just substituting
pthread_create for beginthread, and pthread_exit for endthread.

source :
http://cygwin.com/ml/cygwin/2002-10/msg00939.html
__________________
résolu rime souvent avec Merci !
matrix788 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS LINUX PROFESSIONNELFAQ LINUXTUTORIELS LINUXLIVRES LINUXLINUX TVUNIXGTK+QtAPACHE

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Distributions > SUSE



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide