Posts Tagged ‘GNU/Linux’

que diferencia hay entre write, fwrite y send

marzo 31, 2009

joven argentino que cursas en la utn sistemas operativos o muchacho global que andas queriendo aprender a programar entrada salida y sockets en C, espero que esto te oriente.

write es la llamada del sistema operativo a un descriptor. El descriptor es una abstracción que usan los sistemas operativos tipo POSIX para representar un dispositivo al que se le pueden escribir o se pueden leerle datos. La función está declarada en el archivo header unistd.h.

fwrite es una función de la biblioteca estándar de C y se utiliza para escribir registros, indicando cuántos, a un flujo binario. Un flujo es una abstracción que usan muchos lenguajes de programación y que consiste en una secuencia de caracteres (fwrite permite tratarlo de a bytes o bloques) que vienen de un lugar y van a hacia otro. Los flujos más conocidos son los estándar de la consola: teclado entrada y pantalla salida. Para usarla hay que hacer include de stdio.h

send es una función de los sockets. Para utilizarla es necesario incluir las cabeceras sys/types.h y sys/socket.h. Los sockets son otro tipo de abstracción que se utilizan para comunicación entre procesos. Estos procesos pueden estar en un mismo sistema o en distintos. Se le pasa un socket que es también un descriptor pero este se obtiene con las funciones de sockets.

write es de más bajo nivel, es una llamada al sistema operativo. fwrite es propia del concepto de flujo de la biblioteca estándar de C. send permite.

Las 3 reciben un puntero a void, que es la manera en C de referenciar a una posición de datos sin importarnos el tipo de dato. También reciben un size_t que es el tamaño del bloque de datos que vamos a envíar.

Si bien se puede obtener el descriptor de un flujo a traves de una función de biblioteca no se puede hacer el camino inverso ya que el flujo usa un descriptor y no al revés.

send ofrece más control en lo referente a sockets. Se puede indicar que el envío sea bloqueante (el programa se queda bloqueado hasta que pueda envíar los datos) o no bloquentes.

más adelante vamos a hablar de read, fread y recv.

Ah! Revisar la guía beej que es un buen tutorial para iniciarse con sockets.

¡Mucha suerte!

Anuncios

Programando sobre Linux con C

septiembre 13, 2008

Sigo con esto de programar en ANSI C con GNU/Linux y POSIX.

Encontré un blog muy interesante de un Pablo Garaizar Sagarminaga. El amigo es de españa y se mandó un interesante curso de programación en C para GNU Linux.

Muy recomendable para acompañar la cursada de Sistemas Operativos de FBRA/UTN.