zoukankan      html  css  js  c++  java
  • perl学习之文件句柄filehandle

    句柄handle 分为文件句柄和目录句柄,文件句柄实际上包含文件,进程和套接字的读写。
     
    文件句柄的操作步骤
    open(FD,"filename");
    @lines=<FD>;
    close(FD);
     
    open()由以下几个用法
    open(FD,"> filename") 写数据进文件
    open(FD,">> filename") 追加数据进文件
    open(FD,"filename") 读文件
    open(FD,"process |") 读进程结果
    open(FD,"| to process") 往进程中写数据,不过对WINDOWS系统写会有问题
     
    $line=<FD> 获取起始行
    如果要遍历整个文件
    while (defined $line=<FD>) {}
     
    @lines=<FD> 将整个文件放入lines数组中
     
    可以使用FileHandle包,可以避免变量覆盖的现象。
    use FileHandle;
    $fileHandleName= new FileHandle("filename");
    $line=<$fileHandleName>;
     
    close() 关闭文件句柄
    实际上,perl会在句柄超出范围或程序结束时,自动关闭。
     
    写入操作
    print (@arrayName) 或 print FILEHANDLENAME (@arrayName)
     
    也可以用以下方式来写入
    foreach $line(@arrayName)
    {
        print FILEHANDLENAME "$line ";
    }
     
    使用$line的好处是,程序在运行时,会将$line的值立即放入文件中。而使用@arrayname的方式会先放入缓存中累积,如果出现进程中断,会倒是输出数据丢失。如果要避免这个问题出现可以把$|设置为1
     
    对二进制文件的读写
    使用binmode FILEHANDLE
    具体实例
    open(IN_FD,"test.gif");
    open(OUT_FD," > copy.gif");
    binmode(IN_FD);
    binmode(OUT_FD);
     
     
    while(read(IN_FD,$buffer,1024){
         print OUT_FD,$buffer;
    }
     
    close(IN_FD);
    close(OUT_FD);
     
     
    select(FILEHANDLE) 用于设定输出的默认句柄
    在select指定句柄后,随后输出在默认情况下,会输出到指定的句柄
     
    open(FD,"> newfile");
    select(FD);
    print "test"; #将test添加到newfile中
    select(STDOUT);
    print "ok";  #将ok输出到屏幕
     
    flock()文件加锁,只适用unix,其他系统或网络文件可能无效
    1 创建共享锁  2 创建排他锁  4 创建非阻塞锁 8 排除当前锁 
     
    open(FD,">> inputfile");
    flock(FD,2);
    print FD "test string";
    flock(FD,8);
    close(FD);
     
     
    seek()使用,可以让文件指针指向到指定位置
    seek(FILEHANDLE,BYTEOFFSET,FILEPOSITION)
    BYTEOFFSET 用于位移值,可以是正负值
    FILEPOSITION 位置值,0表示到文件开头,1文件中的当前位置,2文件末尾位置
     
    tell()返回文件中当前字节的位置
     
    打开文件进行读写的操作
    open(FD,"+<filename") 先读后写
    open(FD,"+>filename") 先写后读
    open(FD,"+>>filename") 先追加后读
  • 相关阅读:
    JS中的this
    函数作用域
    全局作用域与变量的声明提前
    立即执行函数与For. . .in语句
    实参可以是任何值
    函数的参数和返回值
    JavaScript创建函数的三种方式
    JavaScript属性名和属性值
    十进制浮点数转换为二进制
    冰雹猜想或角谷定理
  • 原文地址:https://www.cnblogs.com/chip/p/4282204.html
Copyright © 2011-2022 走看看