Problema con llamada a descriptores
Publicado por Juan Miguel (1 intervención) el 20/11/2005 12:37:20
Hola amigos, por más que le doi vueltas no consigo averiguar donde falla el
siguiente programa escrito en c, porque compilar, compila, pero no hace lo
que tiene que hacer:
#include<unistd.h>
#include<string.h>
#include<stdio.h>
main( )
{
char s[20];
read(0,s,1); /*Lectura de un byte del descriptor 0 */
if (isdigit(s[0]))
{
sprintf(s,"El digito %c es verdaderamente un digito",s[0]);
write(1,s,strlen(s)); /*Escritura de la cadena s en el descriptor 1
*/
}
else /*Escritura de un literal en el descriptor 2*/
write(2,"Error, no es un digito",strlen("Error, no es un digito"));
}
Una vez compilado, ejecuto el programa de la siguiente manera:
nombre_programa > fich_sin_error 2> fich_con_error < fich_entrada.
El fich_entrada contedrá un número o una letra. Después de ejecutar el
programa, si he metido en el fich_entrada un número (el 9, por ejemplo), me
debería aparecer en fich_sin_error la línea: El digito 9 es verdaderamente
un digito.
Pues bien, no aparece nada en ese fichero, y en el otro "fich_con_error" me
aparece: bash: nombre_programa: command not found.
Es como si no pudiese discernir el comando "write" de la llamada al sistema
del mismo nombre. No se si me falta algo se se me pasa por alto.
¿Alguna sugerencia? ¿Por qué no sale lo que tiene que salir?
Un saludo a todos,
Juan
siguiente programa escrito en c, porque compilar, compila, pero no hace lo
que tiene que hacer:
#include<unistd.h>
#include<string.h>
#include<stdio.h>
main( )
{
char s[20];
read(0,s,1); /*Lectura de un byte del descriptor 0 */
if (isdigit(s[0]))
{
sprintf(s,"El digito %c es verdaderamente un digito",s[0]);
write(1,s,strlen(s)); /*Escritura de la cadena s en el descriptor 1
*/
}
else /*Escritura de un literal en el descriptor 2*/
write(2,"Error, no es un digito",strlen("Error, no es un digito"));
}
Una vez compilado, ejecuto el programa de la siguiente manera:
nombre_programa > fich_sin_error 2> fich_con_error < fich_entrada.
El fich_entrada contedrá un número o una letra. Después de ejecutar el
programa, si he metido en el fich_entrada un número (el 9, por ejemplo), me
debería aparecer en fich_sin_error la línea: El digito 9 es verdaderamente
un digito.
Pues bien, no aparece nada en ese fichero, y en el otro "fich_con_error" me
aparece: bash: nombre_programa: command not found.
Es como si no pudiese discernir el comando "write" de la llamada al sistema
del mismo nombre. No se si me falta algo se se me pasa por alto.
¿Alguna sugerencia? ¿Por qué no sale lo que tiene que salir?
Un saludo a todos,
Juan
Valora esta pregunta


0