当前位置: 代码迷 >> C语言 >> flock锁定文件问题
  详细解决方案

flock锁定文件问题

热度:309   发布时间:2007-10-22 16:55:06.0
flock锁定文件问题

我们都知道 flock可以在一个进程中锁定目标文件~
但是锁定后的文件(未解锁)却可以在另外的一个进程中打开(open函数);
这是为什么?

那flock还有啥用?按道理来说 被锁定的文件应该打不开才对把~?

我做的程序只能靠判断这个文件是否还能再被锁 来判断该文件目前状态(LOCK_EX or LOCK_UN);

这是我程序其中的一段代码(在fork()之中);

void ftp::sock_upload(char message[],struct sockaddr_in &remote_addr,int &commandfd,int &datafd,char aaa[])
{
/* 获取文件名*/
char file[20]=" ";
int i=0;
while(aaa[i+5]!='\r')
{
file[i]=aaa[i+5];
i++;
}
file[i]='\0';


int fd;

fd = open(file,O_WRONLY|O_CREAT);
if(flock(fd,LOCK_EX|LOCK_NB)== - 1) /*判断文件是否能被锁,如果不能锁的话,表示文件正在被使用*/
{
sock_send(commandfd,"450 the file is uing \r\n",23);
shutdown(datafd,2);
}
else
if(sock_connect(datafd,remote_addr));
{
sock_send(commandfd,"150 opneing data connection for\r\n",34);
char ccc[DATAMAX];
int n=DATAMAX;
while(n!=0)
{
n=sock_recv(datafd,ccc,DATAMAX);
write(fd,ccc,n);
}
sock_send(commandfd,"226 file received complete\r\n",28);

flock(fd,LOCK_UN);
close(fd);
shutdown(datafd,2);
}

}

请明白flock的朋友给讲讲~谢谢了~

搜索更多相关的解决方案: flock  文件  LOCK  fork  sock  

----------------解决方案--------------------------------------------------------
顶自己下~没人知道吗?
----------------解决方案--------------------------------------------------------

今天再来顶~求答案~


----------------解决方案--------------------------------------------------------