易截截图软件、单文件、免安装、纯绿色、仅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 文件系统

linux 文件系统结构
/       根目录
/bin         常用的命令   binary   file   的目录
/boot      存放系统启动时必须读取的档案,包括核心   (kernel)   ......

linux 设备驱动编程

目 录
驱动

I/O端口

from smth

基本结构

驱动程序

具体实现


PCI

loopback

Sis 900

ISA总线DMA的实现


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

Linux下GCC编译的四个过程

3ks:http://boz8.com/house/article.aspx?aid=112
在Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序。
一、GCC快速入门
Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件]
其中,目标文件可缺省,Gcc默认生成可执行的文件名为:编译文件.out
我们来看一下经典入门程序"Hello Wor ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号