OVH Cloud OVH Cloud

equivalence unix => windows

12 réponses
Avatar
Astar0th
Salut,

Je cherche l'équivalent de getdtablesize() sous windows ou un
define si jamais il n'est pas possible de changer cette valeur
sur windows.

Merci.

Asta.

10 réponses

1 2
Avatar
Targeur fou
Astar0th wrote:
Salut,


Bonjour,

Je cherche l'équivalent de getdtablesize() sous windows ou un
define si jamais il n'est pas possible de changer cette valeur
sur windows.


Attention, tu vas te faire tirer dessus jeune fou ;-), ce n'est pas du
C standard !!

Je ne sais pas si il y une fonction Win32 correspondante (car l'API
gère des HANDLE, type aussi utilisé pour pleins d'autres choses qui
ne sont pas des fichiers) , par contre, ton implémentation C, si elle
est conforme, fournit avec la bibliothèque une macro qui s'appelle
FOPEN_MAX, accessible en incluant l'en-tête <stdio.h>. Elle correspond
au nombre minimal garanti de fichiers (FILE *) que l'implémentation
peut ouvrir simultanément.

SInon, il ya la fonction getrlimit() (qui est POSIX) avec
RLIMIT_NOFILE, mais il faut pour ça disposer de WSU (Windows Services
for Unix).

http://www.opengroup.org/onlinepubs/009695399/functions/getrlimit.html

A+
Regis

Avatar
Targeur fou
Targeur fou wrote:

[...]

RLIMIT_NOFILE, mais il faut pour ça disposer de WSU (Windows Services
for Unix).


ou de cygwin, ou encore d'aut' chose, pourvu que ce soit POSIX, bien
entendu...

[...]

Avatar
Astar0th
Astar0th wrote:

Salut,



Bonjour,


Je cherche l'équivalent de getdtablesize() sous windows ou un
define si jamais il n'est pas possible de changer cette valeur
sur windows.



Attention, tu vas te faire tirer dessus jeune fou ;-), ce n'est pas du
C standard !!


Dsl, c'est vrai que je me suis tirer un peu les cheuveux pour trouver
le bon groupe. Mais la question concernait un equivalent _windows_
d'une fonction _unix_ _c_ que j'utilise dans un projet _c++_ :s.
D'ou ma difficulté, merci a ceux qui m'ont epargner :)

Je ne sais pas si il y une fonction Win32 correspondante (car l'API
gère des HANDLE, type aussi utilisé pour pleins d'autres choses qui
ne sont pas des fichiers) , par contre, ton implémentation C, si elle
est conforme, fournit avec la bibliothèque une macro qui s'appelle
FOPEN_MAX, accessible en incluant l'en-tête <stdio.h>. Elle correspond
au nombre minimal garanti de fichiers (FILE *) que l'implémentation
peut ouvrir simultanément.


Hum, ouais, le truc c'est qu'elle est egale à 20, et je souhaite
utiliser ce concept pour pré-allouer mes tables de clients. Et bon
un serveur qui gere 20 clients...


SInon, il ya la fonction getrlimit() (qui est POSIX) avec
RLIMIT_NOFILE, mais il faut pour ça disposer de WSU (Windows Services
for Unix).


Choses, qui bien sur, ne me sont pas authorisées :-p
D'apres ce que j'ai compris il n'y aurait pas de limite précises.
Ca sera plus clair avec quelques tests.

Merci :-)

Asta.


Avatar
Harpo
Astar0th wrote:

Salut,

Je cherche l'équivalent de getdtablesize() sous windows ou un
define si jamais il n'est pas possible de changer cette valeur
sur windows.


getdtablesize() existe où ? Et keskifè ?

Avatar
Astar0th
Astar0th wrote:


Salut,

Je cherche l'équivalent de getdtablesize() sous windows ou un
define si jamais il n'est pas possible de changer cette valeur
sur windows.



getdtablesize() existe où ? Et keskifè ?


Ca permet de récupérer la taille de la table des descripteurs
de fichier sous unix. Cette valeur peut etre set-er par le root
qui peut décider par exemple que tout les processus lancer par
l'utilisateur X ne peuvent pas ouvrir plus de Y descriptor.

Asta.


Avatar
Harpo
Astar0th wrote:

Astar0th wrote:


Salut,

Je cherche l'équivalent de getdtablesize() sous windows ou un
define si jamais il n'est pas possible de changer cette valeur
sur windows.



getdtablesize() existe où ? Et keskifè ?


Ca permet de récupérer la taille de la table des descripteurs
de fichier sous unix. Cette valeur peut etre set-er par le root
qui peut décider par exemple que tout les processus lancer par
l'utilisateur X ne peuvent pas ouvrir plus de Y descriptor.


Ok, c'est ce qu'on peut généralement paramêtrer par le built-in ulimit
du shell.
Je croyais que c'était encore une diablerie de windows.
J'avoue mon incompétence.



Avatar
Antoine Leca
In news:4395adb1$0$29190$, Astar0th va escriure:
Je cherche l'équivalent de getdtablesize() sous windows ou un
define si jamais il n'est pas possible de changer cette valeur
sur windows.


Quel que soit l'équivalent direct, tu as tout intérêt à isoler cette
dépendance système dans un coin et à fournir une version Windows
correspondante, avec au moins un niveau d'abstraction en plus.

Par exemple, pour un exemple similaire, avec Unix les sockets sont alloués
comme des descripteurs de fichiers annodins, mais avec Windows ce sont des
entités à part... Donc si tu te casses la tête à fournir l'équivalent
Windows de contrôle sur la taille de la table des descripteurs de fichiers,
et qu'ensuite un des utilisateurs de ton code utilise cela pour avoir plus
de sockets, cela aura un effet sur Unix, mais strictement aucun avec
Windows...


Antoine

Avatar
Astar0th
In news:4395adb1$0$29190$, Astar0th va escriure:

Je cherche l'équivalent de getdtablesize() sous windows ou un
define si jamais il n'est pas possible de changer cette valeur
sur windows.



Quel que soit l'équivalent direct, tu as tout intérêt à isoler cette
dépendance système dans un coin et à fournir une version Windows
correspondante, avec au moins un niveau d'abstraction en plus.


En fait, je veux juste savoir si il y'a une quantité maximum de SOCKET
que peu ouvrir un processus windows. Cette valeur sous unix peu varier
selon les besoins du root de la bécane, donc cette fonction est bien
pratique. Mais si sous windows, il n'y a pas de limites, ou si la
taille est fixe (??!!) ca va effectivement pas me servire a grand chose.

Par exemple, pour un exemple similaire, avec Unix les sockets sont alloués
comme des descripteurs de fichiers annodins, mais avec Windows ce sont des
entités à part... Donc si tu te casses la tête à fournir l'équivalent
Windows de contrôle sur la taille de la table des descripteurs de fichiers,
et qu'ensuite un des utilisateurs de ton code utilise cela pour avoir plus
de sockets, cela aura un effet sur Unix, mais strictement aucun avec
Windows...


En fait c'est juste pour faire de la pré-allocation, donc je vais pas
bidouiller cette valeur.

Merci :)

Asta.


Avatar
Antoine Leca
In news:439758b5$0$29219$,
Astar0th typed:
En fait, je veux juste savoir si il y'a une quantité maximum de SOCKET
que peu ouvrir un processus windows.


Nous y voilà ! Autrement dit, une question complètement spécifique à
Windows, et qui n'a absolument rien à voir avec le langage C.

Si tu ne le savais pas, et si tu ne l'avais pas encore compris avec
_WSAStartup(), la programmation des sockets en Windows n'est pas identique à
ce qui se passe sur un système Unix classique.


En fait c'est juste pour faire de la pré-allocation, donc je vais pas
bidouiller cette valeur.


Si c'est pour faire de la pré-allocation, le nombre maximal de sockets est
disponible sans aucune difficulté (wsaData->iMaxSockets). En posant la
question dans un forum Windows, tu aurais déjà la réponse. [autre remarque
moins amène effacée.]


Antoine

Avatar
Astar0th
In news:439758b5$0$29219$,
Astar0th typed:

En fait, je veux juste savoir si il y'a une quantité maximum de SOCKET
que peu ouvrir un processus windows.



Nous y voilà ! Autrement dit, une question complètement spécifique à
Windows, et qui n'a absolument rien à voir avec le langage C.


Je me suis deja excusé plus haut, et expliqué pourquoi j'ai posté ici.
J'admet que je me suis trompé, mais AMHA il était probable que je tombe
sur des gens qui connaissent les 2 environements Unix|Windows ici.
Ce n'était décidément le bon mode de déduction pour le choix du NG.
Désolé.

Si tu ne le savais pas, et si tu ne l'avais pas encore compris avec
_WSAStartup(), la programmation des sockets en Windows n'est pas identique à
ce qui se passe sur un système Unix classique.


...

En fait c'est juste pour faire de la pré-allocation, donc je vais pas
bidouiller cette valeur.



Si c'est pour faire de la pré-allocation, le nombre maximal de sockets est
disponible sans aucune difficulté (wsaData->iMaxSockets). En posant la


Dans le mille ! Merci :)

question dans un forum Windows, tu aurais déjà la réponse. [autre remarque
moins amène effacée.]


Suite à ma malheureuse érreur de NG, c'est ce que j'ai fait. Malheureusement
aucune réponse que j'ai eu n'a été aussi probante que la tienne.
Merci de m'avoir répondu malgré mon hors sujet, je comprend que ca doit être
lourd de voir des post hors sujet. Encore désolé je ne le ferais plus.

Asta.


1 2