/*
* 判断某个文件是否正在使用中
* 返回值
* -1 表示时出错
* 0 表示文件没有在使用中
* 1 表示文件正在使用中
*/
int Lsof(char *strFileSubPath) //其中strFileSubPath包括文件名
{
DIR *dir, *fdir;
struct dirent *dirent, *fdirent;
char strTmpPath[256] = "\0";
char strSubPath[256] = "\0";
char strHold[256] = "\0";
if(NULL == strFileSubPath)
{
DBG(0, "Lsof函数参数为空");
return -1;
}
dir = opendir("/proc");
if(NULL == dir)
{
DBG(0, "打开文件路径[%s]出错,错误信息[%s]", "/proc", strerror(errno));
return -1;
}
while(NULL != (dirent = readdir(dir)))
{
if(0 == strcmp(".", dirent->d_name) || 0 == strcmp("..", dirent->d_name))
continue;
sprintf(strTmpPath, "/proc/%s/fd/", dirent->d_name);
fdir = opendir(strTmpPath);
if(NULL == fdir)
{
continue;
}
while(NULL != (fdirent = readdir(fdir)))
{
if(0 == strcmp(".", fdirent->d_name) || 0 == strcmp("..", fdirent->d_name))
continue;
sprintf(strSubPath, "%s/%s", strTmpPath, fdirent->d_name);
memset(strHold, 0, 256);
readlink(strSubPath, strHold, 256);
if(0 == strcmp(strFileSubPath, strHold))
{
return 1;
}
}
closedir(fdir);
}
closedir(dir);
return 0;
}