windows下的ReadFile与Linux下的pread
问题的引出:
当对同一文件句柄(在Windows下)或是文件描述符(在Linux下)进行随机读写操作时,会存在文件指针的定位与读\写俩个步骤,但由于这不是一个原子操作,就可能产生如下问题:进程A对某文件先定位到 f1 处,然后被中断,然后进程B对同一文件定位到 f2 处,然后被中断,进程A再次执行,从文件的当前指针处开始读或是写,于是这便产生了不是期望的结果了。(这里要注意,对同一文件的俩次打开,得到的将是俩个不同的句柄或是描述符,所以不用担心这种情况会出问题)
解决办法:
在Linux下,pread函数就好像是专门为上面的问题服务的,它本身就是原子性的操作,定位文件指针与读操作一气呵成,而且读操作并不改变文件指针。
在windows下,参考其api时我并没有查到像pread这么直接的函数,而是ReadFile它的一个参数lpOverlapped来实现的:
1)若文件是以
FILE_FLAG_OVERLAPPED打开的,且 lpOverlapped 不为NULL,则读操作会在
lpOverlapped结构中指定的offset处开始读文件,且函数可能会在读操作完成前就返回了(即异步模式)
2)若文件不是以
FILE_FLAG_OVERLAPPED打开的,但lpOverlapped 不为NULL,则
读操作会在
lpOverlapped结构中指定的offset处开始读文件,且函数会一直阻塞直到读操作完成(即同步模式)
从上面可知,好似Windows下ReadFile无法实现pread在Linux下的功能,初步想法是对文件句柄进行加锁来避免问题的出现,并实施对文件进行第二次空读取(即读0个字符)来文件指针回到第一次读取的位置,但没实现,不知可否。(待续)
相关文档:
STAT(该行程的状态)
D: 不可用信号中断的睡眠状态
R: 正在执行或处于执行队列中
S: 可以用信号中断的睡眠状态
T: 暂停执行
Z: 僵死状态
------------------------------------
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程&nbs ......
哈希表(Hashtable)又称为“散置”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。
哈希函 ......
linux 文件系统结构
/ 根目录
/bin 常用的命令 binary file 的目录
/boot 存放系统启动时必须读取的档案,包括核心 (kernel) ......
目 录
驱动
I/O端口
from smth
基本结构
驱动程序
具体实现
PCI
loopback
Sis 900
ISA总线DMA的实现
驱动
Linux系统支持三种类型的硬件设备:字符设备、块设
< type="text/javascript">< type="text/jav ......
3ks:http://boz8.com/house/article.aspx?aid=112
在Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序。
一、GCC快速入门
Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件]
其中,目标文件可缺省,Gcc默认生成可执行的文件名为:编译文件.out
我们来看一下经典入门程序"Hello Wor ......