Précédent   Forum des professionnels en informatique > Systèmes > Linux > Distributions > SUSE
SUSE Vos questions sur la distribution Suse
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 19/05/2008, 22h17   #1
Invité de passage
 
Étudiant
Inscription : mars 2008
Messages : 11
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2008
Messages : 11
Points : 4
Points : 4
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 00
Vieux 20/05/2008, 07h12   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 259
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 259
Points : 7 043
Points : 7 043
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.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 12h43   #3
Invité de passage
 
Étudiant
Inscription : mars 2008
Messages : 11
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2008
Messages : 11
Points : 4
Points : 4
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 00
Vieux 28/05/2008, 19h06   #4
Invité de passage
 
Étudiant
Inscription : mars 2008
Messages : 11
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2008
Messages : 11
Points : 4
Points : 4
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 00
Vieux 28/05/2008, 21h56   #5
Membre chevronné
 
Avatar de matrix788
 
Inscription : juin 2002
Messages : 696
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 696
Points : 793
Points : 793
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
__________________
Modérateur Linux
n'oubliez pas de cliquer sur résolu...

== pas de question technique en MP. Merci ==
matrix788 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 06h41.


 
 
 
 
Partenaires

Hébergement Web