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
或{{的大门 1}}数据,sending out
如何在内存中正常工作?
我认为在启动套接字时,int a
到integer a
的内核更改形式,但这真的是一个想法,究竟发生了什么?
任何人?
答案 0 :(得分:3)
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存在。使用它,他不知道你如何在内部跟踪浮动,但仍然可以使用句柄可靠地访问它们。