C语言如何判断文件是否可读写
环境是linux环境,怎么可以用C语言实现判断一个文件是否被其他程序占用,如果被占用了,就等10秒重新判断是否被占用这个功能?最好能有可用的源码。。。看了下回答,也就是说...
环境是linux环境,怎么可以用C语言实现判断一个文件是否被其他程序占用,如果被占用了,就等10秒重新判断是否被占用这个功能?最好能有可用的源码。。。
看了下回答,也就是说,需要将文件加锁,如果成功了证明文件未被占用,那么以后我就可以读了是么。那如果我读完文件之后呢?锁还在咩? 展开
看了下回答,也就是说,需要将文件加锁,如果成功了证明文件未被占用,那么以后我就可以读了是么。那如果我读完文件之后呢?锁还在咩? 展开
3个回答
展开全部
这个需要对文件加锁才能,可以用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 );
}
后面的你懂吧
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 );
}
后面的你懂吧
展开全部
以读取的方式打开文件,如果失败,就等待10s,然后再读取
File *fp;
fp = fopen("C:\\1.TXT","at+");
while(!fp)
{
sleep(10000);
fp = fopen("C:\\1.TXT","at+");
}
上面是不停的循环的隔10s读取,直到打开为止。
如果你就尝试几次读取,可以自己再设定循环读取次数
File *fp;
fp = fopen("C:\\1.TXT","at+");
while(!fp)
{
sleep(10000);
fp = fopen("C:\\1.TXT","at+");
}
上面是不停的循环的隔10s读取,直到打开为止。
如果你就尝试几次读取,可以自己再设定循环读取次数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
尝试读取该文件,如果失败就说明该文件被占用
while(1)
{
if (fread(&buffer, sizeof(buffer), 1,f p1) == 0)
{
Sleep(10000);
}
else
break;
}
while(1)
{
if (fread(&buffer, sizeof(buffer), 1,f p1) == 0)
{
Sleep(10000);
}
else
break;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询