我们都知道 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的朋友给讲讲~谢谢了~