elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Definición de stdin en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Definición de stdin en C  (Leído 4,833 veces)
fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Definición de stdin en C
« en: 5 Septiembre 2017, 11:59 am »

Es legal definir stdin como sigue:

Código
  1. #define stdin (&_iob[0])

Donde _iob es un arreglo de estructura tipo FILE.

¿Despues yo podria hacer esto? ¿Por que?

Código
  1. stdin->flag

y entrar a la variable flag de la estructura FILE
¿Se pueden usar el operador de desreferencia sobre una dirección de memoria?

o debria definir a stdin asi:

Código
  1. #define stdin (_iob)


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Definición de stdin en C
« Respuesta #1 en: 5 Septiembre 2017, 15:16 pm »

El operador desreferencia es precisamente para acceder a lo apuntado por una dirección de memoria. ¿Por qué no ibas a poder?

De todos modos, evita acceder a los campos de la estructura FILE, puedes hacer las operaciones con las funciones que la librería trae consigo.


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Definición de stdin en C
« Respuesta #2 en: 5 Septiembre 2017, 16:44 pm »

De poderse de puede hacer pero como te comentan es mejor usar las definiciones que ya tienen las librerias.

La clausula define es solo para el compilador y sustituye cada occurencia del primer parametro por el segundo en el codigo fuente antes de compilarlo ejemplo:

Código
  1. #include<stdio.h>
  2.  
  3. #define _ printf
  4.  
  5. int main() {
  6. _("Hello World\n");
  7. return 0;
  8. }

Sustituye en el codigo cada _ por printf

En tu caso sustituiria cada stdin por la definicion que muestras.

Saludos!
En línea

fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Definición de stdin en C
« Respuesta #3 en: 6 Septiembre 2017, 12:12 pm »

El operador de desreferencia sirve para acceder a lo apuntado por una dirección de memoria. El problema es que esa dirección de memoria no apunta a nada, esa dirección de memoria es una estructura tipo FILE no un puntero. ( O ESO ES LO QUE ENTIENDO).
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Definición de stdin en C
« Respuesta #4 en: 6 Septiembre 2017, 20:19 pm »

El operador de desreferencia sirve para acceder a lo apuntado por una dirección de memoria. El problema es que esa dirección de memoria no apunta a nada, esa dirección de memoria es una estructura tipo FILE no un puntero. ( O ESO ES LO QUE ENTIENDO).
_iob es una matriz de FILE, que contiene varios FILE. Aunque sea un array, se puede acceder a él como si fuera un puntero. Hay pequeñas diferencias entre array y puntero, pero bueno, parecidos.
En línea

fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Definición de stdin en C
« Respuesta #5 en: 6 Septiembre 2017, 22:16 pm »

Claro pero para mi se tendría que definir así:

Código
  1. #define stdin (_iob)

En este caso al aplicarle el operador de desreferencia:
Código
  1. *(_iob)

estarías accediendo al primer elemento del arreglo:

Código
  1. (_iob[0])

en el otro caso:

Código
  1. #define stdin (&_iob[0])

este codigo es equivalente a este otro:

Código
  1. #define stdin (&*(_iob+0))
al aplicar el operador de desregerencia:
Código
  1. * (&*(_iob+0))
Le estarias aplicando el operador de desreferencia a la direccion de memoria del primer elemento de la  estructura FILE.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Definición de stdin en C
« Respuesta #6 en: 6 Septiembre 2017, 22:23 pm »

Código
  1. #define stdin (&*(_iob+0))
Esto se desarrollaría así:
Código
  1. #define stdin (&*K) // K -> FILE[]
  2. #define stdin (&K) // K -> FILE
  3. #define stdin K // K -> FILE*

Ten en cuenta, en el último paso, que '&' es una referencia; "añade un puntero (*)".

Por tanto, stdin es un FILE.
En línea

fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Definición de stdin en C
« Respuesta #7 en: 9 Septiembre 2017, 21:53 pm »

Código
  1. #define stdin (&*(_iob+0))
Esto se desarrollaría así:
Código
  1. #define stdin (&*K) // K -> FILE[]
  2. #define stdin (&K) // K -> FILE
  3. #define stdin K // K -> FILE*

Ten en cuenta, en el último paso, que '&' es una referencia; "añade un puntero (*)".

Por tanto, stdin es un FILE.

No entiendo ¿que es esa K?

¿Como yo quiero definir stdin esta mal?
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Definición de stdin en C
« Respuesta #8 en: 10 Septiembre 2017, 12:39 pm »

Código
  1. #define stdin (&*A) // A -> FILE[]
  2. // B = *A
  3. #define stdin (&B) // B -> FILE
  4. // C = &B
  5. #define stdin C // C -> FILE*
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sber si hay datos en stdin ?
Programación C/C++
lDanny 6 3,407 Último mensaje 25 Mayo 2010, 11:39 am
por lDanny
duda sockets no bloqueantes+stdin
Programación C/C++
nosoqui 1 2,830 Último mensaje 5 Septiembre 2011, 14:24 pm
por nosoqui
[C] Limpiando la stdin correctamente...
Programación C/C++
zShackra 9 5,259 Último mensaje 12 Noviembre 2014, 20:44 pm
por zShackra
El bendito stdin...
Programación C/C++
zShackra 4 3,157 Último mensaje 26 Noviembre 2014, 09:32 am
por zShackra
Manejo de e/s stdin/stdout y ficheros
Programación C/C++
Definitive 2 2,490 Último mensaje 3 Mayo 2017, 21:44 pm
por Definitive
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines