2010-08-11 3 views
1

J'ai fait face à quelques problèmes lors de l'écriture de l'application serveur en utilisant TCP sur le système Linux. J'ai quelques questions.Où sont stockés les connecteurs FD?

  1. Où sont stockés les connecteurs FD et quels sont les attributs associés aux connecteurs FD des connecteurs.
  2. Comment le noyau différencie entre IFD comme FDs socket, fichier Fds, Message Queue FDs

Socket IFD sont reçus comme

int sockFD = socket(..., ..., ...); 

Quelle est la différence entre
a) close(sockFD);
et
b) int sockCopy = sockFD; //copy the socketfd
        close(sockCopy);

Le cas b ne fermera pas le socket pourquoi?

+0

Si vous demandez une implémentation de socket, choisissez une implémentation à poser. Et le cas b fermera certainement le socket sur toutes les implémentations où un descripteur de socket est un int. –

Répondre

3
  1. Les descripteurs de fichiers Socket sont stockés dans des variables entières dans votre application, tout comme les autres descripteurs de fichiers.

  2. Le noyau différencie en interne les différents types de descripteurs de fichiers via les différents pointeurs de fonction au sein du struct file associé.

  3. Il n'y a pas de différence; int sockCopy = sockFD; close(sockCopy); ferme le socket. Le noyau ne se soucie pas de ce que vous appelez la variable dans laquelle vous stockez le descripteur de fichier - tout ce dont il se soucie est la valeur numérique.

+0

+1: De plus, vous n'avez pas accès au 'struct fichier' à partir d'applications autres que les appels au noyau (évidemment!) Donc tout ce que vous pouvez les distinguer est comment ils se comportent sur le plan opérationnel. (Certains appels ne peuvent fonctionner que sur certains types de descripteurs de fichiers.) –

Questions connexes