Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1043147
  • 博文数量: 297
  • 博客积分: 11721
  • 博客等级: 上将
  • 技术积分: 3431
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-25 10:21
文章分类

全部博文(297)

文章存档

2016年(9)

2011年(71)

2010年(137)

2009年(80)

分类: C/C++

2009-11-20 20:08:34

//使用read与pread读取文件字符
#include
#include
#include
#include
#include
#include
#include
#include
#include

int fd;
char buf1[100],buf2[100];
int flag = 0;

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

void * thr_fn(void * arg)
{
    pthread_mutex_lock(&lock);
    while(flag==0)
        pthread_cond_wait(&cond,&lock);    
    pthread_mutex_unlock(&lock);    

    lseek(fd,3,SEEK_CUR);
    printf("Thread seek over.\n");    
    pthread_exit((void *)0);
}
int main(int argc,char ** argv)
{
    pthread_t tid;
    
    pthread_create(&tid,NULL,thr_fn,NULL);

   
    fd = open("bar",O_RDWR);   
    lseek(fd,3,SEEK_SET);
    printf("Main seek over.\n");

    pthread_mutex_lock(&lock);
        flag = 1;
        pthread_cond_signal(&cond);   
    pthread_mutex_unlock(&lock);
   
    //子线程结束后读文件
    pthread_join(tid,NULL);
    int n = read(fd,buf1,100);
    printf("From main buf1=%s, %d\n",buf1, n);
   
    // ssize_t pread(int fd, void *buf, size_t count, off_t offset);
    //用pread按指定偏移量读字符
    pread(fd,buf2,100,3);
    printf("pread=%s \n",buf2);

    pthread_cond_destroy(&cond);
    pthread_mutex_destroy(&lock);
    close(fd);

    return 0;
}

//bar文件内容为123456789
执行结果:
debian:/home/linux# ./a.out
Main seek over.
Thread seek over.
From main buf1=789
, 4
pread=456789

阅读(931) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~