易截截图软件、单文件、免安装、纯绿色、仅160KB

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个字符)来文件指针回到第一次读取的位置,但没实现,不知可否。(待续)


相关文档:

linux ps 命令 STAT域

STAT(该行程的状态)
D: 不可用信号中断的睡眠状态
R: 正在执行或处于执行队列中
S: 可以用信号中断的睡眠状态
T: 暂停执行 
Z: 僵死状态
------------------------------------
W: 没有足够的记忆体分页可分配 
<: 高优先序的行程 
N: 低优先序的行程&nbs ......

【数据结构重温】Linux内核中的hash和bucket

 哈希表(Hashtable)又称为“散置”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。
 
哈希函 ......

linux 设备驱动编程

目 录
驱动

I/O端口

from smth

基本结构

驱动程序

具体实现


PCI

loopback

Sis 900

ISA总线DMA的实现


驱动
    Linux系统支持三种类型的硬件设备:字符设备、块设
< type="text/javascript">< type="text/jav ......

linux 内核2.4.26 升级后 启动失败

我想在redhat下使用摄像头  但是现有版本不支持 所以我想升级内核 这样可能会支持摄像头
于是我从网上下载了 2.4.26版本的内核 通过网上介绍的那些方法 升级内核 升级后重启电脑 进入新内核时 遇到下面的问题
VFS:Cannot open root device "sda2" or 08:01
Please append a correct "root=" boot option
kernel pa ......

每日必看的linux网站和博客收集

http://www.linuxjournal.com/
Linux Kernel Newbies
一方适合内核开发初级黑客的乐土——该网站几乎能够满足所有磨刀霍霍向内核的新手的需求。
http://kernelnewbies.org/
http://vger.kernel.org/
了解如何使用linux内核列表
http://www.tux.org/lkml/
Linux
新闻周刊,它有一个专区报道有关内核的重要 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号