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

相关文章

Java设计模式之代理模式2-动态代理(jdk实现)

这篇是接着上一篇继续介绍java设计模式之代理模式。下面讲解的是jdk实现动态代理。 1.)首先我们要声明一个动态代理类,实现InvocationHandler接口 package com.zhong.pattern.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/*** 演

java相关网站

https://www.jcp.org/en/home/index (Java社区流程 处理JSR:Java规范请求)https://docs.oracle.com/en/(oracle java官方文档)https://www.infoq.cn/(infoq )http://tutorials.jenkov.com/

Linux命令学习之二

每日一结 ​               命令置换:是将一个命令的输出作为另一个命令的参数,命令格式如下: commond1 `command2` 其中,命令command2的输出将作为命令command1的参数,需要注意的是, 命令置换的单引号为ESC键下方的 ` 其意思就是说,先运行单引号内的命令,再将其命令作为

Linux命令学习之一

每日一结                                                                                        注:当用户不确定一个软件包的类型时, 可使用file命令查看文件类型

Linux文件I/O之一

每日一结(标准I/O)   一  库    本质 :一组实现函数接口 [printf,scanf,strcpy,strlen]   使用标准库好处:屏蔽底层细节,向上层提供统一的接口,提高程序的可移植性   windows 库 : *.dll  linux   库 : *.so    二 系统调用接口    本

标准I/O相关函数

一、打开一个流 这三个函数的区别是: (1)fopen打开路径名由pathname指示的一个文件 (2)freopen常用于一个打开的流重新定向。比如stdout是标准输出,我们可以把它重定向到由path指定的一个文件。 (3)fdopen取一个现存的文件描述符,并使一个标准的I/O流与该描述符相结合。 总结如下: 二、一步步探究

文件I/O相关函数

一、文件描述符 对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或创建一个新文件时,内核向进程返回一个文件描叙符。当读、写一个文件时,用open或creat返回的文件描述符标识该文件,将其作为参数传送给read或write。 按照惯例,UNIX shell使文件描述符0与进程的标准输入相结合,文件描述符1与标准输出相结合,文件描述符2与标准出

Linux网络编程之五

每日一结 组播: ​ 网络地址: 一些特殊的组播地址:   一 组播包收和发 1.发送方 (1)创建用户数据报套接字 (2)填充组播地址和端口  (3)发送数据到组播地址 2.接收方  (1)创建用户数据报套接字 (2)加入组播组  struct ip_mreq mreq; mreq.imr_m

Linux网络编程之四

每日一结 一 UDP并发  核心思想:父进程接收到客户端的数据,就创建子进程,在子进程中创建一个新的套接字  和客户端交互  int do_client(接受客户端地址,数据,数据长度) { 1.创建用户数据报套接字  2.自动分配地址  3.处理数据[例如:输出数据内容] 4.通过新创建的套接字将数据回发给客户端  w

Linux网络编程之三

每日一结 Tftp服务器的实现: server.c ​       client.c     代码分析如下:     一 Linux IO模型  (1)阻塞IO  (2)非阻塞IO  非阻塞IO