• Viernes 8 de Noviembre de 2024, 20:40

Autor Tema:  Redireccionamiento  (Leído 1858 veces)

MutenRo

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Redireccionamiento
« en: Domingo 13 de Febrero de 2005, 20:00 »
0
Muy buenas a todos,
soy nuevo en este foro y éste es mi primer mensaje.

Quiero hacer un programa en C de manera que pueda leer e interpretar la salida que da en pantalla otro programa (en tiempo real). Para ello quiero hacer uso del operador | tan conocido en los tiempos del DOS. Se trataría de un programa que se ejecuta por la línea de comandos (como en el DOS), al igual que el MORE, SORT o FIND y produce los resuldados dependiendo de la entrada del proceso anterior.

Sería algo así: C:\> programa | mi_programa

"programa" puede ser cualquier cosa que produzca mensajes en pantalla, como por ejemplo DIR.

¿Cómo se programa tal cosa?

Gracias.

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Redireccionamiento
« Respuesta #1 en: Domingo 13 de Febrero de 2005, 21:56 »
0
Deberías usar el descriptor stdin para la lectura desde la entrada estándar. Si todo va bien (como es normal) el interprete de comandos (DOS) le pasa la información que "sale" del programa a tu programa, y para ello, lo debes leer de la entrada estándar.

Para poder leer de la entrada estándar puedes usar las funciones normales que trae C, pero puedes ser más espéficio con las funciones como fscanf, fprintf, etc.

Ya nos cuentas.

Nos vemos :hola:
Core Dumped
zirrus.es

MutenRo

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Redireccionamiento
« Respuesta #2 en: Domingo 13 de Febrero de 2005, 22:50 »
0
Gracias Cirrus, ¡con lo sencillo que era!

Basta con hacer algo así de simple para obtener e imprimir la primera palabla que da como salida un programa:

// lee.c
#include <stdio.h>
void main(void)
{
   char palabra[81];
   scanf("%s", palabra);
   printf("%s",palabra);
}

Ejemplo: c:\>dir | lee

Salida: El (dir simpre empiza imprimiendo "El volumen de la unidad C...")

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Redireccionamiento
« Respuesta #3 en: Domingo 13 de Febrero de 2005, 22:56 »
0
De nada!!!

Bienvenido al foro :D

Nos vemos :hola:
Core Dumped
zirrus.es

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: Redireccionamiento
« Respuesta #4 en: Viernes 18 de Febrero de 2005, 10:35 »
0
Uhm.... Esto a nivel de programación no tendría ningún problema: como has visto, tu simplemente lees de la entrada/salida standard: sea esto teclado/pantalla o la salida/entrada de otro programa.

Normalmente es la pantalla, aunque tu a la hora de ejecutar el programa le dices al Sistema Operativo que quieres que en lugar de eso, sea la salida del programa anterior al |. También tienes por ejemplo las redirecciones a fichero (> y <).

Para redirigir entradas y salidas debes usar llamadas combinadas a Close y Dup (servicios del Sistema Operativo), aunque pertenecen al standard POSIX que creo que Windows no cumple del todo. Yo recuerdo que tuve que programar un Shell para una practica y hacíamos esto entre procesos (todo con unos forks y pipes muy bonitos :) )
   

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Redireccionamiento
« Respuesta #5 en: Viernes 18 de Febrero de 2005, 11:41 »
0
Si, ami tambien me toco "practicar" con eso ;). En concreto se trataba de una práctica para hacer un interprete de comandos.

En fin, supongo que a todos nos toca pasar por lo mismo :D

Nos vemos :hola:
Core Dumped
zirrus.es