随笔分类 - Perl语言
摘要:定义好了一个可以输出带颜色行号以及行数据的函数print_with_line_num,f()是测试函数。在f()函数中,读取文件并输出读取的每一行数据,但根据参数选项决定是普通输出行还是同时输出带颜色行号的行数据。 这可以当作是偏函数、闭包、作用域的一个用法示例。 脚本内容如下: 下面是测试效果:
阅读全文
摘要:概念 僵尸进程 :当子进程退出时,父进程还没有(使用wait或waitpid)接收其退出状态时,子进程就成了僵尸进程 孤儿进程 :当子进程还在运行时,父进程先退出了,子进程就会成为孤儿进程被pid=1的init/systemd进程收养 需要说明的是,僵尸进程的父进程死掉后,僵尸进程也会被pid=1的
阅读全文
摘要:获取主机名、用户、组、网络信息相关函数 首先是获取主机名的方式,Perl提供了 模块,可以查询当前的主机名: Perl中提供了下面一大堆的内置函数用来获取用户、组、网络相关的信息。这些perl函数在C中也都有对应的函数。 从动作上分为3类: getXXX:获取信息操作 setXXX:设置操作 end
阅读全文
摘要:sysopen() open()和sysopen()都打开文件句柄,open()是比较高层次的打开文件句柄,sysopen()相对要底层一点。但 它们打开的文件句柄并没有区别 ,只不过sysopen()有一些自己的特性:可以使用几个open()没有的flag,可以指定文件被创建时的权限等。 一定要注
阅读全文
摘要:文件句柄和文件描述符的关系 文件描述符是操作系统的资源,对于实体文件来说,每打开一次文件,操作系统都会为该进程分配一个文件描述符来关联(指向)这个文件,以后操作文件数据都根据这个文件描述符来操作,而不是文件名。就像对文件句柄的操作一样。 实际上,文件句柄、文件描述符和实体文件的关系存在层次上的关系。
阅读全文
摘要:文件锁 当多个进程或多个程序都想要修同一个文件的时候,如果不加控制,多进程或多程序将可能导致文件更新的丢失。 例如进程1和进程2都要写入数据到a.txt中,进程1获取到了文件句柄,进程2也获取到了文件句柄,然后进程1写入一段数据,进程2写入一段数据,进程1关闭文件句柄,会将数据flush到文件中,进
阅读全文
摘要:随机读写 如果一个文件句柄是指向一个实体文件的,那么就可以对它进行随机数据的访问(包括随机读、写),随机访问表示可以读取文件中的任何一部分数据或者向文件中的任何一个位置处写入数据。 实现这种随机读写的功能依赖于一个文件读写位置指针(file pointer) 。 当一个文件句柄关联到了一个实体文件后
阅读全文
摘要:read()函数 read()函数用于从文件句柄中读取指定字节数的数据并写入到一个标量中。如果文件句柄是以Unicode方式打开的,则表示读取指定字符数而非字节数。 有两种read方式: 三参数的read表示从FH文件句柄中读取len字节长度的数据放进标量变量 中。四参数的read稍后解释。 例如:
阅读全文
摘要:三篇Perl IO基础类文章: "Perl的IO操作(1):文件句柄" "Perl的IO操作(2):更多文件句柄的模式" "Perl文件句柄相关的常见变量" IO对象和IO\:\:Module家族模块 无论是哪种高级编程语言,都提供了较底层的操作系统层IO能力,也提供了更高层次的封装来实现语言级别的
阅读全文
摘要:线程数据共享 在介绍Perl解释器线程的时候一直强调, Perl解释器线程在被创建出来的时候,将从父线程中拷贝数据到子线程中,使得数据是线程私有的,并且数据是线程隔离的。如果真的想要在线程间共享数据,需要显式使用 模块来扩展threads模块的功能 。这个模块必须在先导入了threads模块的情况下
阅读全文
摘要:(Thread\:\:Queue)队列数据结构(FIFO)是线程安全的 ,它保证了某些线程从一端写入数据,另一些线程从另一端读取数据。只要队列已经满了,写入操作就自动被阻塞直到有空间支持写操作,只要队列空了,读取操作就会自动阻塞直到队列中有数据可读。这种模式自身就保证了线程安全性。 创建队列 new
阅读全文
摘要:线程简介 线程(thread)是轻量级进程,和进程一样,都能独立、并行运行,也由父线程创建,并由父线程所拥有,线程也有线程ID作为线程的唯一标识符,也需要等待线程执行完毕后收集它们的退出状态(比如使用 收尸),就像waitpid对待子进程一样。 线程运行在进程内部,每个进程都至少有一个线程,即mai
阅读全文
摘要:本文介绍的Perl进程间数据共享内容主体来自于《Pro Perl》的第21章。 IPC简介 通过fork创建多个子进程时,进程间的数据共享是个大问题,要么建立一个进程间通信的通道,要么找到一个两进程都引用的共享变量。本文将介绍Unix IPC的近亲System V IPC:message queue
阅读全文
摘要:不同进程之间的通信或进程间通信(InterProcess Communication, IPC),是一个涉及多个方面的主题。Perl提供了多种进程间通信的方式,本文将逐一介绍。本文的内容主体来自于《Pro Perl》的第21章。 单向管道(unidirectional pipe) 管道是两个文件描述
阅读全文
摘要:本文关于处理子进程退出状态码的内容主体来自于《Pro Perl》的第21章。 子进程退出状态码 每个子进程在退出时,操作系统都会保留它们的退出状态码,并在内核维护的进程表中保留子进程项。对于进程的退出状态码,只有在父进程读走之后或者收走(reap)之后才会被清除 。注意这里的一个词语“ 收走(rea
阅读全文
摘要:本文关于Perl进程的内容主体来自于《Pro Perl》的第21章。 创建新进程 Perl中可以使用 函数来创建新的进程,它会调用操作系统的fork系统调用来创建新进程。 fork是Unix系统中的函数,在Windows中不原生支持fork。但从Perl 5.8开始,Perl提供了一个模拟的fork
阅读全文
摘要:本文关于Perl信号处理的内容主体来自于《Pro Perl》的第21章。 信号处理 操作系统可以通过信号(signal)处理机制来实现一些功能:程序注册好待监视的信号处理机制,在程序运行过程中如果产生了对应的信号,则会按照注册好的处理方式进行处理。 signal基础 每个进程都记录了一个信号(sig
阅读全文
摘要:本文介绍Perl标准库 中的列表工具,有时候它们非常好用。比如Perl中测试列表中是否包含某个元素(某个元素是否存在于列表中)没有比较直接比较方便的功能,但使用 中的first或any函数,则非常方便且高效。此外,该模块都有对应的C代码的函数,所以它们的效率也不差。 可以将 模块中的功能大致分为3类
阅读全文
摘要:perl一行式程序系列文章 : "Perl一行式" 对于Perl的一行式perl程序来说,选择要输出的、要删除的、要插入/追加的行是非常容易的事情,因为print/say决定行是否输出/插入/追加/删除。虽然简单,但对于广泛应用在sed的示例还是可以拿到这里来讨论一番。 因为输出/删除/插入/追加行
阅读全文
摘要:perl一行式程序系列文章 : "Perl一行式" 文本大小写转换 全部字符转换成大写或小写,有几种方式: 每行首字母大小写转换: 单词首字母大写,其它小写: 修剪前缀、后缀空白 去掉前缀空白的方式: 去掉后缀空白的方式: 同时去掉前缀和后缀空白: 反序输出所有段落 前面的文章 "压缩连续的空行"
阅读全文