⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysio.t

📁 UNIX下perl实现代码
💻 T
字号:
#!./perlprint "1..39\n";chdir('op') || chdir('t/op') || die "sysio.t: cannot look for myself: $!";open(I, 'sysio.t') || die "sysio.t: cannot find myself: $!";$reopen = ($^O eq 'VMS' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'dos' ||	   $^O eq 'mpeix');$x = 'abc';# should not be able to do negative lengthseval { sysread(I, $x, -1) };print 'not ' unless ($@ =~ /^Negative length /);print "ok 1\n";# $x should be intactprint 'not ' unless ($x eq 'abc');print "ok 2\n";# should not be able to read before the buffereval { sysread(I, $x, 1, -4) };print 'not ' unless ($x eq 'abc');print "ok 3\n";# $x should be intactprint 'not ' unless ($x eq 'abc');print "ok 4\n";$a ='0123456789';# default offset 0print 'not ' unless(sysread(I, $a, 3) == 3);print "ok 5\n";# $a should be as followsprint 'not ' unless ($a eq '#!.');print "ok 6\n";# reading past the buffer should zero padprint 'not ' unless(sysread(I, $a, 2, 5) == 2);print "ok 7\n";# the zero pad should be seen nowprint 'not ' unless ($a eq "#!.\0\0/p");print "ok 8\n";# try changing the last two characters of $aprint 'not ' unless(sysread(I, $a, 3, -2) == 3);print "ok 9\n";# the last two characters of $a should have changed (into three)print 'not ' unless ($a eq "#!.\0\0erl");print "ok 10\n";$outfile = 'sysio.out';open(O, ">$outfile") || die "sysio.t: cannot write $outfile: $!";select(O); $|=1; select(STDOUT);# cannot write negative lengthseval { syswrite(O, $x, -1) };print 'not ' unless ($@ =~ /^Negative length /);print "ok 11\n";# $x still intactprint 'not ' unless ($x eq 'abc');print "ok 12\n";# $outfile still intactprint 'not ' if (-s $outfile);print "ok 13\n";# should not be able to write from after the buffereval { syswrite(O, $x, 1, 3) };print 'not ' unless ($@ =~ /^Offset outside string /);print "ok 14\n";# $x still intactprint 'not ' unless ($x eq 'abc');print "ok 15\n";# $outfile still intactif ($reopen) {  # must close file to update EOF marker for stat  close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";}print 'not ' if (-s $outfile);print "ok 16\n";# should not be able to write from before the buffereval { syswrite(O, $x, 1, -4) };print 'not ' unless ($@ =~ /^Offset outside string /);print "ok 17\n";# $x still intactprint 'not ' unless ($x eq 'abc');print "ok 18\n";# $outfile still intactif ($reopen) {  # must close file to update EOF marker for stat  close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";}print 'not ' if (-s $outfile);print "ok 19\n";# default offset 0print 'not ' unless (syswrite(O, $a, 2) == 2);print "ok 20\n";# $a still intactprint 'not ' unless ($a eq "#!.\0\0erl");print "ok 21\n";# $outfile should have grown nowif ($reopen) {  # must close file to update EOF marker for stat  close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";}print 'not ' unless (-s $outfile == 2);print "ok 22\n";# with offsetprint 'not ' unless (syswrite(O, $a, 2, 5) == 2);print "ok 23\n";# $a still intactprint 'not ' unless ($a eq "#!.\0\0erl");print "ok 24\n";# $outfile should have grown nowif ($reopen) {  # must close file to update EOF marker for stat  close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";}print 'not ' unless (-s $outfile == 4);print "ok 25\n";# with negative offset and a bit too much lengthprint 'not ' unless (syswrite(O, $a, 5, -3) == 3);print "ok 26\n";# $a still intactprint 'not ' unless ($a eq "#!.\0\0erl");print "ok 27\n";# $outfile should have grown nowif ($reopen) {  # must close file to update EOF marker for stat  close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";}print 'not ' unless (-s $outfile == 7);print "ok 28\n";# with implicit length argumentprint 'not ' unless (syswrite(O, $x) == 3);print "ok 29\n";# $a still intactprint 'not ' unless ($x eq "abc");print "ok 30\n";# $outfile should have grown nowif ($reopen) {  # must close file to update EOF marker for stat  close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";}print 'not ' unless (-s $outfile == 10);print "ok 31\n";close(O);open(I, $outfile) || die "sysio.t: cannot read $outfile: $!";$b = 'xyz';# reading too much only return as much as availableprint 'not ' unless (sysread(I, $b, 100) == 10);print "ok 32\n";# this we should haveprint 'not ' unless ($b eq '#!ererlabc');print "ok 33\n";# test sysseekprint 'not ' unless sysseek(I, 2, 0) == 2;print "ok 34\n";sysread(I, $b, 3);print 'not ' unless $b eq 'ere';print "ok 35\n";print 'not ' unless sysseek(I, -2, 1) == 3;print "ok 36\n";sysread(I, $b, 4);print 'not ' unless $b eq 'rerl';print "ok 37\n";print 'not ' unless sysseek(I, 0, 0) eq '0 but true';print "ok 38\n";print 'not ' if defined sysseek(I, -1, 1);print "ok 39\n";close(I);unlink $outfile;chdir('..'); 1;# eof

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -