• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrosorio

fork() no windows

14 mensagens neste tópico

Estava a ver se aprendia qualquer coisinha nova e achei que multithreading era capaz de ser interessante. No entanto estou com azar. Tentei compilar o seguinte código em DevC++ e deu-me "  [Linker error] undefined reference to `fork' ":

#include <stdio.h>
#include <stdlib.h>

main() 
{ int return_value;

	 printf("Forking process\n");
	 fork();
	 printf("The process id is %d and return value is %d\n",getpid(), return_value);
	 execl("/bin/ls/","ls","-l",0);
	 printf("This line is not printed\n");
}

EDIT: Okok... Já vi que é só em sistemas UNIX. Esta coisa de ter que estar a inventar (e aprender) código para diferentes SO's numa linguagem supostamente "muito portável" é uma seca!  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O multi-threading não faz parte da linguagem. A linguagem C não foi desenhada com isso em mente. Para se utilizar multithreading com C é necessário recorrer às bibliotecas específicas de cada S.O.

A menos que encontres uma framework multi-plataforma que implemente as chamadas necessárias numa interface comum.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a ver... C++ também não foi desenhada com multithreading em mente? Que linguagens têm multithreading de raíz?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a ver... C++ também não foi desenhada com multithreading em mente? Que linguagens têm multithreading de raíz?

não estou muito dentro deste assunto, mas penso que a forma como o multithreading é implementado deve variar de SO para SO, portanto não me parece que alguma linguagem tenha isso de raiz...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que me lembre de repente: Java, todas as que correrem em .net/Mono devido à plataforma, logo C++, C#, VB e J# e Delphi creio que também tinha. Destas a única que tenho a certeza que tem multithreading de raíz no desenho é Java.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, obrigado. Estava mesmo a pensar usar C, vou ter que decidir se prefiro aprender a fazer isso em linux ou em windows =X

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

C++/CLI tem multithreading "de raíz" graças ao suporte dado pela .NET Framework. C++ standard não tem suporte multithreading.

Como o Knitter disse, Java e as linguagens com base em .NET são multiplataforma (contando com o projecto Mono) e implementam multithreading.

@Knitter: Delphi tem suporte para .NET?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora, com o fork ias ter multiprocessos, e não multithreading. Processos e threads são um pouco diferentes.

Caso queiras continuar no C, o OpenMP é capaz de ser algo interessante (se bem que não sei como é o suporte para esta tecnologia no windows).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

À luz do que o Rui Carlos disse (e porque eu desatei à bruta a falar em threads :P ), a função em Windows correspondente à fork é a CreateProcess.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

... a função em Windows correspondente à fork é a CreateProcess.

Não é bem a mesma coisa ...

Process Management

Unix developers use fork( ) for two purposes, and there is no single Win32 substitute for these tasks. Most often, developers use fork( ) in the course of loading other applications. In these cases, fork( ) immediately precedes exec( ) (or another member of the exec( ) family).

Link

Encontrei uma página que fala das diferenças entre C em Linux, C em Windows, e Java. Não a li com atenção, mas parece uma página interessante.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não disse que era exactamente o mesmo, até porque a CreateProcess leva uma carrada de parâmetros. Disse que era a correspondente no sentido de que é a que me parece que mais se aproxima da funcionalidade da fork. Até porque não sei muito de processos e threads em *nix.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Knitter: Delphi tem suporte para .NET?

É mais o .Net tem suporte para Delphi. Não sei como está isso agora mas a Borland chegou a implementar o Delphi em .net, uma das últimas versões que usei, com o Turbo Delphi Explorer, vinha em versão win32 ou .net, sendo que escolhias uma ou outra devido à licença do IDE.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora