Direct IO

Direct IO:
	简介:
		PHP支持直接的IO(输入输出)函数,正如Posix标准描述的,这些I/O函数相对于C语言的I/O流函数(例如:fopen(),fread())更底层。只有当需要直接控制设备,才考虑使用这些DIO函数。其它情况,我们之前熟知的 'filesystem' 函数已经足够了。
	安装:
		安装PECL扩展:http://pecl.php.net/package/dio
	预定义常量:
		很多,查看手册
	函数:
		1.dio_open(string $filename, int $flags[, int $mode = 0])
			打开一个文件(必要时候创建),比C提供的I/O流函数库更底层,返回新的文件描述符
			参数:
				$filename - 打开的文件路径
				$flags - flags参数是一个按位异或值,由下面列表的标识组成。flags必须包含 'O_RDONLY'、'O_WRONLY'或'O_WRONLY'中的一个。此外,它还可以同列表中的任何其它标识组合。
					O_RDONLY - 以读权限打开文件
					O_WRONLY - 以写权限打开文件
					O_RDWR - 以读和写权限打开文件
					O_CREAT - 如果文件不存在,则创建
					O_EXCL - 如果同时设置了 'O_EXCL' 和 'O_CREAT' 标志,并且文件已经存在,则 'dio_open()' 失败
					O_TRUNC - 如果文件存在,并且已经通过写权限打开,将会清空(truncate - 数据库中truncate表)文件!
					O_APPEND - 追加写入数据到文件末尾
					O_NONBLOCK - 设置 '非阻塞' 模式
					O_NOCTTY - 当打开一个 'TTY' 设备文件,防止操作系统将打开的文件分配为进程的控制终端
				$mode
					1.如果flags包含 'O_CREAT',mode用来设置文件的权限(0777等)。当在flags中指定了 'O_CREAT',为了操作正确需要设置mode,其它情况忽略mode。
					2.分配给创建的文件的实际权限将由进程的umask设置一如既往的影响
			示例:
				<?php
					$fd = dio_open('/dev/ttyS0', O_RDWR | O_NOCTTY | O_NONBLOCK);
					dio_close($fd);
				?>

		2.dio_close(resource $fd)
			关闭指定的文件描述符

		3.dio_read(resource $fd[, int $len = 1024])
			从打开的文件中,读取指定长度的数据

		4.dio_write(resource $fd, string $data[, int $len = 0])
			向打开的文件中,写入数据
			参数:
				$fd - 打开的文件资源
				$data - 写入的数据
				$len - 指定写入的数据的长度,未指定,则写入全部数据

		5.dio_seek(resource $fd, int $pos[, int $whence = SEEK_SET])
			改变打开的文件描述符的指针位置
			参数:
				$fd - 打开的文件资源
				$pos - 新的指针位置
				$whence - 指定指定位置如何移动
					SEEK_SET - 指针位置从文件开头移动
					SEEK_CUR - 指针位置从当前位置开始移动。所以就存在一个向前移动还是向后移动。可设置 $pos 为 '+' | '-'。
					SEEK_END - 指针位置从文件结尾移动。也可设置 $pos 为 '+' | '-'。设置为 '-',表示还在当前的文件范围内,向前移动。设置为 '+',表示越过当前文件的结尾,实际上就是在写入数据,一直填充0,直到指定的 $pos 个0。

		6.dio_truncate(resource $fd, int $offset)
			1.截断文件到$offset设置的尺寸大小,单位为 bytes
			2.如果文件尺寸>$offset,额外的数据将丢失。如果文件尺寸<$offset,未具体说明文件是不改变,还是被扩展(即填充0)

		7.dio_stat(resource $fd)
			返回打开的文件描述符信息,错误返回NULL,正确返回一个关联数组:
			device - 设备
			inode - 文件的inode
			mode - 文件权限(0777)
			nlink - 硬链接数量
			uid - 所有者
			gid - 所属组
			device_type - 设备类型
			size - 文件大小,单位bytes
			blocksize - block块大小(存储内容的最小单位)
			blocks - 分配的block块数量
			atime - 最后访问时间
			mtime - 最后修改时间
			ctime - 内容最后改变时间

		8.dio_tcsetattr(resource $fd, array $options)
			设置打开文件的终端属性和波特率(传输速率)
			参数:
				$fd - 打开的文件描述符
				$options - 当前可用的options有:
					baud - 端口的波特率(传输速率),可设置为:38400,19200,9600,4800,2400,1800, 1200,600,300,200,150,134,110,75,50。默认是9600
					bits - 数据位(data bits),可设置为:8,7,6,5。默认是8
					stop - 停止位(stop bits),可设置为:1,2。默认是1
					parity - (奇偶校验?)可设置为:0,1,2。默认是0

		9.dio_fcntl(resource $fd, int $cmd[, mixed $args])
			该函数在打开的文件描述符上,执行 '$cmd' 指定的操作。一些命令需要额外的参数,由$args来提供
			参数:
				$fd - 打开的文件描述符
				$cmd - 可以是下面操作的一个:
					F_SETLK - 设置锁定|清除锁定。如果某人设置了锁定,dio_fcntl()返回-1
					F_SETLKW - 同 'F_SETLK' 类似,区别是:当某人设置了锁定,dio_fcntl()等待,直到锁定被释放
					F_GETLK - dio_fcntl()返回一个关联数组,如果别的人设置了锁定。如果未设置锁定,关联数组的键 'type',将设置为 'F_UNLCK'
					F_DUPFD - 查找大于或等于$args的最少数量的可用的文件描述符,并返回
					F_SETFL - 设置文件描述符标志为$args指定的值,可以是:O_APPEND,O_NONBLOCK, O_ASYNC。为了使用 'O_ASYNC',需要使用 'PCNTL' 扩展。
				$args - args是一个关联数组,当$cmd是 'F_SETLK' | 'F_SETLLW',可使用下面的键
					start - 锁定开始的偏移(offset)位置。
					length - 锁定的区域大小。0表示锁定到文件结尾
					whence - 锁定开始的相对位置,可以是:SEEK_SET, SEEK_END, SEEK_CUR(上面有的函数说明过了,可查看)
					type - 锁定的类型,可以是:F_RDLCK-读锁定, F_WRLCK(写锁定), F_UNLCK(解锁)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值