/*demo(通过系统命令)
*实现一个对视频文件可以操作的软连接路径
*在Nginx中的HTML页面可直接访问视频文件
*目录的创建,文件的链接,文件的删除
*/
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/stat.h> //mkdir
#include <sys/types.h>
#include <dirent.h> //opendir
#include <unistd.h> //unlink
#define PLAY_INFO_DIR "paly"
#define EEXIST 17
int OpendirAndMkdir(const char * pathname)
{
int ret = 0;
DIR * mydir = NULL;
if ((mydir = opendir(pathname)) == NULL)
{
ret = mkdir(pathname, 0755);
if (ret != 0) return -1;
printf("%s created sucess!/n", pathname);
}
else
{
printf("%s exist!/n", pathname);
}
return ret;
}
int main()
{
int ret = -1;
char *dirlocal = NULL;
char mark = '/';
char *retlink = NULL;
char dirName[256] = {'\0'};
char cmd[1024] = {0};
char filepath[] = "/home/huqin/bstr/test.264";
printf("start link path\n");
//获取链接文件
retlink = strrchr(filepath,mark);
printf("strrchr link file path:%s\n",retlink);
snprintf(dirName, sizeof(dirName), "%s/%s", "/tmp/Nginx/html/", PLAY_INFO_DIR);
//判断目录是否存在,不存在则创建
OpendirAndMkdir(dirName);
//将文件名连接到链接目录
strcat(dirName,retlink);
printf("strcat link path:%s\n",dirName);
//执行软链接命令
sprintf(cmd, "ln -s %s %s", filepath, dirName);
ret = system(cmd);
do
{
if(ret == 256)
{
printf("system link path:%s already exists, ret = %d.\n",dirName,ret);
break;
}
if(ret != 0)
{
printf("system link path:%s failed, ret = %d.\n",dirName,ret);
return -1;
}
}while(0);
printf("finally link path:%s\n",dirName);
//匹配到文件链接目录位置
dirlocal = strstr(dirName,PLAY_INFO_DIR);
printf("dir find play link path:%s\n",dirlocal);
//删除链接文件
if(( ret = unlink(dirName)) < 0)
{
printf("unlink errpr ret =%d !\n",ret);
}
printf("unlink link path:%s\n",dirName);
return 0;
}
huqin@ubuntu:~/bstr$ ./strrch
start link path
strrchr link file path:/test.264
/tmp/paly exist!/nstrcat link path:/tmp/paly/test.264
finally link path:/tmp//paly/test.264
dir find play link path:paly/test.264
unlink link path:/tmp/paly/test.264