Autor
|
Tema: Problema entrada estándar (Leído 4,110 veces)
|
fileteruso
Desconectado
Mensajes: 18
|
Buenas a todos,
suponiendo que se tiene el archivo programa.c, que imprime la cadena que se le pasa por entrada estándar en el terminal de la siguiente forma:
echo "abcdef" | ./programa
como puedo hacer para que imprima abcdef por salida estándar, y que si ejecuto el programa sin entrada
./programa
que no imprima nada y no se quede esperando a introducir nada por teclado.
Muchas gracias a todos.
|
|
« Última modificación: 4 Diciembre 2018, 18:29 pm por fileteruso »
|
En línea
|
|
|
|
K-YreX
|
Puede que alguna vez te hayas encontrado con la función <main> con el siguiente formato: int main(int argc, char *argv[]){ }
Eso significa que <argc> contiene el número de argumentos que se han pasado al programa y <argv> contiene cadenas de caracteres con los parámetros que se han escrito al ejecutar el programa. Luego ya es adaptar tu programa según el valor de <argc>. Suerte.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
fileteruso
Desconectado
Mensajes: 18
|
Muchas gracias por responder, el problema que tengo es que si yo en el terminal escribo:
echo "123456" | ./programa
el número de argumentos es 1, que, si no me equivoco, es el propio programa, y si escribo:
./programa
el número de argumentos también es 1.
Esto me impide diferenciar cuando escribo el programa de la forma ./programa, que debería no devolver nada, y el echo "123456" | ./programa que debería devolver 123456.
Muchas gracias.
|
|
|
En línea
|
|
|
|
K-YreX
|
Y no te sirve ejecutar <./programa 123456>?? La otra forma no se me ocurre nada por el momento ya que no he trabajado nunca con un programa en C y un pipe del terminal.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
echo "123456" | ./programa
Eso es como si ejecutaras el programa y este pidera informacion Entonces lo que le pasaste como 123456 mediante el Echo se ingresa en esa primera pregunta ya sea un scanf o un fgets o un cin Ejemplo: #include<stdio.h> //Funciones printf, fgets #include<string.h> //Funciones printf, fgets int main() { char temp[100]; do { }
entrada.txt hola esto es una pruba de codigo al salir con exit Saludos
|
|
« Última modificación: 4 Diciembre 2018, 19:55 pm por AlbertoBSD »
|
En línea
|
|
|
|
fileteruso
Desconectado
Mensajes: 18
|
Muchas gracias por responder, he adaptado tu respuesta a mi problema, por lo cual he puesto: # include <stdio.h> # include <string.h> int main(){ char temp[2048]; } return 0; }
el problema que tengo es que si pongo echo "123456" | ./programa me devuelve lo que quiero, que es 123456, sin embargo si lo escribo solo ./programa se queda esperando a que introduzca algo para imprimirlo por pantalla, y eso es lo que no quiero que ocurra; lo que necesito es que si ejecuto ./programa se ejecute y acabe sin esperar a que introduzca nada. Muchas gracias otra vez.
|
|
« Última modificación: 4 Diciembre 2018, 22:45 pm por fileteruso »
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
Ya entendi, lo que quieres es que si hay algo en la entrada estandar lo procese, si no, simplemente termine. te convendría revisar el siguiente tema ¿Queda algo en el Buffer de Entrada stdin? (Solucionado)Asi no se puede hacer lo que dices con metodos estadar (Segun creo no se puede). El punto esta en que la mayoria de las funciones tipo getchar, getc, fgets etc...... se quedan esperando entrada hasta que lea algo. Yo intenten validar si habia algo en la entrada estandar mediante el uso de feof, pero resulta que para Stdin nunca es el FIN del archivo, como lo muestro en una de las replies el link que te pase. sin embargo no se si funcione para el metodo que muestras de echo .... o type. Voy a probarlo y te comento. Saludos
|
|
« Última modificación: 5 Diciembre 2018, 00:51 am por AlbertoBSD »
|
En línea
|
|
|
|
fileteruso
Desconectado
Mensajes: 18
|
Ese es mi problema, justo.
Muchas gracias, por la atención de nuevo.
|
|
« Última modificación: 4 Diciembre 2018, 23:57 pm por fileteruso »
|
En línea
|
|
|
|
CalgaryCorpus
|
Si presionas ^D (Control D) en linux o ^Z en windows, generas un eof para la entrada estandar.
|
|
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
Si presionas ^D (Control D) en linux o ^Z en windows, generas un eof para la entrada estandar.
Interesante, si es cierto que cuand quiero salir de una terminal linux rapidamente presiono control D y para windows no me sabia lo del control z. Sin embargo el OP trata de automatizar alguna tarea, que cuando envie texto mediante Echo al programa, este lo capture y lo procese, y cuando envié alguna cadena vacia, no se quede esperando el programa. Saludos!
|
|
« Última modificación: 5 Diciembre 2018, 00:37 am por AlbertoBSD »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Leer de la entrada estandar linea por linea
« 1 2 »
Programación C/C++
|
Delraich
|
15
|
12,580
|
6 Julio 2010, 19:53 pm
por MIG80
|
|
|
Guardar entrada estandar en un archivo de texto
Programación C/C++
|
gonzaloi
|
8
|
4,558
|
3 Abril 2011, 00:23 am
por leogtz
|
|
|
[C++] Consulta - Usar entrada estándar o desde un archivo
Programación C/C++
|
Lauta
|
8
|
4,413
|
7 Octubre 2012, 08:02 am
por Lauta
|
|
|
Duda con redirección de entrada estándar en C++.
Programación C/C++
|
SARGE553413
|
1
|
2,758
|
28 Mayo 2013, 13:09 pm
por flony
|
|
|
leer un array por entrada estandar (cmd)
Scripting
|
dijsktra
|
3
|
3,352
|
1 Diciembre 2019, 04:29 am
por EdePC
|
|