Linux-笔记 应用编程函数总结

之前一直没做总结,这里总结一下。

一、文件I/O

        open

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
例子:
int fd;
fd = open("./test_kondon", O_WRONLY | O_CREAT | O_EXCL);        

write

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
例子:
    int fd1, ret;
    char buffer[50] = "hello world";

    fd1 = open("/src_file", O_RDONLY);
    if (-1 ==  fd1) {
        printf("open src_file error");
        return -1;
    }
  

    ret = write(fd1, buffer, sizeof(buffer));
    if (ret == -1) {
        printf("Error: write dest_file failed!\n");
        goto err1;
    }

    ret = 0;

    close(fd1);
  


err1:
    close(fd1);

read

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
例子:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>


int main(int argc, char **argv) {
    
    int fd1, ret;
    char buffer[1024];

    fd1 = open("/src_file", O_RDONLY);
    if (-1 ==  fd1) {
        printf("open src_file error");
        return -1;
    }
    

    ret = lseek(fd1, 500, SEEK_SET);
    if (-1 == ret)
        goto err1;

    ret = read(fd1, buffer, sizeof(buffer));
    if (-1 == ret) {
        printf("Error: read src_file filed!\n");
        goto err1;
    }


    ret = 0;

    close(fd1);


err1:
    close(fd1);
}

close

#include <unistd.h>
int close(int fd);

lseek

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
//SEEK_SET SEEK_CUR SEEK_END
例子:
int fd1, fd2, ret;
    char buffer[1024];

    fd1 = open("/src_file", O_RDONLY);
    if (-1 ==  fd1) {
        printf("open src_file error");
        return -1;
    }
    
    fd2 = open("/dest_file", O_WRONLY | O_CREAT | O_EXCL | S_IRWXU | S_IRGRP | S_IROTH);
    if (fd2 == -1) {    
        printf("open dest_file error");
        ret = -1;
        goto err1;
    }

    ret = lseek(fd1, 500, SEEK_SET);
    if (-1 == ret)
        goto err2;

    ret = read(fd1, buffer, sizeof(buffer));
    if (-1 == ret) {
        printf("Error: read src_file filed!\n");
        goto err2;
    }

    ret = lseek(fd2, 0, SEEK_SET);
    if (-1 == ret) {
        goto err2;
    }

    ret = write(fd2, buffer, sizeof(buffer));
    if (ret == -1) {
        printf("Error: write dest_file failed!\n");
        goto err2;
    }

    ret = 0;

    close(fd1);
    close(fd2);


err2:
    close(fd2);
err1:
    close(fd1);

perror

#include <stdio.h>
void perror(const char *s);
例子:

int fd;

/* 打开文件 */
fd = open("./test_file", O_RDONLY);
if (-1 == fd) {
    perror("open error");
    return -1;
}

close(fd);

return 0;

dup

#include <unistd.h>
int dup(int oldfd);
//复制文件描述符

dup2

#include <unistd.h>
int dup2(int oldfd, int newfd);
//复制文件描述符

pread & pwrite

#include <unistd.h>
ssize_t pread(int fd, void *buf, size_t count, off_t offset);
//先调用lseek再read
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
//先调用lseek再write

fcntl

:fcntl()函数可以对一个已经打开的文件描述符执行一系列控制操作,譬如复制一个文件描述符(与 dup、dup2 作用相同)、获取/设置文件描述符标志、获取/设置文件状态标志等,类似于一个多功能文件描述符管理工具箱

  //fcntl()函数可以对一个已经打开的文件描述符执行一系列控制操作,譬如复制一个文件描述符(与 dup、dup2 作用相同)、获取/设置文件描述符标志、获取/设置文件状态标志等,类似于一个多功能文件描述符管理工具箱

#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd, ... /* arg */ )
⚫ 复制文件描述符(cmd=F_DUPFD 或 cmd=F_DUPFD_CLOEXEC);
⚫ 获取/设置文件描述符标志(cmd=F_GETFD 或 cmd=F_SETFD);
⚫ 获取/设置文件状态标志(cmd=F_GETFL 或 cmd=F_SETFL);
⚫ 获取/设置异步 IO 所有权(cmd=F_GETOWN 或 cmd=F_SETOWN);
⚫ 获取/设置记录锁(cmd=F_GETLK 或 cmd=F_SETLK);

ioctl

:文件 IO 操作,一般用于操作特殊文件或硬件外设,通过 ioctl 获取 LCD 相关信息等

//文件 IO 操作,一般用于操作特殊文件或硬件外设,通过 ioctl 获取 LCD 相关信息等
#include <sys/ioctl.h>
int ioctl(int fd, unsigned long request, ...);

truncate & ftruncate

//将普通文件截断为指定字节长度,ftruncate()使用文件描述符 fd 来指定目标文件,truncate()则直接使用文件路径 path 来指定目标文件
//使用 ftruncate()函数进行文件截断操作之前,必须调用 open()函数打开该文件得到文件描述符,并且必
须要具有可写权限,也就是调用 open()打开文件时需要指定 O_WRONLY 或 O_RDWR。调用这两个函数并不会导致文件读写位置偏移量发生改变,所以截断之后一般需要重新设置文件当前的读写位置偏移量
#include <unistd.h>
#include <sys/types.h>
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);

例子:
/* 使用 ftruncate 将 file1 文件截断为长度 0 字节 */
 if (0 > ftruncate(fd, 0)) {
     perror("ftruncate error");
     exit(-1);
 }

 /* 使用 truncate 将 file2 文件截断为长度 1024 字节 */
 if (0 > truncate("./file2", 1024)) {
     perror("truncate error");
     exit(-1);
 }

二、标准I/O   

        标准 I/O 库函数是构建于文件 I/O open() read() write() lseek() close() 等)这些系统调用之上的, 譬如标准 I/O 库函数 fopen() 就利用系统调用 open() 来执行打开文件的操作、 fread() 利用系统调用 read() 来执行读文件操作、fwrite() 则利用系统调用 write() 来执行写文件操作等等。

 

fopen

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);

fclose

#include <stdio.h>
int fclose(FILE *stream);

fread 

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
例子:
    FILE *fp = NULL;
    char buf[50] = {0};
    int size = 0;
    int ret = 0;

    if (NULL == (fp = fopen("./test_file1", "r"))) {
        perror("test_file1 open failed");
        exit(-1);
    }
    ret = fseek(fp, 0, SEEK_END);
    if (ret < 0) {
        perror("test_file1 seek failed");
        fclose(fp);
        exit(-1);
    }

    long fileSize = ftell(fp);
    printf("文件大小:%ld\r\n", fileSize);

    printf("文件打开成功\r\n");


    ret = fseek(fp, 0, SEEK_SET);
    if (ret < 0) {
        perror("test_file1 seek failed");
        fclose(fp);
        exit(-1);
    }

    if (0 > (size = fread(buf, 1, fileSize, fp))) {
        printf("文件读取失败\r\n");
        fclose(fp);
        exit(-1);
    }

    printf("读取到 %d 个数据:%s\r\n", size, buf);

    fclose(fp);
    exit(0);


fwrite

#include <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
例子:
    char buf[] = "Hello World\n";
    FILE *fp = NULL;

    if (NULL == (fp = fopen("./test_file1", "w"))) {
        perror("Couldn't open");
        exit(-1);
    }

    printf("文件打开成功");

    if (sizeof(buf) > fwrite(buf, 1, sizeof(buf), fp)) {
        printf("Couldn't write"); 
        fclose(fp);
        exit(-1);
    }

    printf("写入数据成功\n");

    fclose(fp);
    exit(0);

fseek

#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
例子:
//fseek(file, 0, SEEK_SET);
//fseek(file, 0, SEEK_END);
//fseek(file, 100, SEEK_SET);

    FILE *fp = NULL;
    int ret = 0;
    char read_buf[100] = {0};
    char write_buf[] = "www.example.com\r\n";

    if (NULL == (fp = fopen("./test_file", "w+"))) {
        perror("Couldn't open");
        exit(-1);
    }

    printf("文件打开成功\r\n");

    if (sizeof(write_buf) > fwrite(write_buf, 1, sizeof(write_buf), fp)) {
        printf("Couldn't write");
        fclose(fp);
        exit(-1);
    }

    printf("文件写入成功\r\n");

    if (0 > fseek(fp, 0, SEEK_SET)) {
        perror("FSEEK could");
        fclose(fp);
        exit(-1);
    }

    printf("文件定位头成功\r\n");

    if (sizeof(write_buf) > (ret = fread(read_buf, 1, sizeof(read_buf), fp))) {
        printf("Couldn't read");
        fclose(fp);
        exit(-1);
    }

    printf("读取到 %d 个字符:%s\r\n", ret, read_buf);

    fclose(fp);
    exit(0);

ftell

   :获取文件当前的读写位置偏移量
#include <stdio.h>
long ftell(FILE *stream);
例子:
/* 获取当前位置偏移量 */
 if (0 > (ret = ftell(fp))) {
     perror("ftell error");
     fclose(fp);
     exit(-1);
 }

feof

测试参数 stream 所指文件的 end-of-file 标志,如果 end-of-file 标志被设置了,则调用feof()函数将返回一个非零值,如果 end-of-file 标志没有被设置,则返回 0

//当文件的读写位置移动到了文件末尾时,end-of-file 标志将会被设置
#include <stdio.h>
int feof(FILE *stream);
例子:
    FILE *fp = NULL;
    int ret = 0;
    char read_buf[100] = {0};
    char write_buf[] = "www.example.com\r\n";

    if (NULL == (fp = fopen("./test_file", "w+"))) {
        perror("Couldn't open");
        exit(-1);
    }

    printf("文件打开成功\r\n");

    if (sizeof(write_buf) > fwrite(write_buf, 1, sizeof(write_buf), fp)) {
        printf("Couldn't write");
        fclose(fp);
        exit(-1);
    }

    printf("文件写入成功\r\n");

    if (0 > fseek(fp, 0, SEEK_SET)) {
        perror("FSEEK could");
        fclose(fp);
        exit(-1);
    }

    printf("文件定位头成功\r\n");

    while (1) {
        if (sizeof(write_buf) > (ret = fread(read_buf, 1, sizeof(read_buf), fp))) {
            printf("Couldn't read\r\n");
            fclose(fp);
            exit(-1);
        }
        if (feof(fp)) {
            printf("到达文件末尾\r\n");
            break;
        }
    }
    
    printf("读取到 %d 个字符:%s\r\n", ret, read_buf);

    fclose(fp);
    exit(0);

ferror

测试参数 stream 所指文件的错误标志,如果错误标志被设置了,则调用 ferror()函数将返回一个非零值,如果错误标志没有被设置,则返回 0

#include <stdio.h>
int ferror(FILE *stream);
例子:
    FILE *fp = NULL;
    int ret = 0;
    char read_buf[100] = {0};
    char write_buf[] = "www.example.com\r\n";

    if (NULL == (fp = fopen("./test_file", "w+"))) {
        perror("Couldn't open");
        exit(-1);
    }

    printf("文件打开成功\r\n");

    if (sizeof(write_buf) > fwrite(write_buf, 1, sizeof(write_buf), fp)) {
        printf("Couldn't write");
        fclose(fp);
        exit(-1);
    }

    printf("文件写入成功\r\n");

    if (0 > fseek(fp, 0, SEEK_END)) {
        perror("FSEEK could");
        fclose(fp);
        exit(-1);
    }

    printf("文件定位头成功\r\n");

    while (1) {
        if (sizeof(write_buf) > (ret = fread(read_buf, 1, sizeof(read_buf), fp))) {
            if (ferror(fp)) {
                printf("Couldn't read");
                fclose(fp);
                exit(-1);
            }
        }
        
        if (feof(fp)) {
            printf("到达文件末尾\r\n");
            break;
        }
    }
    
    printf("读取到 %d 个字符:%s\r\n", ret, read_buf);

    fclose(fp);
    exit(0);

clearerr

清除 end-of-file 标志和错误标志,当调用 feof()ferror()校验这些标志后,通常需要清除这些标志,避免下次校验时使用到的是上一次设置的值,此时可以手动调用 clearerr()函数清除标志。

#include <stdio.h>
void clearerr(FILE *stream);
例子:
    FILE *fp = NULL;
    int ret = 0;
    char read_buf[100] = {0};
    char write_buf[] = "www.example.com\r\n";

    if (NULL == (fp = fopen("./test_file", "w+"))) {
        perror("Couldn't open");
        exit(-1);
    }

    printf("文件打开成功\r\n");

    if (sizeof(write_buf) > fwrite(write_buf, 1, sizeof(write_buf), fp)) {
        printf("Couldn't write");
        fclose(fp);
        exit(-1);
    }

    printf("文件写入成功\r\n");

    if (0 > fseek(fp, 0, SEEK_SET)) {
        perror("FSEEK could");
        fclose(fp);
        exit(-1);
    }

    printf("文件定位头成功\r\n");

    while (1) {
        if (sizeof(write_buf) > (ret = fread(read_buf, 1, sizeof(read_buf), fp))) {
            printf("Couldn't read\r\n");
            fclose(fp);
            exit(-1);
        }
        if (feof(fp)) {
            printf("到达文件末尾1\r\n");
            clearerr(fp); //清除标志,后面的输入输出操作继续进行

            if (feof(fp)) {
                printf("到达文件末尾2\r\n");
            }
            
            break;
        }
    }
    
    printf("读取到 %d 个字符:%s\r\n", ret, read_buf);

    fclose(fp);
    exit(0);

格式化I/O:格式化输出

#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int dprintf(int fd, const char *format, ...);
int sprintf(char *buf, const char *format, ...);
int snprintf(char *buf, size_t size, const char *format, ...);

printf("Hello World!\n");
//格式化数据写入到由 FILE 指针指定的文件中
fprintf(stderr, "Hello World!\n");
//格式化数据写入到由文件描述符 fd 指定的文件中
dprintf(STDERR_FILENO, "Hello World!\n");
//格式化数据存储在由参数 buf 所指定的缓冲区中
char buf[100];
sprintf(buf, "Hello World!\n");

char buf[20] = {0};
sprintf(buf, "%d", 100);
格式控制字符串 format
printf("转换说明 1 转换说明 2 转换说明 3", arg1, arg2, arg3);

转换说明:%[flags][width][.precision][length]type
%(必选)
flags:标志,可包含 0 个或多个标志;
width:输出最小宽度,表示转换后输出字符串的最小宽度;
precision:精度,前面有一个点号" . ";
length:长度修饰符;
type:转换类型,指定待转换数据的类型。(必选)

例子:
    int a = 0, b = 0, c = 0;
    char buf[50] = {0};

    printf("%d (%s) %d (%s)\n", 520, "Tux", 1314, "xuT");          

    fprintf(stdout, "%d (%s) %d (%s)\n", 520, "Tux", 1314, "xuT");        

    dprintf(STDOUT_FILENO, "%d (%s) %d (%s)\n", 520, "Tux", 1314, "xuT");

    sprintf(buf, "%d (%s) %d (%s)\n", 520, "Tux", 1314, "xuT");
    printf("%s", buf);

    memset(buf, 0x00, sizeof(buf));
    snprintf(buf, sizeof(buf), "%d (%s) %d (%s)\n", 520, "Tux", 1314, "xuT");
    printf("%s", buf);

    exit(0);

格式化I/O:格式化输入

#include <stdio.h>

//scanf()函数可将用户输入(标准输入)的数据进行格式化转换
int scanf(const char *format, ...);

//fscanf()函数从 FILE 指针指定文件中读
取数据,并将数据进行格式化转换
int fscanf(FILE *stream, const char *format, ...);

//sscanf()函数从参数 str 所指向的字符串中读取数据,并将数据进行格式
化转换。
int sscanf(const char *str, const char *format, ...);

例子:

int a, b, c;
scanf("%d %d %d", &a, &b, &c);

int a, b, c;
fscanf(stdin, "%d %d %d", &a, &b, &c);

char *str = "5454 hello";
char buf[10];
int a;
sscanf(str, "%d %s", &a, buf);

fsync

fsync()函数,对目标文件的数据进行了同步操作,将参数 fd 所指文件的内容数据和元数据写入磁盘,只有在对磁盘设备的写入操作完成之后,fsync()函数才会返回。

#include <unistd.h>
int fsync(int fd);

fdatasync

:将参数 fd 所指文件的内容数据写入磁盘,并不包括文件的元数据;同样,只有在对磁盘设备的写入操作完成之后,fdatasync()函数才会返回
#include <unistd.h>
int fdatasync(int fd);

sync

将所有文件 I/O 内核缓冲区中的文件内容数据和元数据全部更新到磁盘设备中,该函数没有参数、也无返回值,意味着它不是对某一个指定的文件进行数据更新,而是刷新所有文件 I/O 内核缓 冲区。

#include <unistd.h>
void sync(void);

内核缓冲标志

O_DSYNC:在调用 open()函数时,指定 O_DSYNC 标志,其效果类似于在每个 write()调用之后调用 fdatasync()函数进行数据同步。譬如:
fd = open(filepath, O_WRONLY | O_DSYNC);


O_SYNC:在调用 open()函数时,指定 O_SYNC 标志,使得每个 write()调用都会自动将文件内容数据和元数据刷新到磁盘设备中,其效果类似于在每个 write()调用之后调用 fsync()函数进行数据同步,譬如:
fd = open(filepath, O_WRONLY | O_SYNC);

fileno

:将标准 I/O 中使用的 FILE 指针转换为文件 I/O 中所使用的文件描述符

#include <stdio.h>
int fileno(FILE *stream);

fdopen

:将 文件 I/O 中所使用的文件描述符转换成标准 I/O 中使用的 FILE 指针
#include <stdio.h>

FILE *fdopen(int fd, const char *mode);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文章解读与仿真程序复现思路——电力系统保护与控制EI\CSCD\北大核心《基于改进粒子滤波的锂离子电池剩余寿命预测 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

在使用LabVIEW控制多个串口设备进行数据读取时,读取时间过长

在使用LabVIEW控制多个串口设备进行数据读取时&#xff0c;如果发现数据更新时间超过5秒&#xff0c;可以从以下几个方面进行分析和解决&#xff1a; 1. 串口配置与通信参数 确保每个串口的通信参数&#xff08;波特率、数据位、停止位、校验位等&#xff09;配置正确&#x…

vue的异步操作,钩子函数,和Element组件

目录 使用vue进行异步操作 钩子函数 1.create 2.beforeMount​ 3.mounted​ 4.beforeUpdate​ 5.updated​ 6.beforeUnmount​ 7.unmounted​ Element组件 使用vue进行异步操作 <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

扫描链接打开小程序配置-谁看谁迷糊

各位你们怎么理解这个规则&#xff1f;如果再多一条数据&#xff0c;和上面一样&#xff0c;只是测试范围为线上版本&#xff0c;又怎么解读&#xff1f; 反正以我对中文的掌握程度&#xff0c;我认为上面的规则是针对体验版的&#xff0c;符合规则的都跳转到体验版。新增的线上…

「51媒体」如何与媒体建立良好关系?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 与媒体建立良好关系对于企业或个人来说都是一项重要的公关活动。 了解媒体&#xff1a;研究媒体和记者的兴趣&#xff0c;提供相关且有价值的信息。 建立联系&#xff1a;通过专业的方式…

FastCopy

目录 背景: 简介&#xff1a; 原理: 下载地址: 工具的使用: 背景: 简介&#xff1a; FastCopy是一款速度非常快的拷贝软件&#xff0c;软件版本为5.7.1 Fastcopy是日本的最快的文件拷贝工具&#xff0c;磁盘间相互拷贝文件是司空见惯的事情&#xff0c;通常情况…

Vue3实战笔记(41)—自己封装一个计时器Hooks

文章目录 前言计时器钩子总结 前言 在Vue项目中&#xff0c;封装一个计时器挂钩&#xff08;Hook&#xff09;是一种实用的技术&#xff0c;它允许你在组件中方便地管理定时任务&#xff0c;如倒计时、计时器等&#xff0c;而无需在每个使用场景重复编写相同的逻辑代码。 计时…

金职优学:分析央国企面试如何通关?

在当今竞争激烈的就业市场中&#xff0c;中央和国有企业&#xff08;以下简称“央国企”&#xff09;的面试机会对求职者来说是非常有吸引力的。这些企业通常拥有稳定的发展前景、良好的薪酬福利和广阔的职业发展空间。但是&#xff0c;要想成功通过央国企的面试&#xff0c;求…

Python列表,元组,集合,字典详解一篇搞懂

目录 介绍 列表(List) 集合(Set) 字典(Dict) 元组(Tuple) 列表 列表定义 ​编辑 列表切片 列表常用方法 append extend ​编辑 insert ​编辑 remove pop ​编辑 clear ​编辑 列表修改元素 sort 升序 倒序 reverse count ​编辑 index 浅拷贝和深拷贝 …

vue contextPath的思考

先说我这边的情况&#xff0c;目前项目都是前后端分离开发的&#xff0c;上线有种部署方式&#xff0c;常见的就是前后端分开部署&#xff0c;这是比较常见的&#xff0c;我这边因客户原因&#xff0c;打包一起进行部署比较简单&#xff0c;交付技术运维部方便后期其他现场部署…

线性规划库PuLP使用教程

Python求解线性规划——PuLP使用教程 简洁是智慧的灵魂&#xff0c;冗长是肤浅的藻饰。——莎士比亚《哈姆雷特》 文章目录 一、说明二、安装 PuLP 库三、线性规划简介3.1 线性规划3.1.1 高考题目描述3.1.2 基本概念 3.2 整数规划3.2.1 题目描述[3]3.2.2 解题思路 四、求解过程…

Python实现数据可视化效果图总结

一、JSON格式 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据。 JSON本质上是一个带有特定格式的字符串 Json格式 JSON数据格式在Python中可以是字典、又可以是列表中嵌套着字典的格式。 Pyhton数据和Json数据相互转化 二、pyecharts模块 如果想…

NL6621 实现获取天气情况

一、主要完成的工作 1、建立TASK INT32 main(VOID) {/* system Init */SystemInit();OSTaskCreate(TestAppMain, NULL, &sAppStartTaskStack[NST_APP_START_TASK_STK_SIZE -1], NST_APP_TASK_START_PRIO); OSStart();return 1; } 2、application test task VOID TestAp…

Node.js —— 前后端的身份认证 之用 express 实现 JWT 身份认证

JWT的认识 什么是 JWT JWT&#xff08;英文全称&#xff1a;JSON Web Token&#xff09;是目前最流行的跨域认证解决方案。 JWT 的工作原理 总结&#xff1a;用户的信息通过 Token 字符串的形式&#xff0c;保存在客户端浏览器中。服务器通过还原 Token 字符串的形式来认证用…

idea2024 nacos中文报错

idea2024 nacos中文报错 报错提示为&#xff1a;Input length 1 报错原因&#xff1a;项目启动编码与nacos编码不一致。 处理方式 添加启动参数utf8修改项目编码格式为utf8 修改idea.vmoptions Help -> Edit Custom 添加一行&#xff1a;-Dfile.encodingUTF-8

解决LabVIEW通过OPC Server读取PLC地址时的错误180121602

在使用LabVIEW通过OPC Server读取PLC地址时&#xff0c;若遇到错误代码180121602&#xff0c;建议检查网络连接、OPC Server和PLC配置、用户权限及LabVIEW设置。确保网络畅通&#xff0c;正确配置OPC变量&#xff0c;取消缓冲设置以实时读取数据&#xff0c;并使用诊断工具验证…

项目9-网页聊天室2(登录)

0.前端知识储备 Ajax请求中的async:false/true的作用 - front-gl - 博客园 (cnblogs.com) 01.前端页面展示 02.后端代码 2.1 CONTROLLER RequestMapping("/login")public Result login(String username, String password, HttpSession httpSession){User user …

macOS Monterey 12.7.5 (21H1222) Boot ISO 原版可引导镜像下载

macOS Monterey 12.7.5 (21H1222) Boot ISO 原版可引导镜像下载 5 月 13 日凌晨&#xff0c;macOS Sonoma 14.5 发布&#xff0c;同时带来了 macOS Ventru 13.6.7 和 macOS Monterey 12.7.5 安全更新。 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#x…

windows上pycharm调试streamlit应用

windows上pycharm调试streamlit应用 开发环境: PyCharm 2023.3.5 (Professional Edition) windows10 conda(python3.11.7) streamlit1.33.0 创建应用 app.py import streamlit as stst.header("hello") st.write("this is a streamlit demo")启动应…

使用Python探究OpenAI API

谁没听说过OpenAI?这家人工智能研究实验室因其著名的产品ChatGPT而改变了世界。它改变了AI实施领域&#xff0c;许多公司现在急于成为下一大热点。 尽管竞争激烈&#xff0c;OpenAI仍然是任何生成式AI业务需求的首选公司&#xff0c;因为它拥有最好的模型和持续的支持。该公司…