私のOSは64ビットCentOS6.4です。その後linuxのFD_SETとfd_setについて
fd_set my_set;
FD_SET(31, &my_set);
、私は[...] my_set.fds_bitsを示しmy_set.fds_bits [0] 0x0000000080000000に等しいです:私はFD_SETを管理FD_SETする方法についての質問fd.Followコードがケースで追加しています。 、my_set.fds_bits [1〜...] zero.Iは、私はまた、コードに従って、ケースを書くresult.Butを理解することができます:。私は[...] my_set.fds_bitsを示し
fd_set my_set;
FD_SET(63, &my_set);
をmy_set .fds_bits [0]は0x0と等しいです。私の意見では、結果はmy_set.fds_bits [0]は0x8000000000000000と等しいです。本当になぜsencondの結果が0x0なのかわかりません。 63に等しいfdはmy_setに状態を持たない。あなたはおそらく、32ビットのようにコードをコンパイルし
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <resolv.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/time.h>
#include <pthread.h>
#define BUFSIZE 1024
void printFDSET(fd_set target_sets)
{
int uIndex = 0;
int model_num = __NFDBITS;
for(uIndex = 0; uIndex < 10/*FD_SETSIZE/model_num*/; uIndex++)
{
printf("0x%016x\t", target_sets.fds_bits[uIndex]);
if(uIndex % 4 == 3)
printf("\n");
}
printf("\n");
return;
}
int main(int argc, char* argv[])
{
fd_set my_set;
FD_ZERO(&my_set);
printf("sizeof(long int) = %d\n", sizeof(long int));
printf("FD_SETSIZE = %d\n", FD_SETSIZE);
printf("size = %zu\n", sizeof __FDS_BITS(&my_set)[0]);
printf("\n\n");
int unfd = 31;
FD_SET(unfd, &my_set);
printf("%d is added to my_set:\n", unfd);
printFDSET(my_set);
printf("\n\n");
FD_CLR(unfd, &my_set);
unfd = 63;
printf("%d is added to my_set:\n", unfd);
FD_SET(unfd, &my_set);
printFDSET(my_set);
return 0;
}
'printf(" size =%zu \ n "、sizeof __FDS_BITS(&my_set)[0])の出力は何ですか? – Armali
@ Armali、結果は8です。 –
面白い... 2番目の結果を(どのように試してみるために)正確にどのように印刷しましたか? – Armali