какая форма дескриптора файла сокета в памяти? - PullRequest
0 голосов
/ 21 февраля 2011
int main()
{
int a;
struct sockaddr_in data;
data.sin_addr.s_addr = INADDR_ANY;
data.sin_family = AF_INET;
data.sin_port = htons(1111); //assuming run on little-endian a.k.a x86
a = socket(AF_INET,SOCK_STREAM,0);
bind(a,(struct sockaddr*)&data, sizeof(data));

close(a);
return 0;
}

теперь сфокусируемся на переменной int a, интересно, почему integer будет file socket descriptor в качестве двери из receive in или sending out данных, как int a работать точно в памяти?

Я думал, что ядро ​​изменит форму integer a на pointer to integer a при инициализации сокета, но это просто мысль, что же на самом деле произошло?

кто-нибудь?

1 Ответ

3 голосов
/ 21 февраля 2011

a - это дескриптор, см., Например, http://en.wikipedia.org/wiki/Handle_%28computing%29

Ядро хранит необходимые ему структуры в таблице, так что каждый раз, когда вы обращаетесь к дескриптору, оно может искать нужные ему данные.

Вы можете реализовать простой механизм обработки, например, с массивом:

struct MyData {
  float f;
};

MyData TheArray[100];

void setFloat(int Handle, float v) {
  TheArray[Handle].f = v;
}

float getFloat(int Handle) {
  return TheArray[Handle].f;
}

Пользователь ваших функций знает только, что существуют setFloat и getFloat.Используя это, он не знает, как вы внутренне отслеживаете поплавки, но все же может надежно обращаться к ним с помощью ручки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...