亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pipe.pm

?? perl 解釋器
?? PM
字號:
# IO::Pipe.pm
#
# Copyright (c) 1996 Graham Barr <Graham.Barr@tiuk.ti.com>. All rights
# reserved. This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.

package IO::Pipe;

require 5.000;

use IO::Handle;
use strict;
use vars qw($VERSION);
use Carp;
use Symbol;

$VERSION = "1.0901";

sub new {
    my $type = shift;
    my $class = ref($type) || $type || "IO::Pipe";
    @_ == 0 || @_ == 2 or croak "usage: new $class [READFH, WRITEFH]";

    my $me = bless gensym(), $class;

    my($readfh,$writefh) = @_ ? @_ : $me->handles;

    pipe($readfh, $writefh)
	or return undef;

    @{*$me} = ($readfh, $writefh);

    $me;
}

sub handles {
    @_ == 1 or croak 'usage: $pipe->handles()';
    (IO::Pipe::End->new(), IO::Pipe::End->new());
}

my $do_spawn = $^O eq 'os2';

sub _doit {
    my $me = shift;
    my $rw = shift;

    my $pid = $do_spawn ? 0 : fork();

    if($pid) { # Parent
        return $pid;
    }
    elsif(defined $pid) { # Child or spawn
        my $fh;
        my $io = $rw ? \*STDIN : \*STDOUT;
        my ($mode, $save) = $rw ? "r" : "w";
        if ($do_spawn) {
          require Fcntl;
          $save = IO::Handle->new_from_fd($io, $mode);
          # Close in child:
          fcntl(shift, Fcntl::F_SETFD(), 1) or croak "fcntl: $!";
          $fh = $rw ? ${*$me}[0] : ${*$me}[1];
        } else {
          shift;
          $fh = $rw ? $me->reader() : $me->writer(); # close the other end
        }
        bless $io, "IO::Handle";
        $io->fdopen($fh, $mode);
        $fh->close;

        if ($do_spawn) {
          $pid = eval { system 1, @_ }; # 1 == P_NOWAIT
          my $err = $!;
    
          $io->fdopen($save, $mode);
          $save->close or croak "Cannot close $!";
          croak "IO::Pipe: Cannot spawn-NOWAIT: $err" if not $pid or $pid < 0;
          return $pid;
        } else {
          exec @_ or
            croak "IO::Pipe: Cannot exec: $!";
        }
    }
    else {
        croak "IO::Pipe: Cannot fork: $!";
    }

    # NOT Reached
}

sub reader {
    @_ >= 1 or croak 'usage: $pipe->reader()';
    my $me = shift;
    my $fh  = ${*$me}[0];
    my $pid = $me->_doit(0, $fh, @_)
        if(@_);

    close ${*$me}[1];
    bless $me, ref($fh);
    *{*$me} = *{*$fh};          # Alias self to handle
    bless $fh;                  # Really wan't un-bless here
    ${*$me}{'io_pipe_pid'} = $pid
        if defined $pid;

    $me;
}

sub writer {
    @_ >= 1 or croak 'usage: $pipe->writer()';
    my $me = shift;
    my $fh  = ${*$me}[1];
    my $pid = $me->_doit(1, $fh, @_)
        if(@_);

    close ${*$me}[0];
    bless $me, ref($fh);
    *{*$me} = *{*$fh};          # Alias self to handle
    bless $fh;                  # Really wan't un-bless here
    ${*$me}{'io_pipe_pid'} = $pid
        if defined $pid;

    $me;
}

package IO::Pipe::End;

use vars qw(@ISA);

@ISA = qw(IO::Handle);

sub close {
    my $fh = shift;
    my $r = $fh->SUPER::close(@_);

    waitpid(${*$fh}{'io_pipe_pid'},0)
	if(defined ${*$fh}{'io_pipe_pid'});

    $r;
}

1;

__END__

=head1 NAME

IO::pipe - supply object methods for pipes

=head1 SYNOPSIS

	use IO::Pipe;

	$pipe = new IO::Pipe;

	if($pid = fork()) { # Parent
	    $pipe->reader();

	    while(<$pipe> {
		....
	    }

	}
	elsif(defined $pid) { # Child
	    $pipe->writer();

	    print $pipe ....
	}

	or

	$pipe = new IO::Pipe;

	$pipe->reader(qw(ls -l));

	while(<$pipe>) {
	    ....
	}

=head1 DESCRIPTION

C<IO::Pipe> provides an interface to createing pipes between
processes.

=head1 CONSTRCUTOR

=over 4

=item new ( [READER, WRITER] )

Creates a C<IO::Pipe>, which is a reference to a newly created symbol
(see the C<Symbol> package). C<IO::Pipe::new> optionally takes two
arguments, which should be objects blessed into C<IO::Handle>, or a
subclass thereof. These two objects will be used for the system call
to C<pipe>. If no arguments are given then method C<handles> is called
on the new C<IO::Pipe> object.

These two handles are held in the array part of the GLOB until either
C<reader> or C<writer> is called.

=back

=head1 METHODS

=over 4

=item reader ([ARGS])

The object is re-blessed into a sub-class of C<IO::Handle>, and becomes a
handle at the reading end of the pipe. If C<ARGS> are given then C<fork>
is called and C<ARGS> are passed to exec.

=item writer ([ARGS])

The object is re-blessed into a sub-class of C<IO::Handle>, and becomes a
handle at the writing end of the pipe. If C<ARGS> are given then C<fork>
is called and C<ARGS> are passed to exec.

=item handles ()

This method is called during construction by C<IO::Pipe::new>
on the newly created C<IO::Pipe> object. It returns an array of two objects
blessed into C<IO::Pipe::End>, or a subclass thereof.

=back

=head1 SEE ALSO

L<IO::Handle>

=head1 AUTHOR

Graham Barr <bodg@tiuk.ti.com>

=head1 COPYRIGHT

Copyright (c) 1996 Graham Barr. All rights reserved. This program is free
software; you can redistribute it and/or modify it under the same terms
as Perl itself.

=cut

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久精品网| 欧美日韩精品三区| 日韩久久久精品| 一区二区三区日韩精品视频| 日本少妇一区二区| 91丨国产丨九色丨pron| 2020国产精品自拍| 免费在线观看日韩欧美| 欧美日韩一区二区三区高清 | 国产69精品久久久久777| 欧美精品在欧美一区二区少妇| 亚洲人成小说网站色在线| 国产·精品毛片| 久久一区二区视频| 亚洲一区在线观看免费观看电影高清| 不卡视频在线观看| 国产欧美一区二区精品忘忧草 | 久久综合九色综合97婷婷| 日韩精品亚洲专区| 欧美欧美欧美欧美首页| 亚洲国产日日夜夜| 成人一级视频在线观看| 久久这里只有精品首页| 美女一区二区三区| 制服丝袜亚洲色图| 免费日韩伦理电影| 91精品婷婷国产综合久久 | 久久婷婷国产综合国色天香| 久久黄色级2电影| 欧美一区日本一区韩国一区| 亚洲1区2区3区4区| 欧美日韩一级大片网址| 亚洲国产精品综合小说图片区| 欧美亚洲综合网| 一区二区三区日韩精品| 色94色欧美sute亚洲13| 夜夜精品浪潮av一区二区三区| 欧美在线一二三四区| 丝袜亚洲另类欧美| 欧美zozozo| 成人三级伦理片| 一区二区三区在线播放| 91精品综合久久久久久| 国产一区二三区| 国产精品国产三级国产普通话99| 日本电影欧美片| 奇米综合一区二区三区精品视频 | 欧美视频一区在线观看| 秋霞电影一区二区| 中文字幕第一区二区| 91久久精品午夜一区二区| 秋霞国产午夜精品免费视频| 国产视频一区二区在线| 一本色道**综合亚洲精品蜜桃冫| 无码av中文一区二区三区桃花岛| 欧美不卡一区二区三区四区| 99久久亚洲一区二区三区青草| 亚洲一区二区四区蜜桃| 欧美精品一区二区三区很污很色的| 成人免费视频免费观看| 亚洲不卡一区二区三区| 久久一区二区三区四区| 91官网在线免费观看| 国产最新精品免费| 亚洲乱码国产乱码精品精98午夜| 日韩一区国产二区欧美三区| 成人免费观看男女羞羞视频| 亚洲成人综合视频| 欧美国产视频在线| 91精品国产一区二区人妖| 风间由美性色一区二区三区| 午夜视频一区二区| 国产欧美一区二区三区鸳鸯浴 | 亚洲成人动漫精品| 欧美激情资源网| 正在播放亚洲一区| 99re热这里只有精品视频| 日本aⅴ精品一区二区三区| 亚洲婷婷国产精品电影人久久| 日韩一区二区电影| 91免费精品国自产拍在线不卡| 久久精品av麻豆的观看方式| 一区二区在线观看不卡| 久久婷婷国产综合国色天香| 欧美人狂配大交3d怪物一区| 成人av集中营| 蜜桃精品视频在线| 亚洲综合在线电影| 国产亚洲一二三区| 制服视频三区第一页精品| 色一情一乱一乱一91av| 国产精品一区二区无线| 日本特黄久久久高潮| 一区二区三区免费| 中文字幕不卡在线观看| 日韩美女一区二区三区四区| 欧美视频自拍偷拍| 94-欧美-setu| 风间由美一区二区av101| 蜜臀av性久久久久蜜臀aⅴ| 亚洲一区在线播放| 亚洲私人影院在线观看| 国产蜜臀av在线一区二区三区| 精品国产一区二区亚洲人成毛片| 欧美手机在线视频| 色呦呦网站一区| 国产成人精品亚洲午夜麻豆| 美女脱光内衣内裤视频久久网站 | 日韩毛片高清在线播放| 日本一区二区三级电影在线观看| 欧美tickle裸体挠脚心vk| 欧美一二三区精品| 欧美精品少妇一区二区三区| 在线观看91视频| 色婷婷久久99综合精品jk白丝| 成人深夜福利app| 国产成人综合视频| 国内精品伊人久久久久av一坑| 免费在线观看成人| 日韩成人一区二区| 天堂va蜜桃一区二区三区漫画版| 亚洲一区二区三区在线| 一区二区三区在线观看国产| 亚洲欧美韩国综合色| 自拍偷拍亚洲欧美日韩| 1000精品久久久久久久久| 国产欧美精品区一区二区三区 | 欧美成人女星排名| 欧美大度的电影原声| 日韩一区二区影院| 制服丝袜中文字幕亚洲| 91麻豆精品国产91久久久资源速度| 欧美日韩你懂的| 欧美乱妇15p| 91麻豆精品国产| 日韩一级片在线播放| 91麻豆精品国产91久久久| 欧美一区二区三区视频免费| 欧美一区二区在线视频| 欧美一级欧美三级在线观看| 555夜色666亚洲国产免| 欧美一区二区日韩一区二区| 91精品国产91久久久久久最新毛片 | 91免费精品国自产拍在线不卡| 91色在线porny| 色av综合在线| 欧美日本韩国一区二区三区视频 | 欧美mv和日韩mv的网站| 久久综合九色综合97婷婷| 久久久777精品电影网影网 | 美日韩黄色大片| 国产在线国偷精品免费看| 国产成人aaa| 99在线精品视频| 色婷婷国产精品综合在线观看| 欧美性生交片4| 日韩一区二区高清| 国产亚洲综合在线| 中文字幕欧美一| 亚洲午夜久久久久| 日本欧美一区二区在线观看| 久久99精品国产| 丁香五精品蜜臀久久久久99网站| 91色在线porny| 欧美一区二区三区四区视频 | 久久久亚洲精品一区二区三区| 国产欧美日韩另类视频免费观看| 国产精品久久毛片a| 亚洲国产精品一区二区www| 麻豆国产精品一区二区三区| 国产在线精品一区二区夜色 | 欧美中文字幕久久| 日韩欧美国产综合一区| 中文字幕 久热精品 视频在线| 一区二区三区不卡视频| 轻轻草成人在线| 成人性生交大合| 欧美群妇大交群中文字幕| 久久亚洲综合色| 亚洲色图欧洲色图婷婷| 日av在线不卡| proumb性欧美在线观看| 欧美男同性恋视频网站| 久久精品人人爽人人爽| 伊人开心综合网| 精品一区二区在线看| 色综合网站在线| 日韩精品一区二区三区四区视频| 中文字幕乱码亚洲精品一区| 亚洲午夜久久久久久久久电影院| 国产专区欧美精品| 欧美羞羞免费网站| 久久精品亚洲精品国产欧美| 亚洲一区在线观看视频| 国产精品亚洲第一区在线暖暖韩国 | 亚洲精品一区二区三区精华液| 日韩伦理电影网| 激情久久五月天| 在线观看日韩电影| 久久久综合激的五月天|