Linux - Problema con llamada a descriptores

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con llamada a descriptores

Publicado por n0str0m0 (1503 intervenciones) el 20/11/2005 13:05:28
El problema, como te indica el bash, es que no encuentra el ejecutable. Trata de ejecutarlo como:

./nombre_programa > fich_sin_error 2> fich_con_error < fich_entrada.

Ya que seguramente no tengas el directorio actual incluído en el PATH.

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Problema con llamada a descriptores

Publicado por chuidiang (22 intervenciones) el 22/11/2005 08:50:33
Hola:

Lo que te comenta nOstrOmO es cierto y se corrige como él te ha indicado.

De todas formas, veo una cosa en el programa. Declaras un array s[20] y solo lees un caracter en el. El resto queda sin inicializar.

Mas adelante usas strlen(s). Como s está sin inicializar, ese strlen(s) puede darte cualquier cosa. O bien rellenas todas las posiciones de s[i] con \0 o bien despues de leer s[0], mete un \0 en s[1].

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar