Autor
|
Tema: FD_SET en Linux (pregunta de nivel medio-alto) (Leído 5,125 veces)
|
Stroncio
Desconectado
Mensajes: 7
|
tengo la siguiente duda ante la estructura fd_set al aplicarle la macro FD_SET sobre como se realiza el llenado:
en un principio crei que seria asi:
fd_set apunta a un array asi: 0000 0000 0000 0000 0000 0000 (BIT) ahora hago FD_SET con 0 creia que seria: 1000 0000 0000 0000 0000 0000 pero parece ser que es asi: 0000 0001 0000 0000 0000 0000 ahora la duda es cuando se llene el primer byte, me imagino que se llenara el segundo asi: 1111 1111 0000 0001
busco una implementacion de las macros FD_SET,FD_ISSET,FD_CLR en NASM pero no encuentro nada.
|
|
|
En línea
|
|
|
|
nosoqui
Desconectado
Mensajes: 18
|
Saludos Stroncio ! según he comprobado.... fd_set es una variable de 1024 bits en el que se describe un conjunto de descriptores(ficheros, sockets .... lo que sea), por tanto si tenemos un descriptor de valor(entero) x y queremos introducirlo en ese conjunto, lo que tenemos que hacer es poner el bit número x a 1, eso lo haríamos haciendo una operación OR(|) del conjunto con el 1 desplazado hacia la izquierda(<<) x ... pero para hacer eso tienes que tener en cuenta si la memoria se gestiona con Little endian o Big endian, en el primer caso, en el conjunto de 128 bytes, se almacenan los bytes menos significativos en las posiciones de memoria más bajas(y al contrario en Big Endian), por tanto(y suponiendo que estamos en little endian ya que la mayoria de nuestros sistemas lo hacen así) si tenemos un descriptor cuyo valor es por ejemplo 242, tendremos que irnos al byte número 242/8 y hacer el desplazamiento hacia la izquierda 242%8 (módulo, es decir el resto) .... En el caso de querer saber si un descriptor está activo.... lo que haríamos es lo mismo pero haciendo un AND y ver si el resultado es distinto de 0 (lo cual indicaria que sí está activo)
Mucha suerte y espero que sirva de algo
|
|
|
En línea
|
|
|
|
Stroncio
Desconectado
Mensajes: 7
|
tenia dudas sobre si se consideraba la cadena de 1024 o de byte en byte te paso el codigo y comprobamos si lo hago bien? gracias
|
|
|
En línea
|
|
|
|
nosoqui
Desconectado
Mensajes: 18
|
Según he comprobado(viendo las posiciones de memoria individualmente), he deducido que se almacena como he dicho... no domino mucho el ensamblador! pero si me pasas el codigo(por aquí o por privado), haré el máximo esfuerzo por entenderlo .... Un par de detalles: 1º En mi ordenador, la variable fd_set ocupa 128 bytes pero es posible que en otro sistema linux ocupe otro espacio 2º No se como estará implementada la macro en las librerias originales pero la que te pongo a continuación tiene los mismos efectos(por si te sirve de algo) : #define FD_SET(A,B) *((unsigned char *) A + (B / 8))|=(1<<(B % 8))
Un saludo!
|
|
|
En línea
|
|
|
|
Stroncio
Desconectado
Mensajes: 7
|
gracias por tu ayuda, no te molesto mas, creo que lo hice bien. saludos
|
|
« Última modificación: 25 Enero 2011, 02:07 am por Stroncio »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿algun software para borrar HDD externos al mas alto nivel de seguridad?
Software
|
aprendiz64
|
6
|
4,103
|
6 Octubre 2012, 22:07 pm
por Saberuneko
|
|
|
Desarrollo web de alto nivel
Desarrollo Web
|
CharlyM35
|
6
|
4,090
|
27 Agosto 2013, 08:27 am
por bacanzito
|
|
|
M#, el nuevo lenguaje de alto nivel (pero para programar sistemas) de Microsoft
Noticias
|
wolfbcn
|
0
|
1,465
|
31 Diciembre 2013, 21:50 pm
por wolfbcn
|
|
|
Su dirección IP se ha bloqueado debido a un nivel muy alto de solicitudes.
Desarrollo Web
|
cenomeno1
|
2
|
1,994
|
9 Febrero 2014, 10:32 am
por cenomeno1
|
|
|
Funcionamiento a alto nivel de RSA
Criptografía
|
arget
|
4
|
3,767
|
2 Abril 2016, 23:15 pm
por kub0x
|
|