- 论坛徽章:
- 0
|
如下:我了测试记录锁是否好,故意没有释放错,但是发现根本没有锁住什么原因?如下代码
int get_serial()
{
sprintf(path,"%s/.trace_no",getenv("HOME"));
fd = open(path,O_RDWR|O_CREAT|O_SYNC,0666);
lock.l_type = F_WRLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = sizeof(long);
k = fcntl(fd,F_SETLK,&lock);
if ( k )
{
return -1;
}
fstat(fd,&buf);
if ( buf.st_size != sizeof(long) )
{
i = 1;
n = i+1;
write(fd, &n,sizeof(long));
} else {
read(fd,&i,sizeof(long));
if ( i<1 || i>99998888)
{
i = 1;
}
n = i+1;
lseek(fd,0,SEEK_SET);
write(fd, &n ,sizeof(long));
}
close(fd);
/**
lock.l_type = F_UNLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
fcntl(fd,F_SETLK,lock);
**/
return i;
} |
|