Chinaunix
标题:
nc 的perl程序,一点小问题
[打印本页]
作者:
grayblaze
时间:
2008-04-04 19:00
标题:
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 哈希一定要设置么,这个是怎么用到的?
作者:
Nosferatu
时间:
2008-04-04 19:48
getopts的问题去看GetOpt::Std的文档
信号处理的部分看自己的程序是否需要, 比方说你不希望你的程序被Ctrl-C打断,那就要设置
$SIG{'INT'}
作者:
grayblaze
时间:
2008-04-04 20:02
标题:
回复 #2 Nosferatu 的帖子
SIG这个原理是什么?为什么会调用被挂的函数,我知道其中肯定有过程,能把这个过程展示一下么?
作者:
gsging
时间:
2008-04-07 23:42
原帖由
grayblaze
于 2008-4-4 20:02 发表
SIG这个原理是什么?为什么会调用被挂的函数,我知道其中肯定有过程,能把这个过程展示一下么?
LZ可以Baidu一下"POSIX 信号定义".
作者:
Nosferatu
时间:
2008-04-08 00:19
标题:
回复 #3 grayblaze 的帖子
这个。。 你看源码好了
作者:
apile
时间:
2008-04-08 09:40
原帖由
grayblaze
于 2008-4-4 20:02 发表
SIG这个原理是什么?为什么会调用被挂的函数,我知道其中肯定有过程,能把这个过程展示一下么?
有空你可以看看network programming with perl
有很多关於POSIX的介绍...如果还不够...
你可以看看unix的书籍, 尤其有关kernel的...应该都会解释 singal 在干嘛用的....
基本上可能C版或linux/unix 那边会有人比较深入的了解....
上面讲的那本书有很多例子了....你可以先看看...
基本上写Perl..只要知道怎麽用就好了....
要深入的话..建议你去研究C/C++.与linux Kernel..
作者:
grayblaze
时间:
2008-04-08 11:17
多谢大家热心解答,特别是apile ,很多地方都能看到你的身影,谢谢:)
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2