当前位置: 技术问答>linux和unix
一个关于独占文件的问题,谢谢!
来源: 互联网 发布时间:2015-03-10
本文导语: 我想在C下实现对一个文件的独占打开,就像VC中CFile类中的ShareExclusive标志差不多, 用fopen好像没有这个标志参数,请问如何实现,(Shell命令中可以实现吗?)麻烦给出例子,谢谢 | 使用文...
我想在C下实现对一个文件的独占打开,就像VC中CFile类中的ShareExclusive标志差不多, 用fopen好像没有这个标志参数,请问如何实现,(Shell命令中可以实现吗?)麻烦给出例子,谢谢
|
使用文件锁吧,函数是fcntl,在linux下man一把看详细信息
|
给你个例子再
该函数完成对文件的独占打开,并返回使用的锁
int fileopen(int *pLock_fd)
{
char FileName[256];
int iFd;
struct flock struLock;
memset(FileName,0,256);
strcpy( FileName, getenv("HOME"));
strcat( FileName, "/my.lock");
iFd = open( FileName, O_CREAT| O_RDWR, 0660);
if ( iFd == -1)
{
return (-1);
}
memset(&struLock, 0, sizeof(struLock) );
struLock.l_type= F_WRLCK;
struLock.l_whence= 0;
struLock.l_start= 0;
struLock.l_len= 0;
if ( fcntl( iFd, F_SETLK, &struLock) == -1)
{
close( iFd);
return (-1);
}
*pLock_fd = iFd;
return 0;
}
该函数完成对文件的独占打开,并返回使用的锁
int fileopen(int *pLock_fd)
{
char FileName[256];
int iFd;
struct flock struLock;
memset(FileName,0,256);
strcpy( FileName, getenv("HOME"));
strcat( FileName, "/my.lock");
iFd = open( FileName, O_CREAT| O_RDWR, 0660);
if ( iFd == -1)
{
return (-1);
}
memset(&struLock, 0, sizeof(struLock) );
struLock.l_type= F_WRLCK;
struLock.l_whence= 0;
struLock.l_start= 0;
struLock.l_len= 0;
if ( fcntl( iFd, F_SETLK, &struLock) == -1)
{
close( iFd);
return (-1);
}
*pLock_fd = iFd;
return 0;
}