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

pedrosorio

fork() no windows

Recommended Posts

pedrosorio

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!  :)


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
TheDark

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.


Desaparecido.

Share this post


Link to post
Share on other sites
pedrosorio

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


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
nata79

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...

Share this post


Link to post
Share on other sites
Knitter

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.

Share this post


Link to post
Share on other sites
pedrosorio

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


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
TheDark

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?


Desaparecido.

Share this post


Link to post
Share on other sites
pedrosorio

Obrigado pessoal, vou ver essas POSIX Threads


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Rui Carlos

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).

Share this post


Link to post
Share on other sites
TheDark

À 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.


Desaparecido.

Share this post


Link to post
Share on other sites
pmg

... 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.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
TheDark

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.


Desaparecido.

Share this post


Link to post
Share on other sites
Knitter

@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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.