十一、文件测试
-op expr if(-e “filea”){print STDERR(“file1/n”):} 文件是否存在.
-b是否为块设备 -c是否为字符设备
-d是否为目录 -e文件是否存在
-f是否为普通文件 -g是否设置了setgid位
-k是否设置了sticky位 -l是否为符号连接
-o是否拥有该文件 -p是否为管道
-r是否可读 -s是否非空
-t是否表示终端 -u是否设置setuid位
-w是否可写 -x是否可执行 -z是否为空文件
-A距上次访问多长时间
-B是否为二进制文件
-C距上次访问文件的inode多长时间
-M距上次修改多长的时间
-O是否只为”真正的用户”所拥有
-R是否只有”真正的用户”可读
-S是否为socket -T是否为文本文件
-W是否只有”真正的用户”可写
-X是否只有”真正的用户”可执行
-s返回文件长度,-A-C-M返回的天数.
十二、文件状态
stat(file):参数可为文件名,也可为文件句柄,返回文件状态的列表。
编号 名字 unix windows
0 dev 设备号 c:=2,d:=3
1 ino 索引节点 总是0
2 mode 模式 无
3 nlink 链接号 0
4 uid 文件所有者 0
5 gid 文件组 0
6 rdev 特殊文件信息,设备类型 驱动器号
7 size 文件大小 文件大小
8 atime 上次访问时间 上次访问时间
9 mtime 上次修改时间 上次修改时间
10 ctime inode修改时间 文件创建时间
11 blksz 磁盘块大小 0
12 Blocks 文件的块数 0
utime(acctime,modtime,filelist):修改时间戳,修改访问时间,返回成功修改的文件数.
十三、文件操作
Glob:
@a=glob(“*.txt”)返回与模式匹配的所有文件目录,如果赋值给简单变量则一次返回一个文件。
参数可以是文件名或目录.
只能接受有限的文件数,报文件太多错误,用shell来执行。
因为用shell来解释执行,故运行速度慢。
另一种形式是@a=<*.txt>是古老的用法,推荐用glob.
truncate(file,lenght):将文件的长度减少到length字节,如果文件长度已经小于length,
则不做任何事.其中filename可以为文件名,也可以为文件变量.
rename(old,new)成功=1 可以从一个目录移动到另一个目录,不检查new是否存在,可能破坏文件.
-e “file2″||rename(file1,file2) 先检查再移动
十四、文件链接
link(文件名,链接名)
创建现有文件的链接-硬链接,file是被链接的文件,newlink是被创建的链接。
成功返回真,失败返回假.
当删除这两个链接中的一个时,还可以用另一个来访问该文件。
synlink符号链接(文件名,链接名)创建现有文件的符号链接,即指向文件名,而不是指向
文件本身,当原文件被删除(如:被unlinke函数删除),则被创建链接不可用,除非再创建
一个与原被链接的文件同名的文件.
Readlink(linkname)跟踪符号链接,如果linkname为符号链接文件,返回其实际指向的文件。
否则返回空串。
unlink(filelist)=成功删除的文件数,删除文件或$_中的文件,参数为文件名列表,返回值为
实际删除的文件数目.
此函数之所以叫unlink而不叫delete是因为它实际所做的是删除文件的链接。
十五、目录操作
opendir(dirvar,dirname) 打开目录,查看某目录中文件列表时也要先打开,再操作,再关闭,
参数为:
dirvar:目录变量,dirname:目录名,成功返回真值,失败返回假。
closedir(dir):关闭目录
readdir(dir):对数组返回所有文件和目录,对简单变量每次返回一个文件或目录,不含当前路径。
chdir(dir):改变目录,运行完返回原目录,成功为真,失败为假.
telldir(dir):当前目录位置
seekdir(dir,loc):到指定位置
rewinddir(dir):目录位置指向目录第一项.
mkdir(dirname,permission):创建目录(当前目录,访问权限)
rmdir(dirname):只能删除空目录,成功则返回真,失败返回假.
十六、小结
1.概念:描述符,句柄,缓冲,访问模式,权限,文件状态.
2.文件访问:打开,关闭,读,写,随机访问
3.文件操作:测试,改名,截取,链接.
4.目录操作:同文件.
5.相关技术:错误函数及变量,文件打开函数,命令行参数,glob的扩展.