函数集合(持续更新)

函数集合

  • 函数结构
  • 标准IO
    • fopen
    • fclose
    • fgetc
    • fputc
    • fgets
    • fputs
    • fread
    • fwrtie
    • rewind
    • ftell
    • fseek
    • fflush
    • fprintf
    • perror
  • 文件IO
    • 文件IO用到的头文件
    • open
    • close
    • read
    • write
    • lseek
  • 目录IO
    • 目录IO用到的头文件
    • opendir
    • closedir
    • readdir
    • chdir
    • stat
    • getpwuid
    • getgrgid
  • 时间
    • time
    • localtime
    • ctime

函数结构

头文件:


函数声明:


功能:
参数:
返回值:
 成功:
 失败:
使用注意事项:

标准IO

定义在C库中的用于输入输出的函数接口

fopen

头文件:

# include <stdio.h>

函数声明

FILE *fopen(const char *path, const char *mode);

功能: 打开文件
参数:
 const char *path:打开文件的路径
 const char *mode:文件打开方式
返回值:
 成功:返回文件流指针
 失败:返回NULL,更新errno
使用注意事项:

  1. mode打开方式
打开方式权限功能
r只读文件指针定位到文件开头(有文件)
r+可读可写文件指针定位到文件开头(有文件)
w只写文件不存在则创建,文件存在则清空,文件指针定位到文件开头
w+可读可写文件不存在则创建,文件存在则清空,文件指针定位到文件开头
a只写文件不存在则创建,文件存在则追加,文件指针定位到文件末尾
a+可读可写文件不存在则创建,文件存在则追加,文件指针定位到文件末尾
  1. 打开文件是有限资源,最多打开1024个文件所以操作完文件要及时关闭

fclose

头文件:

#include <stdio.h>

函数声明:

int fclose(FILE *stream);

功能: 关闭文件
参数: 文件流指针
返回值:
 成功:返回0
 失败:返回EOF,更新errno

fgetc

头文件:

#include <stdio.h>

函数声明:

int fgetc(FILE *stream);

功能: 从文件中读取一个字符
参数: 流指针,指向目标文件
返回值:
 成功:返回读取到的字符的ASCII,读取到文件末尾返回-1
 失败:返回EOF

fputc

头文件:

#include <stdio.h>

函数声明:

int fputc(int c, FILE *stream);

功能: 向文件中输入一个字符
参数:
 int c:输入字符的ASCII
 FILE *stream:文件流指针,指向目标文件
返回值:
 成功:写入字符的ASCII
 失败:返回EOF,更新errno

fgets

头文件:

#include <stido.h>

函数声明:

char *fgets(char *s, int size, FILE *stream);

功能: 从文件中获取一定长度的字符串
参数:
 char *s:从文件中获取的字符串存放的首地址
 int size:从文件中获取的字符串的长度
 FILE *stream:流指针,指向目标文件
返回值:
 成功:返回读获取的字符串的首地址,读到文件结尾会返回NULL
 失败:返回NULL
使用注意事项:

  1. fgets获取到字符串之后会自动补’\0’,所以实际获取的字符个数为size-1
  2. 文件中不满size-1个字符,有多少字符读多少字符,最后自动补’\0’
  3. 当读取到’\n’时,停止读取内容,再次调用fgets之后从下一行起始位置开始继续读取

fputs

头文件:

#include <stdio.h>

函数声明:

int fputs(const char *s, FILE *stream);

功能: 向文件中写入一定长度的字符串
参数:
 const char *s:向文件中写入的字符串首地址
 FILE *stream:流指针,指向目标文件
返回值:
 成功:输入字符个数
 失败:返回EOF

fread

头文件:

#include <stdio.h>

函数声明:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

功能: 从指定文件中读取内容
参数:
 void *ptr:存放读取内容的首地址
 size_t size:读取一个数据元素的字节大小,一次读多少字节
 size_t nmemb:读取的元素个数
 FILE *stream:流指针,指向目标文件
返回值:
 成功:读取到的文件个数,读到文件末尾返回0
 失败:返回EOF

fwrtie

头文件:

#include <stdio.h>

函数声明:

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

功能: 向文件中写入内容
参数:
 void *ptr:向文件中写入内容的首地址
 size_t size:写入的一个数据元素的字节大小,一次写多少字节
 size_t nmemb:写入的元素个数
 FILE *stream:流指针,指向目标文件
返回值:
 成功:返回写入数据元素的个数
 失败:返回EOF

rewind

头文件:

#incldue <stdio.h>

函数声明:

void rewind (FILE *stream);

功能: 将文件指针移动到文件开头
参数: FILE *stream:流指针,指向目标文件
返回值:

ftell

头文件:

#include <stdio.h>

函数声明:

long ftell(FILE *stream);

功能: 计算文件指针相对于文件开头的字节数
参数: FILE *stream:流指针,指向目标文件
返回值:
 成功:返回文件指针所在位置
 失败:返回EOF,更新errno

fseek

头文件:

#include <stdio.h>

函数声明:

int fseek(FILE *stream, long offset, int whence);

功能: 偏移文件指针的位置
参数:
 FILE *stream:目标文件
 long offset:偏移量,向后为正方向
 int whence:相对位置
返回值:
 成功:返回0
 失败:返回EOF,更新errno
使用注意事项:

宏名相对位置
SEEK_SET文件开头
SEEK_CUR当前位置
SEEK_END文件结尾

fflush

头文件:

#include <stdio.h>

函数声明:

int fflush(FILE* stream);

功能: 强制刷新缓存区
参数: FILE* stream:指向文件,NULL时刷新所有流
返回值:
 成功:返回0
 失败:返回EOF,更新errno

fprintf

头文件:

#include <stdio.h>

函数声明:

int fprintf(FILE *stream, const char *format, ...);

功能: 向指定文件中以指定格式写入数据
参数:
 FILE *stream:流指针,指向目标文件
 const char *format:指定的格式
 ……:多个参数
返回值:
 成功:返回输出字符个数
 失败:返回EOF
使用注意事项: 用法上同printf ,只是多了一个指向文件的指针

perror

头文件:

#include <stdio.h>

函数声明:

void perror(const char *s);

功能: 根据errno获取错误信息,将信息输出到终端
参数: const char *s:提示内容
返回值:

文件IO

文件IO用到的头文件

  1. 纯享版
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unsitd.>

头文件对应的函数

#include <sys/types.h>	// open/lseek
#include <sys/stat.h>	// open
#include <fcntl.h>		// open
#include <unsitd.h>		// close/read/write/lseek

open

头文件:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

函数声明:

int open(const char *pathname, int flags);

功能: 打开文件
参数:
 const char *pathname:文件路径
 int flags:打开方式
返回值:
 成功:返回文件描述符
 失败:返回EOF
使用注意事项:

  1. 文件打开方式对应的操作
文件打开方式对应权限
O_RDONLY只读
O_WRONLY只写
O_RDWR可读可写
O_CREAT创建
O_TRUNC清空
O_APPEND追加
  1. 当参数int flags为O_CREAT(创建)时,函数定义改变
int open(const char *pathname, int flags, mode_t mode);

 mode:创建文件的权限,权限的算法:mode &~umask
 umask:文件权限掩码,值为0002

权限掩码修改:查看权限掩码:umask 修改文件权限掩码:umask 0000 修改后的权限掩码可以与mode保持一致

close

头文件:

#include <unsitd.h>

函数声明:

int close(int fd);

功能: 关闭文件
参数: 文件描述符
返回值:
 成功:0
 失败:-1

read

头文件:

#include <unsitd.h>

函数声明:

ssize_t read(int fd, void *buf, size_t count);

功能: 读文件
参数:
 int fd:文件描述符
 void *buf:存放内容的首地址
 size_t count:期待读取的字符个数
返回值:
 成功:返回实际读取到的字符个数,读到文件结尾返回0
 失败:返回EOF,更新errno
使用注意事项:

  1. read读文件时count是多少就读多少,不会自动补‘\0’,遇到\n也不会自动停止,会继续读取下一行的内容。所以在使用时,需要人为预留下\0的位置
  2. 通过返回值作为实际读到的字符个数
char *buf[32] = {};
ssizeo_t ret = read(fd,buf,31);
buf[ret] = '\0';
  1. 每次读取到的内容放到数组之前先清空数组
memset(buf, 0, sizeof(char)*32);
bzero(buf, sizeof(char)*32);

write

头文件:

#include <unistd.h>

函数声明:

ssize_t write(int fd, const void *buf, size_t count);

功能: 写文件
参数:
 int fd:文件描述符
 void *buf:写入内容的首地址
 size_t count:期待写入的字符个数
返回值:
 成功:返回实际写入的字符个数
 失败:失败返回EOF,并更新errno
使用注意事项: “ 读多少写多少 “ 代码模型

ssize_t ret = read(fd1, buf, 64);
write(fd2, buf, ret);

数组不需要清空,也不需要预留 ’ \0 ’ 的位置

lseek

头文件:

#include <sys/types.h>
#include <unistd.h>

函数声明:

off_t lseek(int fd, off_t offset, int whence);

功能: 将文件指针偏移到指定位置
参数:
 fd:文件描述符
 offset:偏移量:向后为正方向
 whence:相对位置
返回值:
 成功:返回基于文件开头的当前位置,即文件长度,单位为字节
 失败:返回EOF,更新errno
使用注意事项:

宏名相对位置
SEEK_SET文件开头
SEEK_CUR当前位置
SEEK_END文件结尾

目录IO

目录IO用到的头文件

  1. 纯享版
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
  1. 头文件对应的函数
#include <sys/types.h>	// opendir/closedir/stat
#include <dirent.h>		// opendir/closedir/readdir
#include <unistd.h>		// chdir/stat
#include <sys/stat.h>	// stat

opendir

头文件:

#include <sys/types.h>
#include <dirent.h>

函数声明:

DIR *opendir(const char *name);

功能: 打开目录文件
参数: 目录流,指向打开的目录文件
返回值:
 成功:返回目录流指针
 失败:返回NULL,更新errno

closedir

头文件:

#include <sysy/types.h>
#include <dirent.h>

函数声明:

int closedir(DIR *dirp);

功能: 关闭目录文件
参数: 目录流,指向打开的目录文件
返回值:
 成功:返回0
 失败:返回EOF,更新errno

readdir

头文件:

#include <dirent.h>

函数声明:

struct dirent *readdir(DIR *dirp);

功能: 读取目录文件内容
参数: 目录流,指向打开的目录文件
返回值:
 成功:返回结构体指针,读到文件结尾返回NULL
 失败:返回NULL
使用注意事项:
结构体

struct dirent
{ino_t			dino;	// 文件的inodeoff_t			d_off;unsigned short	d_reclen;unsigned char	d_type;	//文件类型,并不支持所有文件类型char			d_name[256]; 	// 文件名
};

chdir

头文件:

#include <unistd.h>

函数声明:

int chdir(const char* path);

功能: 改变当前的工作路径
参数: const char* path:修改之后的路径
返回值:
 成功:返回0
 失败:返回EOF,更新errno
使用注意事项:

  1. 只有程序走到该函数之后,工作路径才会改变,后续的操作都是在修改之后的路径下实现的

stat

头文件:

#include <sysy/types.h>
#include <sys/stat.h>
#include <unistd.h>

函数声明:

int stat(const char *pathname, struct stat *buf);

功能: 获取文件属性
参数:
 const char *pathname:文件
 struct stat *buf:获取到属性存放的位置
返回值:
 成功:返回0
 失败:返回EOF,更新errno
使用注意事项:
buf的结构体内容如下

struct stat
{dev_t		st_dev;		// 包含文件的设备IDino_t		st_ino;		// 文件的inode号mode_t		st_mode;	// 文件的类型和权限nlink_t		st_nlink;	// 硬链接数uid_t 		st_uid;		// 用户IDgid_t     	st_gid;		// 组IDdev_t     	st_rdev;off_t     	st_size;	//大小blksize_t 	st_blksize;	// 文件系统IO块的大小blkcnt_t	st_blocks; 	// 512b的分配数量struct timespec		st_atim;	// 最后一次访问的时间struct timespec		st_mtim;	// 最后一次修改的时间struct timespec		st_ctim;	// 最后一次状态改变的时间
}
  1. 基本用法
    获取文件的inode号
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>int main()
{// 定义变量DIR* dirp = NULL;struct stat sb = {}struct dirent *dir = NULL;// 打开文件dirp = opendir("./");if(dirp == NULL){perror("opendir err");return EOF;}// 读取文件dir = readdir(dirp);// stat获取inode号stat(dir->name, &sb);printf("%s inode is %ld\n", dir->name, sb->st_ino);closedir(dirp);return 0;
}
  1. 获取文件类型
     查询 man 7 inode可以得到对于文件类型定义了以下8进制掩码
宏名掩码值文件类型
S_IFMT0170000判断文件类型
S_IFSOCK0140000socket—套接字
S_IFLNK0120000symbolic link—连接文件
S_IFREG0100000regular file —普通文件
S_IFBLK0060000block device — 块设备文件
S_IFDIR0040000directory — 目录文件
S_IFCHR0020000character—字符设备文件
S_IFIFO0010000FIFO—管道文件
  • 先通过stat获取8进制的mode
stat(dir->name, &sb);
printf("mode is %o",sb.st_mode);
  • 掩码的使用
if((sb.st_mode & S_IFMT) == S_IFREG)printf("普通文件");
  • man手册里还写了另一种宏名写法
宏名判断文件类型
S_ISREG(mode)regular file—普通文件
S_ISDIR(mode)directory—目录文件
S_ISCHR(mode)character device—字符设备文件
S_ISBLK(mode)block device—块设备文件
S_ISFIFO(mode)FIFO—管道文件
S_ISLNK(mode)symbolic link—连接文件
S_ISSOCK(mode)socket—套接字文件
if(S_ISREG(sb.st_mode))printf("regular file\n");
  1. 获取文件权限
    对于文件权限,也有相应的掩码
宏名掩码权限
S_IRUSR00400用户的读权限
S_IWUSR00200用户的写权限
S_IXUSR00100用户的执行权限
S_IRGRP00040同组的读权限
S_IWGRP00020同组的写权限
S_IXGRP00010同组的执行权限
S_IROTH00004其他用户的读权限
S_IWOTH00002其他用户的写权限
S_IXOTH00001其他用户的执行权限
if(sb.st_mode & S_IRUSR)printf("r");
  1. 其他结构体成员的使用
  • 通过用户ID获取用户名
struct passwd* user_name = NULL;
user_name = getpwuid(sb.st_uid);
user_name->pw_name;
  • 通过组ID获取组名
struct group* gig_name = NULL;
gig_name = getgrgid(sb.st_gid);
gig_name->gr_name;
  • 转换时间格式
ctime(sb.st_mtim);
// 将时间转换成为"Wed Jun 30 21:49:08 1993\n"的固定格式

getpwuid

头文件:

#include <pwd.h>

函数声明:

struct passwd* getpwuid(uid_t uid);

功能: 获取用户信息
参数: uid_t uid:用户ID
返回值:
 成功:返回结构体地址
 失败:NULL
使用注意事项:
用户信息结构体

struct passwd
{char *pw_name;	// 用户名char *pw_passwd;	// 用户密码uid_t pw_uid;	// 用户IDgid_t pw_gid;	// 组IDchar *pw_gecos;	// 用户信息char *pw_dir;	// 家目录char *pw_shell;
}

getgrgid

头文件:

#include <grp.h>

函数声明:

struct group *getgrgid(gid_t gid);

功能: 获取组信息
参数: gid_t gid:组ID
返回值:
 成功:返回结构体地址
 失败:NULL
使用注意事项:
组信息结构体

struct group
{char *gr_name;	// 组名char *gr_passwd;	// 组密码gid_t gr_gid;	// 组IDchar **gr_mem;	// 组内成员
}

时间

time

头文件:

#include <time.h>

函数声明:

time_t time(time_t *tloc);

功能: 获取1970-01-01 00:00:00到现在的秒数
参数: time_t *tloc:获取到的时间的地址
返回值:
 成功:返回获取到的时间
 失败:返回EOF
使用注意事项: 返回的是秒数,是一个很大的int类型的数据

localtime

头文件:

#include <time.h>

函数声明:

struct tm *localtime(const time_t *timep);

功能: 将time获取的时间转换成结构体中的格式
参数: const time_t *timep:保存时间变量的地址
返回值:
 成功:返回结构体地址
 失败:返回NULL
使用注意事项:

  1. localtime的结构体定义如下
struct tm
{int tm_sec;	// seconds(0-60)秒int tm_min;	// minutes(0-59)分钟int tm_hour;	// Hours(0-23)小时int tm_yday;	// day in the year(0-365, 1 Jan = 0)天数int tm_wday;	// day in the week (0-6, sunday = 0)周int tm_mday;	// day in the month (1-31)日期int tm_mon;	// month(0-11)月份int tm_year;	// year-1900年份
}
  1. 年份在计算时-掉了1900,所以在输出的时候要+1900

ctime

头文件:

#include <time.h>

函数声明:

char *ctime(const time_t *timep);

功能: 将时间转换成固定格式
参数: const time_t *timep:保存时间变量的地址
返回值:
 成功:返回转换后地址
 失败:返回NULL
使用注意事项:
将时间转换成为"Wed Jun 30 21:49:08 1993\n"的固定格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21925.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

My Metronome for Mac v1.4.2 我的节拍器 支持M、Intel芯片

应用介绍 My Metronome 是一款适用于 macOS 的专业节拍器应用程序&#xff0c;旨在帮助音乐家、作曲家、学生和任何需要精确节奏控制的人进行练习。无论是进行乐器练习、音乐创作还是演出排练&#xff0c;My Metronome 都能为用户提供精准的节拍支持和灵活的功能&#xff0c;确…

第1章大型互联网公司的基础架构——1.12 多机房:主备机房

除了要考虑机房内的各个组件&#xff0c;也要考虑机房自身的高可用问题。使用单机房架构搭建互联网应用后台&#xff0c;虽然接入层、业务服务层、存储层均具备高可用架构&#xff0c;但由于机房是单点&#xff0c;所以还是避免不了机房故障会造成整个应用无法访问的问题。可能…

EasyRTC:基于WebRTC与P2P技术,开启智能硬件音视频交互的全新时代

在数字化浪潮的席卷下&#xff0c;智能硬件已成为我们日常生活的重要组成部分&#xff0c;从智能家居到智能穿戴&#xff0c;从工业物联网到远程协作&#xff0c;设备间的互联互通已成为不可或缺的趋势。然而&#xff0c;高效、低延迟且稳定的音视频交互一直是智能硬件领域亟待…

项目设置内网 IP 访问实现方案

在我们平常的开发工作中&#xff0c;项目开发、测试完成后进行部署上线。比如电商网站、新闻网站、社交网站等&#xff0c;通常对访问不会进行限制。但是像企业内部网站、内部管理系统等&#xff0c;这种系统一般都需要限制访问&#xff0c;比如内网才能访问等。那么一个网站应…

ProfiNet转EtherNet/IP罗克韦尔PLC与监控系统通讯案例

一、案例背景 在新能源产业蓬勃发展的当下&#xff0c;大型光伏电站作为绿色能源的重要输出地&#xff0c;其稳定高效的运行至关重要。某大型光伏电站占地面积广阔&#xff0c;内部设备众多&#xff0c;要保障电站的稳定运行&#xff0c;对站内各类设备进行集中监控与管理必不可…

C++STL——map和set

C教学总目录 map和set 1、set1.1、set简介1.2、set接口简介1.3、set的使用1.4、set其他接口的使用1.5、multiset 2、map2.1、map简介2.2、pair使用2.3、map接口使用2.4、multimap 1、set 1.1、set简介 如图&#xff1a;set是类模板&#xff0c;参数T表示存储的数据类型&#x…

【Research Proposal】基于提示词方法的智能体工具调用研究——研究问题

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;研究问题1. 如何优化提示词方法以提高智能体的工具调用能力&#xff1f;2. 如何解决提示词方法在多模态任务中的挑战&#xff1f;3. 如何通过提示词优化智能体…

PLC数据采集网关(三格电子)

产品概述 PLC转Modbus网关型号SG-PLC-Private&#xff08;PLC私有协议网关&#xff09;&#xff0c;是三格电子推出的工业级网关&#xff08;以下简称网关&#xff09;&#xff0c;主要用于在不需要对PLC编程的情况下将PLC数据映射到Modbus TCP(映射的方式符合PLC工程师使用习惯…

【HBase】HBaseJMX 接口监控信息实现钉钉告警

目录 一、JMX 简介 二、JMX监控信息钉钉告警实现 一、JMX 简介 官网&#xff1a;Apache HBase ™ Reference Guide JMX &#xff08;Java管理扩展&#xff09;提供了内置的工具&#xff0c;使您能够监视和管理Java VM。要启用远程系统的监视和管理&#xff0c;需要在启动Java…

Qt开发⑥Qt常用控件_下_多元素控件+容器类控件+布局管理器

目录 1. 多元素控件 1.1 ?Widget 和 ?View 之间的区别 1.2 List Widget 纵向列表 1.3 Table Widget 表格 1.4 Tree Widget 树形控件 2. 容器类控件 2.1 Group Box 分组框 2.2 Tab Widget 标签页控件 3. 布局管理器 3.1 垂直布局QVBoxLayout 3.2 水平布局QHBoxLayo…

科普mfc100.dll丢失怎么办?有没有简单的方法修复mfc100.dll文件

当电脑频繁弹窗提示“mfc100.dll丢失”或应用程序突然闪退时&#xff0c;这个看似普通的系统文件已成为影响用户体验的核心痛点。作为微软基础类库&#xff08;MFC&#xff09;的核心组件&#xff0c;mfc100.dll直接关联着Visual Studio 2010开发的大量软件运行命脉。从工业设计…

并行计算考前复习整理

并行计算考前复习整理 &#xff08;lwg老师会在最后一节课跟大家讲考点&#xff0c;考试考的东西不会在考点之外&#xff0c;这里面我整理的内容已经将考点全部囊括&#xff0c;最终100分&#xff09; 一、向量求和函数 C语言的串行化实现 CUDA的并行化实现 1、问题一&am…

Windows - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式

Windows(奇思妙想) - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式 前言 Windows启用OpenSSH客户端后就可以通过SSH的方式访问Windows了。但是通过SSH启动的程序&#xff1a; 无法显示图形界面会随着SSH进程的结束而结束 于是想到了一种通过执行“计划…

[C#]C# winform部署yolov12目标检测的onnx模型

yolov12官方框架&#xff1a;github.com/sunsmarterjie/yolov12 【测试环境】 vs2019 netframework4.7.2 opencvsharp4.8.0 onnxruntime1.16.3 【效果展示】 【调用代码】 using System; using System.Collections.Generic; using System.ComponentModel; using System.…

51单片机-按键

1、独立按键 1.1、按键介绍 轻触开关是一种电子开关&#xff0c;使用时&#xff0c;轻轻按开关按钮就可使开关接通&#xff0c;当松开手时&#xff0c;开关断开。 1.2、独立按键原理 按键在闭合和断开时&#xff0c;触点会存在抖动现象。P2\P3\P1都是准双向IO口&#xff0c;…

Baklib云智协同:数字资产赋能企业效能跃升

内容概要 在数字化转型加速的背景下&#xff0c;Baklib通过构建智能化的知识中台架构&#xff0c;为企业打造了贯穿知识采集、整合、应用的全链路解决方案。该平台以动态知识图谱为核心技术底座&#xff0c;支持文档、音视频、代码等20余种格式的数字资产全生命周期管理&#…

Windows10配置C++版本的Kafka,并进行发布和订阅测试

配置的环境为&#xff1a;Release x64下的环境 完整项目&#xff1a;https://gitee.com/jiajingong/kafka-publisher 1、首先下载相应的库文件&#xff08;.lib&#xff0c;.dll&#xff09; 参考链接&#xff1a; GitHub - eStreamSoftware/delphi-kafka GitHub - cloade…

基于云的物联网系统用于实时有害藻华监测:通过MQTT和REST API无缝集成ThingsBoard

论文标题 **英文标题&#xff1a;**Cloud-Based IoT System for Real-Time Harmful Algal Bloom Monitoring: Seamless ThingsBoard Integration via MQTT and REST API **中文标题&#xff1a;**基于云的物联网系统用于实时有害藻华监测&#xff1a;通过MQTT和REST API无缝集…

构建医疗Mini DeepSeek R1:用强化学习训练

构建 医疗迷你 DeepSeek R1&#xff1a;用强化学习训练 在当今快速发展的技术时代&#xff0c;大语言模型&#xff08;LLMs&#xff09;与医疗的结合带来了无限的机遇和独特的挑战。本文探索如何利用 Group Relative Policy Optimization&#xff08;GRPO&#xff09;——由 D…

在mfc中使用自定义三维向量类和计算多个三维向量的平均值

先添加一个普通类, Vector3.h, // Vector3.h: interface for the Vector3 class. // //#if !defined(AFX_VECTOR3_H__53D34D26_95FF_4377_BD54_57F4271918A4__INCLUDED_) #define AFX_VECTOR3_H__53D34D26_95FF_4377_BD54_57F4271918A4__INCLUDED_#if _MSC_VER > 1000 #p…