nc 的perl程序,一点小问题

nc 的perl程序,一点小问题

#! /usr/bin/perl -w
use Getopt::Std;
use IO::Socket;
use IO::Handle;
use Thread;

getopts("le:p:", \%arg);#什么意思?
$SIG{INT} = \&Catch_Fun;
$SIG{QUIT} = \&Catch_Fun;#\&Catch_Fun是函数指针吧,SIG 哈希一定要设置么,这个是怎么用到的?
my $sock;
if (defined $arg{l}){
        if (defined $arg{p}){
                my $lsock=IO::Socket::INET->new(Listen=>1,LocalPort=>$arg{p}) || die "Can't Create Listen: $!";
                next unless $sock=$lsock->accept;
                if (defined $arg{e}){
                        *STDIN =$sock;
                        *STDOUT=$sock;
                        exec $arg{e};       
                }else{
                        Thread->new(\&SendMsg);
                        &RecvMsg;
                }
        }
}else{
        $sock=IO::Socket::INET->new(PeerAddr=>$ARGV[0],PeerPort=>$ARGV[1]) || die "Can't connect: $!";       
        Thread->new(\&SendMsg);
        &RecvMsg;
}
sub SendMsg{
        while(<STDIN>){
                print $sock $_;
        }       
}
sub RecvMsg{
        while(<$sock>){
                print $_;
        }
}
sub Catch_Fun{
        die "exit!";
}
------------------------end-----------------------------------------------------------

getopts("le:p:", \%arg);#什么意思?
$SIG{INT} = \&Catch_Fun;
$SIG{QUIT} = \&Catch_Fun;#\&Catch_Fun是函数指针吧,SIG 哈希一定要设置么,这个是怎么用到的?
getopts的问题去看GetOpt::Std的文档
信号处理的部分看自己的程序是否需要, 比方说你不希望你的程序被Ctrl-C打断,那就要设置
$SIG{'INT'}
SIG这个原理是什么?为什么会调用被挂的函数,我知道其中肯定有过程,能把这个过程展示一下么?


QUOTE:
原帖由 grayblaze 于 2008-4-4 20:02 发表
SIG这个原理是什么?为什么会调用被挂的函数,我知道其中肯定有过程,能把这个过程展示一下么?

LZ可以Baidu一下"POSIX 信号定义".
这个。。 你看源码好了


QUOTE:
原帖由 grayblaze 于 2008-4-4 20:02 发表
SIG这个原理是什么?为什么会调用被挂的函数,我知道其中肯定有过程,能把这个过程展示一下么?

有空你可以看看network programming with perl
有很多关於POSIX的介绍...如果还不够...

你可以看看unix的书籍, 尤其有关kernel的...应该都会解释 singal 在干嘛用的....
基本上可能C版或linux/unix 那边会有人比较深入的了解....

上面讲的那本书有很多例子了....你可以先看看...

基本上写Perl..只要知道怎麽用就好了....

要深入的话..建议你去研究C/C++.与linux Kernel..
多谢大家热心解答,特别是apile ,很多地方都能看到你的身影,谢谢:)