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
怎么会是文件套接字描述符
作为门 接收
或发送
数据,int a
在内存中是如何工作的?
我认为内核在启动套接字时将 integer a
的形式更改为 pointer to integer a
,但这只是一个想法,到底发生了什么?
有人吗?
最佳答案
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 存在。使用这个,他不知道你如何在内部跟踪 float ,但仍然可以使用句柄可靠地访问它们。
关于c - 内存中的套接字文件描述符是什么形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5068019/