Thread View: es.comp.os.linux.programacion
7 messages
7 total messages
Started by Juan Miguel
Sun, 20 Nov 2005 11:28
Llamadas utilizando descriptores. Problema.
Author: Juan Miguel
Date: Sun, 20 Nov 2005 11:28
Date: Sun, 20 Nov 2005 11:28
36 lines
2302 bytes
2302 bytes
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
Re: Llamadas utilizando descriptores. Problema.
Author: Jaime Souza
Date: Sun, 20 Nov 2005 11:41
Date: Sun, 20 Nov 2005 11:41
45 lines
2582 bytes
2582 bytes
Juan Miguel tuvo a bien decir:
> 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
Hola
Yo he hecho un copy/paste del código en tu post, he compilado y ejecutado y
funciona correctamente...
Re: Llamadas utilizando descriptores. Problema.
Author: Tururu
Date: Sun, 20 Nov 2005 11:50
Date: Sun, 20 Nov 2005 11:50
1 lines
1208 bytes
1208 bytes
A mi me funciona seg�n tus indicaciones.
Re: Llamadas utilizando descriptores. Problema.
Author: Claudio
Date: Sun, 20 Nov 2005 12:09
Date: Sun, 20 Nov 2005 12:09
11 lines
1229 bytes
1229 bytes
On 2005-11-20, Juan Miguel <juanmivp@ono.com> wrote: > Pues bien, no aparece nada en ese fichero, y en el otro "fich_con_error" me > aparece: bash: nombre_programa: command not found. Porque la shell no encuentra el programa. Prueba a hacer: PATH=$PATH:. O bien ejecuta el programa con ./nombre_programa Un saludo. --claudio--
Re: Llamadas utilizando descriptores. Problema.
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Sun, 20 Nov 2005 19:54
Date: Sun, 20 Nov 2005 19:54
17 lines
1735 bytes
1735 bytes
Hola "Juan Miguel" <juanmivp@ono.com>
el Sun, 20 Nov 2005 12:28:54 +0100 escribiste:
> 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]);
Estás escribiendo en s más de 20 caracteres, lo cual produce un buffer
overflow.
¿Con letras funciona?
--
Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es>
PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704
Re: Llamadas utilizando descriptores. Problema.
Author: Juan Miguel
Date: Sun, 20 Nov 2005 21:18
Date: Sun, 20 Nov 2005 21:18
20 lines
1680 bytes
1680 bytes
Efectivamente, luego me di cuenta del errocillo. Y es que no inclu� en el PATH el directorio actual. Gracias a todo el mundo JuanMi. "Claudio" <claudio@example.org> escribi� en el mensaje news:slrndo0pr5.lgj.claudio@example.org... > On 2005-11-20, Juan Miguel <juanmivp@ono.com> wrote: >> Pues bien, no aparece nada en ese fichero, y en el otro "fich_con_error" >> me >> aparece: bash: nombre_programa: command not found. > > Porque la shell no encuentra el programa. Prueba a hacer: > PATH=$PATH:. > > O bien ejecuta el programa con ./nombre_programa > > Un saludo. > --claudio-- >
Re: Llamadas utilizando descriptores. Problema.
Author: migroslinx
Date: Mon, 21 Nov 2005 14:37
Date: Mon, 21 Nov 2005 14:37
15 lines
2031 bytes
2031 bytes
No es recomendable POR MOTIVOS DE SEGUIRDAD añadir el directorio actual "." al PATH. Lo único que tienes que hacer para ejecutar un programa en el directorio actual es poner "./" y el nombre de tu programam un ejemplo: #>ls -l -rw-r--r-- 1 miguel users 227504 2005-11-02 23:04 MainFrameGUI.o -rw-r--r-- 1 miguel users 101436 2005-11-02 23:04 RTLib.o -rw-r--r-- 1 miguel users 786072 2005-11-03 13:34 RTLib.s -rw-r--r-- 1 miguel users 251596 2005-11-02 23:04 RTObject.o -rwxr-xr-x 1 miguel users 765905 2005-11-02 23:04 RTSimApp -rw-r--r-- 1 miguel users 162268 2005-11-02 23:04 RTSimApp.o -rw-r--r-- 1 miguel users 240976 2005-11-02 23:04 wxRTLibWindow.o #> ./RTSimApp
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads