加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于多进程同时对文件读操作的问题

(2011-05-29 23:05:47)
分类: linux学习
       今天看到fcnlt()函数,说设置一个文件的某一部位的记录锁设置为共享锁时,其他进程就可以同时对这个文件进行读操作,我起了一个疑问,如果不设置为共享锁(即读取锁),那就不能几个进程同时对这个文件进行读取吗?如果可以,那这个共享锁又有什么存在的意义?
      于是我写了两个程序进行测试,验证我的想法,一个程序test.c创建并打开一个文件,向里面写入一句“hello guy ,you look so cool today! ”,并一直读取这个文件,另一个程序read.c再来读取这个文件,看看能不能成功读取。程序如下:
   程序test.c:
 #include<stdio.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<stdlib.h>
int main()
{
        int rc,wc,fd;
        char buf[1024],rbuf[1024];

        memset(buf,0,1024);
        memset(rbuf,0,1024);
        if((fd=open("test.txt",O_CREAT|O_RDWR,0666))<0)
        {
                perror("open");
                exit(1);
        }
        strcpy(buf,"hello guy ,you look so cool today!");
        if((wc=write(fd,buf,strlen(buf)))<0)
        {
                perror("write");
                exit(1);
        }
        while(1)
        {
                lseek(fd,0,SEEK_SET);
                if((rc=read(fd,rbuf,100))<0)
                {
                        perror("read");
                        exit(1);
"test.c" 40L, 631C                                                       1,1          顶端
程序read.c:
#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<stdlib.h>

int main()
{
        int fd,rc;
        char buf[1024];
        memset(buf,0,1024);
        if((fd=open("test.txt",O_RDWR,0666))<0)
        {
                perror("open");
                exit(1);
        }
        if((rc=read(fd,buf,1024))<0)
        {
                perror("read");
                exit(1);
        }
        else
        printf("read %s\n",buf);
        return 0;



}
                                                                                        
                                                                                        
"read.c" 31L, 408C                                                       1,1          全部
先编译test.c,并运行,结果如下:
http://s11/middle/69708ebega46bac0decba&690

在编译运行第二个程序如下:
http://s16/middle/69708ebega46bae28cadf&690

结果证明:如果不设置为共享锁(即读取锁),几个进程也可以同时对这个文件进行读取操作。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有