Chinaunix首页 | 论坛 | 博客
  • 博客访问: 616416
  • 博文数量: 718
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-17 13:24
文章分类

全部博文(718)

文章存档

2011年(1)

2008年(717)

我的朋友

分类:

2008-10-17 13:36:12

  
  #!/usr/bin/perl -w
  # spd.pl - the SQL*Plus daemon server
  use strict;
  use Expect;
  use Socket;
  
  # set up expect
  # -- timeout after about 10 minutes
  my $timeout = 600;
  # -- scan for the SQL*Plus prompt
  my $prompt = 'SQL>';
  my $exp = new Expect();
  $exp->raw_pty(1);
  $exp->log_stdout(0);
  $exp->spawn('sqlplus','/nolog') || die "unable to spawn sqlplus: $!";
  $exp->expect($timeout,'-ex',$prompt) || die $exp->error();
  print $exp "set sqlprompt $prompt;\n";
  $exp->expect($timeout,'-ex',$prompt) || die $exp->error();
  $exp->clear_accum();
  
  my $name = "/tmp/sp_$ENV{USER}";
  unlink($name);
  socket(S,PF_UNIX,SOCK_STREAM,0) || die "socket: $!";
  bind(S,sockaddr_un($name)) || die "bind: $!";
  listen(S,SOMAXCONN) || die "listen: $!";
  while(accept(C,S))
  {
    # single threaded to avoid confusion
    my $cmd = ;
    $cmd =~ s/[\r\n]*$//g;
    print $exp $cmd,"\n";
    if ($cmd =~ /^exit$/mi)
    {
      print C "exit.\n";
      close C;
      last;
    }
    $exp->expect($timeout,$prompt) || die $exp->error();
    print C $exp->before();
    close C;
  }
  $exp->soft_close();
  close S;
  unlink($name);
  exit;

--------------------next---------------------

阅读(425) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~