linux C按日期动态实时建文件夹按小时建文件继scanf相关

2024-05-09 19:58

本文主要是介绍linux C按日期动态实时建文件夹按小时建文件继scanf相关,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果:
按天建文件夹,按小时建文件
从串口读取库伦计的打印内容,过滤掉干扰字符后用scanf将关注的数字分离出来之后写入txt文件
matlab从txt文件中读入数据绘图分析

完整源码

#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>#define PATH_TTYDEVICE "/dev/ttyUSB0"
#define	MAX_BUF_SIZE	100FILE *fp = NULL;
FILE *fp1 = NULL;void Stop(int signo) 
{fclose(fp1);printf("oop! stop!!!\n");_exit(0);
}int CreateDir(const char *sPathName)  {  char DirName[256];  strcpy(DirName, sPathName);  int i,len = strlen(DirName);for(i=1; i<len; i++)  {  if(DirName[i]=='/')  {  DirName[i] = 0; if(access(DirName, 0)!=0)  {  if(mkdir(DirName, 0755)==-1)  {   printf("mkdir   error\n");   return -1;   }  }  DirName[i] = '/';  }  }  return 0;  } int CreateFile(const char *path)  
{FILE *f;if(access(path, 0)!=0) {f = fopen(path, "w+");if( f == NULL) {printf("create file failed \r\n");return -1;}else {fclose(f);return 0;}}return -1;
}void getdate(char *date, char *hour)
{struct tm *my_tm;time_t t1;t1 = time(&t1);my_tm = localtime(&t1);sprintf(date, "%04d-%02d-%02d" ,my_tm->tm_year + 1900, my_tm->tm_mon + 1, my_tm->tm_mday);sprintf(hour, "%02d" ,my_tm->tm_hour);//printf("current my_tm : %04d-%02d-%02d %02d:%02d:%02d\n\r", my_tm->tm_year + 1900, my_tm->tm_mon + 1, my_tm->tm_mday,my_tm->tm_hour, my_tm->tm_min, my_tm->tm_sec );}void analyse(char *Buf)
{float v,c,w,t;char time[15];char *buf = Buf;/*skip letter just analyse number */while(1) {if (*buf >= '0' && *buf <= '9') {break;}buf++;}sscanf(buf,"%fV,%fA,%fAh,%s\r\n",&v,&c,&w,time);if (v>25.0) {v= 25.0;}if (c > 5.0) {c = 5.0;}if (w > 80.0) {w = 80.0;}fprintf(fp1, "%f %f %f\r\n",v,c,w);
}int main(int c, char *args[])
{char buf[MAX_BUF_SIZE];char path[20];int size,ret;int index=0;char date[30];char hour[3];signal(SIGINT, Stop);fp = fopen(PATH_TTYDEVICE, "r+");if (fp == NULL) {printf("failed: can not open tty device \r\n! ");return -1;}while(1) {memset(date,0,sizeof(date));memset(hour,0,sizeof(hour));getdate(date,hour);memset(path,0,sizeof(path));sprintf(path,"%s/",date);CreateDir(path);memset(path,0,sizeof(path));sprintf(path,"./%s/%s.txt",date,hour);ret = CreateFile(path);if (ret == 0 ) {if (fp1 != NULL) {fclose(fp1);}fp1 = fopen(path, "w+");if (fp1 == NULL) {printf("failed: can not open txt file to save the result! \r\n ");return -1;}}fseek(fp, 0, SEEK_SET);size = fread(buf+index, 1,1,fp);if (buf[index] != 0) {if(buf[index] == '\n') {if (index > 10) {printf("read from tty : \r\n");printf("%s\r\n", buf);analyse(buf);}index = -1;memset(buf, 0, MAX_BUF_SIZE);}index++;}}fclose(fp);fclose(fp1);_exit(0);
}

matlab M文件

%读取库仑计打印到txt中的数据进行绘图分析path = 'E:\VMWareShare\14.txt';
data=load(path);
V=data(:,1);
C=data(:,2);
W=data(:,3);

在这里插入图片描述

这篇关于linux C按日期动态实时建文件夹按小时建文件继scanf相关的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974349

相关文章

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

Linux下修改hostname的三种实现方式

《Linux下修改hostname的三种实现方式》:本文主要介绍Linux下修改hostname的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下修改ho编程stname三种方式方法1:修改配置文件方法2:hFvEWEostnamectl命

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计