C语言如何判断文件是否可读写

环境是linux环境,怎么可以用C语言实现判断一个文件是否被其他程序占用,如果被占用了,就等10秒重新判断是否被占用这个功能?最好能有可用的源码。。。

看了下回答,也就是说,需要将文件加锁,如果成功了证明文件未被占用,那么以后我就可以读了是么。那如果我读完文件之后呢?锁还在咩?

这个需要对文件加锁才能,可以用fcntl函数实现
int lock(const char * filepath )
{
int fd = 0;
struct flock flock;
memset( &flock, 0, sizeof(flock) );

fd = open( filepath, O_RDWR,S_IRUSR|S_IWUSR );
if ( fd < 0 )
{
printf("open error!\n");
return ( -1 );
}
flock.l_type = F_WRLCK;
flock.l_whence = SEEK_SET;
flock.l_start = 100000;
flock.l_len = 0;
if ( fcntl( fd, F_SETLK, &flock ) ) //加锁,如果失败则等待10秒
{
printf("cannot set lock\n");
printf("the process will retry after 10 seconds\n");
sleep(10); //不同版本的sleep单位可能不一样,有的是秒有的是毫秒,你自己看着改
if ( fcntl( fd, F_SETLK, &flock ) ) //加锁,如果失败则退出
return( -1 );
}
return( 0 );
}
后面的你懂吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-27
以读取的方式打开文件,如果失败,就等待10s,然后再读取
File *fp;
fp = fopen("C:\\1.TXT","at+");
while(!fp)
{
sleep(10000);
fp = fopen("C:\\1.TXT","at+");
}
上面是不停的循环的隔10s读取,直到打开为止。
如果你就尝试几次读取,可以自己再设定循环读取次数
第2个回答  2012-07-27
尝试读取该文件,如果失败就说明该文件被占用
while(1)
{
if (fread(&buffer, sizeof(buffer), 1,f p1) == 0)
{
Sleep(10000);
}
else
break;

}
相似回答