elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en el uso del fork()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Error en el uso del fork()  (Leído 4,480 veces)
nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Error en el uso del fork()
« en: 5 Abril 2014, 12:56 pm »

Hola están.

tengo un peque~no problema estaba estudiando el concepto de procesos y como estos funcionan.

llegue a una parte del libro que habla de los fork();

y muestra un ejemplo que es para la creación de un nuevo proceso.

El problema es que al momento de ejecutar la aplicación me muestra el siguiente error.

Código
  1. /invalid conversion from ‘void*’ to ‘int*[-fpermissive]|

Este es el codigo.

Código
  1. #include <sys/types.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5.  
  6. int main (void)
  7. {
  8.    int *valor = malloc(sizeof(int));
  9.    *valor = 0;
  10.    fork();
  11.    *valor = 13;
  12.    printf("%ld: %d\n", (long)getpid(), *valor);
  13.  
  14.    free(valor);
  15.  
  16.    return 0;
  17. }

Gracias. también se me olvidaba tal ves me lo pueden explicar un poco mas claro, tengo el concepto un poco confuso todavía. saludos.


« Última modificación: 5 Abril 2014, 12:59 pm por nolasco281 » En línea

Lo que se puede imaginar... se puede programar.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Error en el uso del fork()
« Respuesta #1 en: 5 Abril 2014, 13:06 pm »

¿Qué tiene que ver ese int* con el fork?

El problema es que al momento de ejecutar la aplicación me muestra el siguiente error.

¿Error al ejecutar la aplicación, o a compilar?


En línea

nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: Error en el uso del fork()
« Respuesta #2 en: 5 Abril 2014, 13:09 pm »

Al compilar la aplicación.
En línea

Lo que se puede imaginar... se puede programar.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Error en el uso del fork()
« Respuesta #3 en: 5 Abril 2014, 13:14 pm »

Código
  1. int *valor = (int*)malloc(sizeof(int));

Pon el (int*) delante.
En línea

nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: Error en el uso del fork()
« Respuesta #4 en: 5 Abril 2014, 13:22 pm »

Hola gracias por responder

este es el ejemplo que sigo



y su salida es esta.



con la modificación que tu apuntas la salida es esta.



la pregunta es por que pasa esto
En línea

Lo que se puede imaginar... se puede programar.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Error en el uso del fork()
« Respuesta #5 en: 5 Abril 2014, 13:29 pm »

getPid() retorna el Proccess ID (PID) del proceso actual. Con Fork, partes el proceso en 2. Cada uno, a partir de el fork(), seguirá su camino. Así que cada uno hace un printf() de su PID, más el "valor".

Supongo que lo de int* será para comprobar si la memoria se comparte entre los procesos, o algo así.
En línea

nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: Error en el uso del fork()
« Respuesta #6 en: 5 Abril 2014, 13:35 pm »

Si es correcto lo que indicas el proceso padre y el hijo, pero me gustaria saber por que al poner (int*) si logro correr. no capto mucho esa parte.

gracias por responder.
En línea

Lo que se puede imaginar... se puede programar.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Error en el uso del fork()
« Respuesta #7 en: 5 Abril 2014, 13:38 pm »

malloc() retorna un dato del tipo void*, un puntero a void. Tenemos que convertir ese puntero a void, a un puntero a int. Poniendo "(tipo)" antes de un dato, lo convertimos al tipo que queramos (si es posible).

Si tenemos:

Código
  1. float f=1.5;
  2. int n=(int)f;

Así lo transformamos. Este ejemplo es absurdo, ya que esto se hace automáticamente, no es necesario poner el "(int)", pero es para que veas como iría.
En línea

nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: Error en el uso del fork()
« Respuesta #8 en: 5 Abril 2014, 13:42 pm »

creo que entendí gracias por responder y sacarme de las dudas.

saludos y muchas gracias.
En línea

Lo que se puede imaginar... se puede programar.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Error en el uso del fork()
« Respuesta #9 en: 5 Abril 2014, 16:08 pm »

me gustaria saber por que al poner (int*) si logro correr. no capto mucho esa parte.
Ese programa es C y si se compila como tal utilizando la linea de comandos:
Código:
gcc.exe -c -ansi -pedantic -Wall -O main.c -o main.tmp
La compilación ocurre sin ningún problema.

Por otra parte si por alguna extraña razón se compila como C++ con:
Código:
g++.exe -std=c++98 -pedantic -Wall -O -c main.cpp
Se presenta el mensaje que mencionas.

Ello se debe a que en C puedes almacenar un valor de tipo "void *" en una variable de tipo puntero sin importar el tipo apuntado (siempre y cuando sea un puntero a objeto, los punteros a función se manejan aparte) pero en C++ se debe realizar la conversión de forma explicita (ejemplo y solución cortesía de ivancea96).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fork en php
PHP
WHK 0 3,516 Último mensaje 8 Diciembre 2007, 09:26 am
por WHK
Emular MultiHilos (multithread) Sin Fork (FAKE FORK) « 1 2 »
PHP
OzX 14 8,957 Último mensaje 27 Marzo 2009, 00:24 am
por OzX
FORK en java
Java
reylagarto19 7 6,545 Último mensaje 1 Agosto 2012, 20:47 pm
por egyware
fork
Programación C/C++
Pirat3net 1 2,034 Último mensaje 19 Diciembre 2016, 19:48 pm
por ivancea96
problema con fork
Programación C/C++
julio1 3 1,552 Último mensaje 20 Enero 2019, 21:25 pm
por julio1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines