🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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.
#1467
Author: Juan Miguel
Date: Sun, 20 Nov 2005 11:28
36 lines
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.
#1468
Author: Jaime Souza
Date: Sun, 20 Nov 2005 11:41
45 lines
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.
#1469
Author: Tururu
Date: Sun, 20 Nov 2005 11:50
1 lines
1208 bytes
A mi me funciona seg�n tus indicaciones.
Re: Llamadas utilizando descriptores. Problema.
#1470
Author: Claudio
Date: Sun, 20 Nov 2005 12:09
11 lines
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.
#1471
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Sun, 20 Nov 2005 19:54
17 lines
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.
#1472
Author: Juan Miguel
Date: Sun, 20 Nov 2005 21:18
20 lines
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.
#1473
Author: migroslinx
Date: Mon, 21 Nov 2005 14:37
15 lines
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