当前位置:  技术问答>linux和unix

文件读写锁的小问题,求指导

    来源: 互联网  发布时间:2016-12-02

    本文导语:  我在看Beginning linux programming第三版。在第七章的时候看到自己机子上的跟书上的讲的不一样。简单描述一下:在文件的某个部分加上读锁的话可以再其上再加读锁,但不能加写锁;在某个部分加上写锁之后读锁和写...

我在看Beginning linux programming第三版。在第七章的时候看到自己机子上的跟书上的讲的不一样。简单描述一下:在文件的某个部分加上读锁的话可以再其上再加读锁,但不能加写锁;在某个部分加上写锁之后读锁和写锁都不能再加。但是在我的linux上(Fedora)上,我按照书上讲的加了一个写锁,但是再其上仍然可以加读锁。代码如下:file_lock3的代码:
#include 
#include 
#include 
#include 

int main()
{
    //some variable
    int file_desc;
    const char *test_file = "/tmp/test_lock";
    int byte_count;
    char *byte_to_write = "A";
    struct flock region_1;
    struct flock region_2;
    int res;

    //open a file 
    file_desc = open(test_file, O_RDWR | O_CREAT, 0666);
    if(!file_desc)
    {   
        fprintf(stderr, "Unable to open %s for read/write n", test_file);
        exit(EXIT_FAILURE);
    }   
    
    // write somen data
    for(byte_count = 0; byte_count l_whence);
    printf("l_start %d, ", to_show->l_start);
    printf("l_len %d, ", to_show->l_len);
    printf("l_pid %d, ", to_show->l_pid);
}

然后我用这样的命令运行 ./file_lock3 & ; ./file_lock4
运行的结果和书上不一样
Testing F_WRLCK on region from 0 to 5
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 0 to 5
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 5 to 10
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 5 to 10
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 10 to 15
Lock would fail. F_GETLK returned:
l_type 0, l_whence 0, l_start 10, l_len 20, l_pid 2289, Test F_RDLCK on region from 10 to 15
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 15 to 20
Lock would fail. F_GETLK returned:
l_type 0, l_whence 0, l_start 10, l_len 20, l_pid 2289, Test F_RDLCK on region from 15 to 20
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 20 to 25
Lock would fail. F_GETLK returned:
l_type 0, l_whence 0, l_start 10, l_len 20, l_pid 2289, Test F_RDLCK on region from 20 to 25
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 25 to 30
Lock would fail. F_GETLK returned:
l_type 0, l_whence 0, l_start 10, l_len 20, l_pid 2289, Test F_RDLCK on region from 25 to 30
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 30 to 35
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 30 to 35
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 35 to 40
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 35 to 40
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 40 to 45
Lock would fail. F_GETLK returned:
l_type 1, l_whence 0, l_start 40, l_len 10, l_pid 2289, Test F_RDLCK on region from 40 to 45
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 45 to 50
Lock would fail. F_GETLK returned:
l_type 1, l_whence 0, l_start 40, l_len 10, l_pid 2289, Test F_RDLCK on region from 45 to 50
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 50 to 55
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 50 to 55
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 55 to 60
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 55 to 60
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 60 to 65
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 60 to 65
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 65 to 70
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 65 to 70
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 70 to 75
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 70 to 75
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 75 to 80
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 75 to 80
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 80 to 85
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 80 to 85
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 85 to 90
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 85 to 90
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 90 to 95
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 90 to 95
F_RDLCK - Lock would succeed
Testing F_WRLCK on region from 95 to 100
F_WRLCK - Lock would succeed
Test F_RDLCK on region from 95 to 100
F_RDLCK - Lock would succeed


最好是看过这本书的做过这个实验的帮我解答一下,谢谢

|
既然是验证写锁之后,能否再读锁
不要把程序搞这么复杂嘛,就一个固定区域加锁测试就行了

加锁探测成功与否不是通过fcntl的返回值来判断的吧,应该判断l_type == F_UNLCK

|
代码太长了,哪个地方的行为与书上有区别?

|
关注。。。。。。。。。。

    
 
 

您可能感兴趣的文章:

  • Java读写包括中文的txt文件时不同编码格式问题解决
  • linux 下能否读写.dbf 或者.xls格式的文件,怎样读写?高手指点,拜谢!!!
  • 文件或文件夹,如何指定某用户的读写权限?
  • 在中断服务程序里可以进行文件的读写操作么?
  • 有谁知道,Linux下文件的读写原理是怎样的?急
  • 请问unix下修改文件和文件夹读写权限的问题
  • 父子进程读写文件问题
  • 如何以独占式读写文件?
  • j2me读写,修改本地文件
  • samba文件读写问题
  • 怎样将linux系统底下一个文件夹的只读属性改为可读写的属性?
  • Linux内核中文件进行读写操作的问题
  • ELF文件读写库 ELFIO
  • JAVA Applet能够读写文件吗?
  • 读写大文件出错
  • Java读写MPX文件包 MPXJ
  • 使用mmap可以读写文件,这是怎么实现的?
  • linux下,通过jsp网站进行文件读写,提示permission denied
  • 在linux下有没有想windows下vc一样读写ini 配置文件的库或函数
  • Java中有没有什么类来实现读写注册表文件?
  • 怎么使用 linux 下的 libxml2 库读写 xml 文件和设置属性
  • 求指导~~关于文件加密的
  • 删除文件问题,新手,希望高人指导
  • 今天下了UNIX视频教学,但(.CSF文件)不知怎么打开?谢大侠指导!!!
  • 请高手指导fedora5安装是用哪个映像文件?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 菜问题:请问如何根据文件中的一段内容查找文件路径和文件名称,在线等候
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • shell脚本剪切文件文件,并生成新文件的问题
  • 文件编码及UTF-8、BOM、0XFEFF相关问题
  • GUI问题:如何使用文件选择对话框保存文本文件,图像文件??
  • cocos2d中CCSpriteFrameCache文件同时存在两个plist的问题解决
  • 不解,上传文件后压缩文件的中文文件名问题,转码也不管用?
  • ext3文件系统问题:文件在硬盘上的物理位置,一组文件要据此排序。
  • jsp文件访问jar文件,路径问题。
  • Linux www服务 文件夹内文件数量问题
  • 一个奇怪的问题:Red Hat 7.2下用mv复制-粘贴文件变成了剪切-粘贴文件,用mv -b也不行。而两周前同样的机器却没有出现这种问题。alias中m
  • 请教高手一个简单问题:给定一个文件名,如何去查找该文件正在被几个程序使用,并怎么样才可以切断这个文件与正在打开该文件的程序之间的
  • 关于在只读文件系统中,更新文件的问题
  • 高手请进:linux下使用.o文件,makefile文件的问题
  • 2个问题 急-共享文件夹和安装文件
  • 简单的问题,如何用命令 批量 删除某一目录下的 .o 文件?如何批量把只读文件改成可写文件?
  • 小问题, Unix 如何建立一个文件 ,unix 文件有后缀名吗
  • 文件夹或者文件权限问题?
  • 库文件调用库文件问题
  • 问一个问题。请问如何在文件系统管理并使用设备,也就是当一个设备装载,下载时。文件系统是如何实现的
  • C++ I/O 成员 eof():如果处于文件结尾处则返回true
  • Shell脚本如何递归现实一个文件夹中的文件(文件夹中含有文件夹)
  • WinDows8最新版文件夹加密
  • 求命令:什么命令可以把文件夹下所有的文件按修改时间先后排出来,包括子文件夹里的文件。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • python异常信息堆栈输出到日志文件
  • 请问:proc中的头文件中能包含头文件吗?(感觉如果头文件中包含头文件的话,在链接时就会有错误啊)
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3