
Suspendido
Aquí está mi código (creado solo para probar fork()):
#include <stdio.h>
#include <ctype.h>
#include <limits.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
int pid;
pid=fork();
if (pid==0) {
printf("I am the child\n");
printf("my pid=%d\n", getpid());
}
return 0;
}
Recibo las siguientes advertencias:
warning: implicit declaration of function 'fork'
undefined reference to 'fork'
¿Qué tiene de malo?

strcat
unistd.h
y fork
son parte de la estándar POSIX. No están disponibles en Windows (text.exe
en su comando gcc indica que no está en * nix).
Parece que estás usando gcc como parte de MinGWque proporciona la unistd.h
encabezado pero no implementa funciones como fork
. Cygwin lo hace proporcionar implementaciones de funciones como fork
.
Sin embargo, dado que se trata de una tarea, ya debería tener instrucciones sobre cómo obtener un entorno de trabajo.

jonathan leffler
Usted tiene #include <unistd.h>
cuál es dónde fork()
se declara.
Entonces, probablemente necesite decirle al sistema que muestre las definiciones POSIX antes de incluir los encabezados del sistema:
#define _XOPEN_SOURCE 600
Puede usar 700 si cree que su sistema es mayormente compatible con POSIX 2008, o incluso 500 para un sistema más antiguo. Porque fork()
ha existido desde siempre, aparecerá con cualquiera de esos.
Si está compilando con -std=c99 --pedantic
todas las declaraciones para POSIX se ocultarán a menos que las solicite explícitamente como se muestra.
También puedes jugar con _POSIX_C_SOURCE
pero usando _XOPEN_SOURCE
implica la correcta correspondiente _POSIX_C_SOURCE
(y _POSIX_SOURCE
y así).
Como ya notó, fork() debe definirse en unistd.h, al menos de acuerdo con las páginas man que vienen con Ubuntu 11.10. El mínimo:
#include <unistd.h>
int main( int argc, char* argv[])
{
pid_t procID;
procID = fork();
return procID;
}
…compila sin advertencias el 11.10.
Hablando de eso, ¿qué distribución de UNIX/Linux estás usando? Por ejemplo, he encontrado varias funciones no destacables que deberían definirse en los encabezados de Ubuntu 11.10 y no lo están. Tal como:
// string.h
char* strtok_r( char* str, const char* delim, char** saveptr);
char* strdup( const char* const qString);
// stdio.h
int fileno( FILE* stream);
// time.h
int nanosleep( const struct timespec* req, struct timespec* rem);
// unistd.h
int getopt( int argc, char* const argv[], const char* optstring);
extern int opterr;
int usleep( unsigned int usec);
Mientras estén definidos en su biblioteca C, no será un gran problema. Simplemente defina sus propios prototipos en un encabezado de compatibilidad e informe los problemas del encabezado estándar a quien mantenga la distribución de su sistema operativo.
Creo que tienes que hacer lo siguiente en su lugar:
pid_t pid = fork();
Para obtener más información sobre la API de Linux, vaya a esta página del manual en líneao incluso acceda a su terminal ahora mismo y escriba,
man fork
¡Buena suerte!
¿Tiene instalados los encabezados de su biblioteca C? ¿Cómo estás invocando a tu compilador?
– Ley de karité
8 de marzo de 2012 a las 2:59
gcc test.c -pedantic -Wall -o test.exe
– Suspendido
8 de marzo de 2012 a las 3:01
¿estás seguro de que fork() es parte de stdio.h? no es de acuerdo a cplusplus.com/reference/clibrary/cstdio. ¿tal vez hay un conflicto con otro archivo de encabezado que está incluyendo?
– moesef
8 de marzo de 2012 a las 3:02
Aparentemente es parte de ¿Cómo puede estar en conflicto con lo que incluí?
– Suspendido
8 de marzo de 2012 a las 3:09
@user1166935: ¿Qué sistema operativo estás usando? ¿Es posible que tengas un mal
unistd.h
archivo por alguna razón?–Keith Thompson
8 de marzo de 2012 a las 3:34