Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Shon

#31
Hola a tod@s

Curioseando en el código de algunas aplicaciones de fuente abierta, he visto que el main.c se usa mucho declarar variables globales, hasta el punto de haber 40 o 50 o incluso más. Supongo que esto lo hacen para poder compartirlas entre varios modulos haciéndolas accesibles con extern.

Mi duda es:

En cuánto a eficiencia del programa y al buen estilo que se debe seguir para programar... ¿Es conveniente usar tantas variables globales? O por el contrario ¿Es mejor usar más el paso de variables locales como parámetros de funciones?

Agradecería cualquier opinión al respecto, ya que tengo que programar una aplicación de sockets, y tendre unos 5 o 6 ficheros con código, en el que tengo que compartir descriptores, estructuras y cosas así, y  no sé muy bien como estructurar la aplicación en cuanto a este tema.

Gracias de antemano.

Un saludo
#32
Redes / Fragmentación, MTU, protocolo IP
12 Agosto 2010, 16:02 PM
Hola, estoy haciendo calculos en la fragmentación para IP y estoy un poco liado con el fragment offset y el MTU.

Por lo que me he fijado, no se tiene en cuenta la cabecera Ethernet para el MTU.

Si mandamos este paquete:
$ping -c 1 -s 1473 IP

eso manda 1472 bytes de datos en un primer paquete fragmentado y para el siguiente envía el byte que queda.

Pero, si MTU = 1500  y tenemos que enviar las cabeceras junto con los datos:

Cabecera Ethernet    14
Cabecera IP         20
Cabecera ICMP      8

Total: 42

1500 - 42 = 1458

Es decir, que teniendo en cuenta las tres cabeceras, en el primer fragmento, como mucho, se peude enviar 1458 de datos, pero envía 1472, que resulta de tener encuenta la cabecera IP  e ICMP.

¿Alguién podría explicarme por qué no se tiene en cuenta la cabecera EThernet?

Gracias. Un salduo.
#33
Si, eso lo sé; lo que mas me lía es la ordenación en memoria.

dir. baja  ----------------------------- dir. alta
----------------------------------------------
11000011000111100000000000000000

Así es como lo almacena en memoria y no tengo ni idea como lo hace

Un saludo
#34
Hola,


/*
* campos de bits
*/
#include <stdio.h>

struct palabra {
unsigned car_ascii : 7;
unsigned bit_paridad : 1;
unsigned operacion : 5;
unsigned : 18;
unsigned bit_signo : 1;
};

int main(int argc, char *argv[]) {
struct palabra cb = {'C', 1, 0x1E, 0};

printf("campos de bits: %x\n\n", cb);
printf("bit signo %x\n", cb.bit_signo);
printf("operacion : %x\n", cb.operacion);
printf("bit de paridad: %x\n", cb.bit_paridad);
printf("caracter %c : %x\n", cb.car_ascii, cb.car_ascii);

return 0;
}


Alguien sabría explicarme porque este programa da este resultado:

campos de bits: 1ec3

bit signo 0
operacion : 1e
bit de paridad: 1
caracter C : 43


No me entra en la cabezota como hace las asignaciones y la ordenación en memoria