[云盘]共享文件列表

变量定义

  • DEALSHAREFILE_LOG_MODULE—日志模块的输出到该模块

  • DEALSHAREFILE_LOG_PROC —该日志模块输出的具体目录

  • 定义三个static静态字符数组存放MySQL登录用户名密码和具体使用的数据库

  • 定义两个static静态数组存放Redis的ip+port

  • 根据以上定义判断MySQL采用本地连接,Redis采用远程连接

      #define DEALSHAREFILE_LOG_MODULE       "cgi"
      #define DEALSHAREFILE_LOG_PROC         "dealsharefile"
      
      //mysql 数据库配置信息 用户名, 密码, 数据库名称
      static char mysql_user[128] = {0};
      static char mysql_pwd[128] = {0};
      static char mysql_db[128] = {0};
      
      //redis 服务器ip、端口
      static char redis_ip[30] = {0};
      static char redis_port[10] = {0};
    

读取配置文件

  • 定义该函数用于读取配置文件中的参数包括MySQL和Redis已经做日志输出

      void read_cfg()
      {
          //读取mysql数据库配置信息
          get_cfg_value(CFG_PATH, "mysql", "user", mysql_user);
          get_cfg_value(CFG_PATH, "mysql", "password", mysql_pwd);
          get_cfg_value(CFG_PATH, "mysql", "database", mysql_db);
          LOG(DEALSHAREFILE_LOG_MODULE, DEALSHAREFILE_LOG_PROC, "mysql:[user=%s,pwd=%s,database=%s]", mysql_user, mysql_pwd, mysql_db);
      
          //读取redis配置信息
          get_cfg_value(CFG_PATH, "redis", "ip", redis_ip);
          get_cfg_value(CFG_PATH, "redis", "port", redis_port);
          LOG(DEALSHAREFILE_LOG_MODULE, DEALSHAREFILE_LOG_PROC, "redis:[ip=%s,port=%s]\n", redis_ip, redis_port);
      }
    

cfg.h

  • #define CFG_PATH “./conf/cfg.json” //配置文件路径,说明MySQL和Redis的配置信息放放到当前目录上一级下的conf/cfg.json中

      #ifndef _CFG_H_
      #define _CFG_H_
      
      #define CFG_PATH    "./conf/cfg.json" //配置文件路径
      
      #define CFG_LOG_MODULE "cgi"
      #define CFG_LOG_PROC   "cfg"
      
      /* -------------------------------------------*/
      /**
       * @brief  从配置文件中得到相对应的参数
       *
       * @param profile   配置文件路径
       * @param tile      配置文件title名称[title]
       * @param key       key
       * @param value    (out)  得到的value
       *
       * @returns
       *      0 succ, -1 fail
       */
      /* -------------------------------------------*/
      extern int get_cfg_value(const char *profile, char *tile, char *key, char *value);
      
      //获取数据库用户名、用户密码、数据库标示等信息
      extern int get_mysql_info(char *mysql_user, char *mysql_pwd, char *mysql_db);
      #endif
    
  • extern关键字可以用来声明变量和函数作为外部变量或者函数供其它文件使用

  • extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的

cfg.c

	 #include <stdlib.h>
	 #include <string.h>
	 #include "make_log.h"
	 #include "cfg.h"
	 #include "cJSON.h"
	
	/* -------------------------------------------*/
	/**
	 * @brief  从配置文件中得到相对应的参数
	 *
	 * @param profile   配置文件路径
	 * @param title      配置文件title名称[title]
	 * @param key       key
	 * @param value    (out)  得到的value
	 *
	 * @returns
	 *      0 succ, -1 fail
	 */
	/* -------------------------------------------*/
	int get_cfg_value(const char *profile, char *title, char *key, char *value)
	{
	    int ret = 0;
	    char *buf = NULL;
	    FILE *fp = NULL;
	
	    //异常处理
	    if(profile == NULL || title == NULL || key == NULL || value == NULL)
	    {
	        return -1;
	    }
	
	    //只读方式打开文件
	    fp = fopen(profile, "rb");
	    if(fp == NULL) //打开失败
	    {
	        perror("fopen");
	        LOG(CFG_LOG_MODULE, CFG_LOG_PROC, "fopen err\n");
	        ret = -1;
	        goto END;
	    }
	
	    fseek(fp, 0, SEEK_END);//光标移动到末尾
	    long size = ftell(fp); //获取文件大小
	    fseek(fp, 0, SEEK_SET);//光标移动到开头
	
	
	    buf = (char *)calloc(1, size+1); //动态分配空间
	    if(buf == NULL)
	    {
	        perror("calloc");
	        LOG(CFG_LOG_MODULE, CFG_LOG_PROC, "calloc err\n");
	        ret = -1;
	        goto END;
	    }
	
	    //读取文件内容
	    fread(buf, 1, size, fp);
	
	    //解析一个json字符串为cJSON对象
	    cJSON * root = cJSON_Parse(buf);
	    if(NULL == root)
	    {
	        LOG(CFG_LOG_MODULE, CFG_LOG_PROC, "root err\n");
	        ret = -1;
	        goto END;
	    }
	
	    //返回指定字符串对应的json对象
	    cJSON * father = cJSON_GetObjectItem(root, title);
	    if(NULL == father)
	    {
	        LOG(CFG_LOG_MODULE, CFG_LOG_PROC, "father err\n");
	        ret = -1;
	        goto END;
	    }
	
	    cJSON * son = cJSON_GetObjectItem(father, key);
	    if(NULL == son)
	    {
	        LOG(CFG_LOG_MODULE, CFG_LOG_PROC, "son err\n");
	        ret = -1;
	        goto END;
	    }
	
	    //LOG(CFG_LOG_MODULE, CFG_LOG_PROC, "son->valuestring = %s\n", son->valuestring);
	    strcpy(value, son->valuestring); //拷贝内容
	
	    cJSON_Delete(root);//删除json对象
	
	END:
	    if(fp != NULL)
	    {
	        fclose(fp);
	    }
	
	    if(buf != NULL)
	    {
	        free(buf);
	    }
	
	    return ret;
	}
	
	
	//获取数据库用户名、用户密码、数据库标示等信息
	int get_mysql_info(char *mysql_user, char *mysql_pwd, char *mysql_db)
	{
	    if( -1 == get_cfg_value(CFG_PATH, "mysql", "user", mysql_user) )
	    {
	        LOG(CFG_LOG_MODULE, CFG_LOG_PROC, "mysql_user err\n");
	        return -1;
	    }
	
	    if( -1 == get_cfg_value(CFG_PATH, "mysql", "password", mysql_pwd) )
	    {
	        LOG(CFG_LOG_MODULE, CFG_LOG_PROC, "mysql_pwd err\n");
	        return -1;
	    }
	
	    if( -1 == get_cfg_value(CFG_PATH, "mysql", "database", mysql_db) )
	    {
	        LOG(CFG_LOG_MODULE, CFG_LOG_PROC, "mysql_db err\n");
	        return -1;
	    }
	
	    return 0;
	}

/conf

  • /conf目录如下所示,其中redis.conf是配合redis使用的文件而没有具体的ip+port
    在这里插入图片描述

  • 项目部署时,需要先将MySQL和Redis的连接配置信息写入cfg.json中

在这里插入图片描述

解析前端Json

  • 前端QT点击共享文件,则会显示共享文件列表

  • 解析json包(user,md5,filename),拿到用户名,文件md5码,文件名字

      //解析的json包
      int get_json_info(char *buf, char *user, char *md5, char *filename)
      {
          int ret = 0;
      
      /*json数据如下
      {
      "user": "yoyo",
      "md5": "xxx",
      "filename": "xxx"
      }
      */
    
      //解析json包
      //解析一个json字符串为cJSON对象
      cJSON * root = cJSON_Parse(buf);
      if(NULL == root)
      {
          LOG(DEALSHAREFILE_LOG_MODULE, DEALSHAREFILE_LOG_PROC, "cJSON_Parse err\n");
          ret = -1;
          goto END;
      }
    
      //返回指定字符串对应的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
S7-200 Smart是西门子推出的一款小型可编程控制器,它具有高性能、易于使用和可靠的特点。对于S7-200 Smart控制器而言,库文件在编写和管理控制程序中起着重要的作用。 首先,库文件是一种可重复使用的代码集合,可以包含各种功能子程序、函数块和数据块等。利用库文件,我们可以将一些常用的代码模块打包保存,便于在日后的编程中多次使用。这样可以节约大量编程时间,并增加程序的可维护性和重用性。 其次,库文件还可以实现模块化编程。在编写S7-200 Smart程序时,我们可以将不同的功能模块按照其功能划分,并将每个模块保存为独立的库文件。这样一来,程序的逻辑结构变得清晰,不同功能的代码块可以独立开发和测试,方便程序的调试和维护。 此外,库文件还可以方便地实现程序的团队合作。团队中的不同成员可以分别开发不同的模块,并将其保存为库文件。这样,在整合程序时,只需将各个库文件引入到主程序中,就能够实现各个功能的协同工作,提高团队的开发效率和协作效果。 关于云盘,它是一种网络存储服务,在云端提供了大量的存储空间,方便用户随时随地存储和共享文件。使用云盘可以实现文件的备份、共享和访问,而且数据安全性相对较高。 因此,将S7-200 Smart库文件存储在云盘中,可以实现以下几个优势。首先,可以方便地备份和恢复库文件,避免因计算机故障或其他原因导致的数据丢失。其次,库文件存储在云盘中,可以方便地共享给团队中的其他成员,实现团队协作和项目管理。最后,云盘提供了跨平台的访问,我们可以通过互联网随时随地访问和管理库文件,提高工作效率。 综上所述,S7-200 Smart库文件在编写和管理控制程序中扮演着重要角色,而将其存储在云盘中可以提高程序的开发效率、协作效果和数据安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值