我现在想移植linux下的程序到windows中,但程序中有fork()函数
我想问,在windows下应该如何替换,是用多线程,还是其他机制
    本人没有移植经验,想问有哪些网站介绍一些移植方面的知识

解决方案 »

  1.   

    linux fork function same to
    CreateProcess,ShellExecuteEx,WinExec in win32
      

  2.   

    fork是复制一个进程
    CreateProcess吧!
      

  3.   

    fork好象与CreateProcess不同,fork会将当前进程的部分运行状态复制 了,比如执行fork后该执行哪一句,而CreateProcess只是从头开始执行一个进程。
      

  4.   

    程序分歧fork()fork()会产生一个与父程序相同的子程序,唯一不同之处在於其processid(pid)。如果我们要撰写守护神程式,或是例如网路伺服器,需要多个行程来同时提供多个连线,可以利用fork()来产生多个相同的行程。函数宣告
    pid_t fork(void);
    pid_t vfork(void);返回值:
    -1 : 失败。0 : 子程序。>0 : 将子程序的process id传回给父程序。在Linux下fork()及vfork()是相同的东西。范例一: fork.c在这个范例中,我们示范fork()的标准用法。
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>void main(void)
    {
    pid_t pid;
    printf("hello\n");
    pid = fork();switch (pid) {case -1: printf("failure!\n"); break;case 0: printf("I am child!\n"); break;default: printf("my child is %d\n",pid); break;}for (;;) { /* do something here */ }
    }编译:gcc -o ex1 fork.c执行结果:./ex1 &
    hello
    my child is 8650
    I am child!我们可以见到,使用fork(),可将一个程式分岐成两个。在分歧之前的程式码只执行一次。检验行程:ps | grep ex18649 p0 R 0:40 ./ex18650 p0 R 0:40 ./ex18649是父程序的pid,8650则为子程序的pid。您会需要用到"killall ex1"来杀掉两个行程。