How to use fork() in unix? Why not something of the form fork(pointerToFunctionToRun)?

前端 未结 8 2255
盖世英雄少女心
盖世英雄少女心 2021-02-06 05:01

I am having some trouble understanding how to use Unix\'s fork(). I am used to, when in need of parallelization, spawining threads in my application. It\'s always s

8条回答
  •  野的像风
    2021-02-06 05:47

    You fork whenever you want to more than one thing at the same time. It’s called multitasking, and is really useful.

    Here for example is a telnetish like program:

    #!/usr/bin/perl
    use strict;
    use IO::Socket;
    my ($host, $port, $kidpid, $handle, $line);
    
    unless (@ARGV == 2) { die "usage: $0 host port" }
    ($host, $port) = @ARGV;
    
    # create a tcp connection to the specified host and port
    $handle = IO::Socket::INET->new(Proto     => "tcp",
                                    PeerAddr  => $host,
                                    PeerPort  => $port)
           or die "can't connect to port $port on $host: $!";
    
    $handle->autoflush(1);              # so output gets there right away
    print STDERR "[Connected to $host:$port]\n";
    
    # split the program into two processes, identical twins
    die "can't fork: $!" unless defined($kidpid = fork());
    
    if ($kidpid) {                      
        # parent copies the socket to standard output
        while (defined ($line = <$handle>)) {
            print STDOUT $line;
        }
        kill("TERM" => $kidpid);        # send SIGTERM to child
    }
    else {                              
        # child copies standard input to the socket
        while (defined ($line = )) {
            print $handle $line;
        }
    }
    exit;
    

    See how easy that is?

提交回复
热议问题