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内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。
哈希函 ......
目 录
驱动
I/O端口
from smth
基本结构
驱动程序
具体实现
PCI
loopback
Sis 900
ISA总线DMA的实现
驱动
Linux系统支持三种类型的硬件设备:字符设备、块设
< type="text/javascript">< type="text/jav ......
我想在redhat下使用摄像头 但是现有版本不支持 所以我想升级内核 这样可能会支持摄像头
于是我从网上下载了 2.4.26版本的内核 通过网上介绍的那些方法 升级内核 升级后重启电脑 进入新内核时 遇到下面的问题
VFS:Cannot open root device "sda2" or 08:01
Please append a correct "root=" boot option
kernel pa ......
http://www.linuxjournal.com/
Linux Kernel Newbies
一方适合内核开发初级黑客的乐土——该网站几乎能够满足所有磨刀霍霍向内核的新手的需求。
http://kernelnewbies.org/
http://vger.kernel.org/
了解如何使用linux内核列表
http://www.tux.org/lkml/
Linux
新闻周刊,它有一个专区报道有关内核的重要 ......