[C con Clase] duda con write

Pogui poguijuaz en gmail.com
Lun Jun 9 23:07:03 CEST 2008


xinul.vbp escribió:
> On Mon, Jun 09, 2008 at 12:02:31PM -0300, Pogui wrote:
>   
>> Hola lista, tengo un problema que me esta rompiendo la cabeza.
>> Resulta que al parecer la función write de este ejemplo hace que mi 
>> programa termine inesperadamente:
>>
>> #include <sys/types.h>
>> #include <sys/stat.h>
>> #include <sys/wait.h>
>> #include <fcntl.h>
>>
>> #include <stdlib.h>
>> #include <unistd.h>
>> #include <stdio.h>
>> #include <errno.h>
>> #include <string.h>
>>
>> #include "hijos.h"
>>
>> int hijo(char* buffer, char caracter)
>> {
>>     int *contador,pipea[2],i=0;   
>>     
>
>   
>>     *contador=0;   
>>     
> no se a que le estas asignando ya que no has reservado nada de memoria con malloc
>
>
>   
>>     while(*buffer) {
>>         if(*buffer==caracter)
>>             i++;
>>         buffer++;
>>     }
>>     *contador=i;   
>>     
>
>   
>>     printf("%d\n%d\n",*contador,i);   
>>     
> acá tendrías que recivír un segment fault.
>
>   
>>    
>>     if(caracter == 'a') {
>>         printf("es una 'a'\n");           
>>         if (pipe(pipea) == -1) {
>>             perror ("pipe");
>>             exit (EXIT_FAILURE);
>>         }       
>>         /*envio de mensaje */                   
>>         close (pipea[0]);       
>>     
>
>   
>>         //write (pipea[1], contador, sizeof(contador));    esta es la 
>> linea del problema
>>     
> pues como ya dije a _contador_ no le has asignado nada de memoria
>
>   
>>         printf("luego de escribir\n");           
>>         close (pipea[1]);                               
>>         /*fin de envio de mensaje */
>>     }
>>    
>>     return *contador;
>> }
>>
>> lo raro es que compila perfectamente.
>> Alguna idea de que es lo que puede estar pasando?
>> Apenas el programa entra al write sobre el pipe, la ajecucuión termina 
>> abruptamente
>>     
> termina con algún error, cual?
>
>   
>> :(
>> gracias por su atención.
>>     
>
> prueba reservando memoria para _contador_ con malloc.
>
>
>
>   

intenté reservando memoria para contador, pelo lo mismo.
Según lo que encontré el error 141 es error de "permiso denegado"
No logro entender porque.......





Más información sobre la lista de distribución Cconclase