【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十一章 文件IO和标准IO

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、

【公众号】迅为电子

【粉丝群】258811263(加群获取驱动文档+例程)


第二篇 Linux系统编程篇

本章内容对应视频讲解链接(在线观看):

什么是linux系统编程  https://www.bilibili.com/video/BV1zV411e7Cy?share_source=copy_web

Linux系统编程基本程序框架   Linux系统编程基本程序框架_哔哩哔哩_bilibili

什么是Linux系统编程呢?Linux系统编程也叫Linux下的高级编程。是介于应用层和驱动层之间的。内核向用户提供的接口。本章讲述编写Linux系统应用层软件常用的一些技术,包括文件IO,标准IO,进程线程操作。这些运行在系统应用层的程序直接与内核和系统核心库进行交互,只能在Linux上运行,不能跨平台,也就是不能运行在其他操作系统上(比如windows)。Linux根据UNIX发展而来,属于类UNIX操作系统,拥有UNIX特点,但是Linux作为开源软件更专注实用功能,支持更多的系统调用,从而拥有更多的新特性。

学习系统编程可以使用man手册查看API,查找用到的头文件,如“man 2 open”,使用“top”等命令查看进程状态。本文档主要通过实验例程来说明各系统调用API和各种机制的用法。

在开始系统编程前首先要搭建环境,大家可以参考本手册第二十四章安装 Samba,首先我们来了解下Linux系统编程的基本程序框架。Samba搭建好之后,我们在samba文件夹下新建linux文件夹,如下图所示:

首先来编写下Linux系统编程的基本程序框架,在linux文件夹下新建01文件夹,01文件夹里面新建test.c文件,内容如下所示。代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\01”目录下。

#include <stdio.h>

#include <stdlib.h>

int main(int argc,char *argv[])

{

    //argc:表示的是命令行中参数的个数。 

    //argv:表示的是命令行中的参数

    int i;

    printf("argc is %d\n",argc);

    for(i=0;i<argc;i++){

        printf("argv[%d] is %s\n",i,argv[i]);

    };

    return 0;

}

我们在Ubuntu的Samba目录下输入以下编译test.c,如下图所示编译生成了a.out。 

gcc test.c

ls

此时main()函数是没有参数的,但是我们在学习Linux系统编程的时候,大多数main函数都是带参数的,因为我们要配合命令行来给我们的程序传参数。大部分情况下,main函数的参数为int argc,char *argv[]。argc表示的命令行中参数的个数。argv表示的是命令行中的参数。

第三十一章 文件IO和标准IO

本章内容对应视频讲解链接(在线观看):

标准IO和文件IO  https://www.bilibili.com/video/BV1zV411e7Cy?p=3

文件 IO是Linux系统提供的接口,针对文件和磁盘进行操作,不带缓存机制;标准IO是C语言函数库里的标准I/O模型在stdio.h中定义,通过缓冲区操作文件,带缓存机制。Linux系统中一切皆文件,包括普通文件,目录,设备文件(不包含网络设备),管道,fifio队列,socket套接字等,在终端输入“ls -l”可查看文件类型和权限。

标准IO和文件IO常用API如下:

标准IO

文件IO

打开/创建

fopen

open

getc,fgetc,getchar,fgets,gets,

fread

read

putc,fputc,putc,fputs,puts,

fwrite

write

关闭

fclose

close

标准IO和文件IO的区别如下图所示:

文件IO是直接调用内核提供的系统调用函数,头文件是unistd.h,标准IO是间接调用系统调用函数,头文件是stdio.h,文件IO是依赖于Linux操作系统的,标准IO是不依赖操作系统的,所以在任何的操作系统下,使用标准IO,也就是C库函数操作文件的方法都是相同的。

对于文件IO来说,一切都是围绕文件操作符来进行的。在Linux系统中,所有打开的文件都有一个对应的文件描述符。文件描述符的本质是一个非负整数,当我们打开一个文件时,系统会给我们分配一个文件描述符。当我们对一个文件做读写操作的时候,我们使用open函数返回的这个文件描述符会标识该文件,并将其作为参数传递给read或者write函数。在posix.1应用程序里面,文件描述符0,1,2分别对应着标准输入,标准输出,标准错误。

31.1 文件IO open()

本章内容对应视频讲解链接(在线观看):

文件I0之open函数  https://www.bilibili.com/video/BV1zV411e7Cy?p=4

函数

int open(const char *pathname, int flags)

int open(const char *pathname, int flags, mode_t mode)

头文件

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

参数pathname

路径和文件名

参数flags

文件打开方式,可用多个标志位按位或设置

参数mode

权限掩码,对不同用户和组设置可执行,读,写权限,使用八进制数表示,此参数可不写

返回值

open()执行成功会返回int型文件描述符,出错时返回-1。

作用

通过系统调用,可以打开文件,并返回文件描述符

参数flags可选标志:

O_CREAT 要打开的文件名不存在时自动创建改文件。

O_EXCL 要和O_CREAT一起使用才能生效,如果文件存在则open()调用失败。

O_RDONLY 只读模式打开文件。

O_WRONLY 只写模式打开文件。

O_RDWR 可读可写模式打开文件。

O_APPEND 以追加模式打开文件。

O_NONBLOCK 以非阻塞模式打开。

 

实验代码

编写程序,在同一目录下创建并打开一个可读可写文件a.c。代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\02”目录下。

#include <stdio.h>

#include <stdlib.h>       

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int main(int argc,char *argv[])

{

    int fd;

    fd=open("a.c",O_CREAT|O_RDWR,0666);

    if(fd<0)

    {

          printf("open is error\n");

    }

    printf("fd is %d\n",fd);

    return 0;

}

 

编译运行:

在Ubuntu上编译open.c,并运行a.out,如下图所示:

在程序中打开的文件描述符为3,这是因为在一个进程中至少包含三个文件描述符,即0表示标准输入stdin,1表示标准输出stdout,2表示标准错误stderr。

交叉编译open.c,通过NFS将编译好的文件拷贝到iTOP-iMX8MM开发板,如下图所示:

31.2 文件IO close()

本章内容对应视频讲解链接(在线观看):

文件I0之close函数→https://www.bilibili.com/video/BV1zV411e7Cy?p=5

函数

int close(int fd)

头文件

#include <unistd.h>

参数fd

文件描述符

返回值

成功返回0;错误返回-1

实验代码

编写程序,在同一目录下打开并创建一个可读可写文件,获取完属性后关闭。代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\03”目录下。

#include <stdio.h>

#include <stdlib.h>       

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

int main(int argc,char *argv[])

{

    int fd;

    fd=open("a.c",O_CREAT|O_RDWR,0666);

    if(fd<0)

    {

          printf("open is error\n");

    }

    printf("fd is %d\n",fd);

    close(fd);

    return 0;

}

编译运行:

在Ubuntu上编译open.c,如下图所示:

 

31.3 文件IO read()

本章内容对应视频讲解链接(在线观看):

文件I0之read函数  https://www.bilibili.com/video/BV1zV411e7Cy?p=6

函数

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

头文件

#include <unistd.h>

参数fd

要读的文件描述符

参数buf

缓冲区,存放读到的内容

参数count

每次读取的字节数

返回值

返回值大于0,表示读取到的字节数;

等于0在阻塞模式下表示到达文件末尾或没有数据可读(EOF),并调用阻塞;

等于-1表示出错,在非阻塞模式下表示没有数据可读。

实验代码

在程序中打开a.c文件,并读取打印文件内容。代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\04”目录下。 

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

int main(int argcchar *argv[])

{

    int fd;

    char buf[32] = {0};

    ssize_t ret;

    fd = open("a.c", O_CREAT | O_RDWR, 0666);

    if (fd < 0)

    {

        printf("open is error\n");

        return -1;

    }

    printf("fd is %d\n"fd);

    ret = read(fdbuf32);

    if (ret < 0)

    {

        printf("read is error\n");

        return -2;

    }

    printf("buf is %s\n"buf);

    printf("ret is %ld\n"ret);

    close(fd);

    return 0;

}

编译运行:

在Ubuntu上编译open.c,运行a.out,如下图所示:

 

编辑a.c文件,内容如下图所示:

运行a.out,如下图所示,成功读取到a.c文件中的hello world!

31.4 文件IO write()

本章内容对应视频讲解链接(在线观看):

文件I0之write函数  https://www.bilibili.com/video/BV1zV411e7Cy?p=7

函数

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

头文件

#include <unistd.h>

参数fd

文件描述符;

参数buf

缓存区,存放将要写入的数据

参数count

每次写入的个数

功能

每次从buf缓存区拿count个字节写入fd文件。

返回值

大于或等于0表示执行成功,返回写入的字节数;

返回-1代表出错。

实验代码

在程序中使用write函数向标准输出(屏幕)打印hello。代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\05”目录下。

#include <stdio.h>

#include <stdlib.h>       

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

int main(int argc,char *argv[])

{

    int fd;

    char buf[32]={0};

    ssize_t ret;

    fd=open("a.c",O_CREAT|O_RDWR,0666);

    if(fd<0)

    {

          printf("open is error\n");

          return -1;

    }

    write(1,"hello\n",6);

    close(fd);

    return 0;

}

编译程序并运行a.out ,如下图所示,向标准输出(屏幕)写入hello。 

实验代码

在程序中使用write函数向文件写入hello。代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\05”目录下。

#include <stdio.h>

#include <stdlib.h>       

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

int main(int argc,char *argv[])

{

    int fd;

    char buf[32]={0};

    ssize_t ret;

    fd=open("a.c",O_CREAT|O_RDWR,0666);

    if(fd<0)

    {

          printf("open is error\n");

          return -1;

    }

    write(fd,"hello\n",6);

    close(fd);

    return 0;

}

运行测试

编译运行打开a.out,并且查看写入的文件a.c,如下图所示,a.c文件成功写入hello。

 

31.5 综合练习(一)

本章内容对应视频讲解链接(在线观看):

综合练习()  https://www.bilibili.com/video/BV1zV411e7Cy?p=8

实验要求

在程序中通过命令行操作,把a.c文件里面的内容写到b.c

实验代码

代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\06”目录下。

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

int main(int argcchar *argv[])

{

    //步骤一:判断命令行的参数

    if(argc != 3)

    {

        printf("Usage:%s <src file> <obj file>\n"argv[0]);

    }

    // 步骤二:定义变量

    int fd_src;

    int fd_obj;

    char buf[32] = {0};

    ssize_t ret;

    // 步骤三:打开文件获得文件描述符

    fd_src = open(argv[1], O_RDWR);

    if (fd_src < 0)

    {

        printf("open is error\n");

        return -1;

    }

    fd_obj = open(argv[2], O_CREAT | O_RDWR, 0666);

    if (fd_obj < 0)

    {

        printf("open is error\n");

        return -2;

    }

    // 步骤四:读写操作

    while((ret=read(fd_src,buf,32))!=0)

    {

        write(fd_obj,buf,ret);

    }

    // 步骤五:关闭文件描述符

    close(fd_src);

    close(fd_obj);

    return 0;

}

编译测试

在Ubuntu上编译open.c,首先查看a.c的内容,然后运行程序,再查看b.c的内容,如下图所示,成功将a.c文件的内容拷贝到b.c文件。

 

31.6 文件IO lseek()

本章内容对应视频讲解链接(在线观看):

文件IO之Iseek函数  https://www.bilibili.com/video/BV1zV411e7Cy?p=9

所有打开的文件都有一个当前文件偏移量(current file offset),以下简称为 cfo。cfo 通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数。读写操作通常开始于 cfo,并且使 cfo 增大,增量为读写的字节数。文件被打开时,cfo 会被初始化为 0,除非使用了O_APPEND 。 使用 lseek 函数可以改变文件的 cfo 。

函数定义

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

头文件

#include <sys/types.h>

#include <unistd.h>

参数fd

文件描述符

参数off_t offset

偏移量,单位是字节的数量,可以正负,如果是负值表示向前移动;如果是正值,表示向后移动。

参数whence

当前位置的基点,可以使用以下三组值。

SEEK_SET:相对于文件开头

SEEK_CUR:相对于当前的文件读写指针位置

SEEK_END:相对于文件末尾

功能

移动文件读写指针;获取文件长度;拓展文件空间。

返回值

成功返回当前位移,失败返回-1

举个例子

  1. 把文件位置指针设置为100  lseek(fd,100,SEEK_SET);
  2. 把文件位置设置成文件末尾  lseek(fd,0,SEEK_END);
  3. 确定当前的文件位置  lseek(fd,0,SEEK_CUR);

实验代码

在程序中使用lseek函数移动文件读写位置,代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\07”目录下。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc, char *argv[])
{int fd;char buf[32] = {0};ssize_t ret;fd = open("a.c", O_CREAT | O_RDWR, 0666);if (fd < 0){printf("open is error\n");return -1;}// printf("fd is %d\n", fd);ret = read(fd, buf, 32);if (ret < 0){printf("read is error\n");return -2;}printf("buf is %s\n", buf);printf("ret is %ld\n", ret);lseek(fd,0,SEEK_SET);ret = read(fd, buf, 32);printf("ret is %ld\n", ret);close(fd);return 0;
}

运行测试

编译运行打开a.out ,a.c里面有hello world!,当使用lseek函数移动读写位置时,再次读a.c文件的内容,依旧可以读到a.c的内容,如下图所示:

实验代码

在程序中读a.c文件的2字节,使用lseek函数确定文件的当前位置。代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\07”目录下。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc, char *argv[])
{int fd;char buf[32] = {0};ssize_t ret;fd = open("a.c", O_CREAT | O_RDWR, 0666);if (fd < 0){printf("open is error\n");return -1;}// printf("fd is %d\n", fd);ret = read(fd, buf, 2);if (ret < 0){printf("read is error\n");return -2;}printf("buf is %s\n", buf);printf("ret is %ld\n", ret);ret=lseek(fd,0,SEEK_CUR);// ret = read(fd, buf, 32);printf("ret is %ld\n", ret);close(fd);return 0;
}

运行测试

编译运行打开a.out ,a.c里面有hello world!运行结果如下图所示:

实验代码

在程序中读a.c文件,使用lseek函数确定文件的长度。代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\07”目录下。

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

int main(int argcchar *argv[])

{

    int fd;

    char buf[32] = {0};

    ssize_t ret;

    fd = open("a.c", O_CREAT | O_RDWR, 0666);

    if (fd < 0)

    {

        printf("open is error\n");

        return -1;

    }

   // printf("fd is %d\n", fd);

    ret = read(fdbuf2);

    if (ret < 0)

    {

        printf("read is error\n");

        return -2;

    }

    printf("buf is %s\n"buf);

    printf("ret is %ld\n"ret);

    ret=lseek(fd,0,SEEK_END);

   // ret = read(fd, buf, 32);

    printf("ret is %ld\n"ret);

    close(fd);

    return 0;

}

运行测试

编译运行打开a.out ,a.c里面有hello world!运行结果如下图所示:

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

进程的优先级与命令行参数

一、进程的优先级 1、理解 制定一个进程获取某种资源的先后顺序。 在Linux中数字越小优先级越高。 2、优先级的意义 进程访问资源始终是有限的&#xff0c;系统中的进程都是很多的。 操作系统关于调度和优先级规则 分时操作系统&#xff0c;基本公平。如果进程长时间不被…

Study--Oracle-07-ASM自动存储管理(二)

一、ASM安装准备条件 1、ASM支持存储类型 本地祼设备(本地的磁盘和分区) 网络附加存储(NAS) 存储区域网络(SAN) 2、ASM使用本地裸设备,要点: 已经被挂载到操作系统上或者已经做了分区 映射裸设备为文件名 设置正确的权限(针对grid用户和asmadmin组,权限为660) 二、OR…

玄机-第一章 应急响应-webshell查杀

文章目录 前言简介应急开始准备工作步骤 1步骤 2步骤 3步骤 4 总结 前言 作者是个垃圾&#xff0c;第一次玩玄机太紧张了&#xff0c;不知道flag是啥样找了半天&#xff0c;第二次开靶机多次尝试才知道格式。争取下次一次过。 简介 靶机账号密码 root xjwebshell 1.黑客webshel…

网络割接方案通用模板

第一章 项目概述 1.1 编写目的 为规范“十三五”以来&#xff0c;随着移动互联新技术的发展以及我国政府职能的不断转变&#xff0c; 我国的政法网络进入新的发展阶段&#xff0c;跨地域、跨部门、跨系统的信息共享、业务 协同以及智慧政务等成为了各地电子政务的重点建设内容。…

【数学建模】——多领域资源优化中的创新应用-六大经典问题解答

目录 题目1&#xff1a;截取条材 题目 1.1问题描述 1.2 数学模型 1.3 求解 1.4 解答 题目2&#xff1a;商店进货销售计划 题目 2.1 问题描述 2.2 数学模型 2.3 求解 2.4 解答 题目3&#xff1a;货船装载问题 题目 3.1问题重述 3.2 数学模型 3.3 求解 3.4 解…

MATLAB-Simulink模型加密

1、封装子系统 假如已经是子系统&#xff0c;需要确认子系统是否为虚拟子系统如果是虚拟子系统需要将虚拟子系统设置为非虚拟子系统也就是原子子系统。 右击子系统模块&#xff0c;选择Block Parameter->勾选Treat as atomic unit 设置仿真步长 2、将设置好的子系统转换为…

【Outlook】从Outlook新版回归经典版全攻略

引言 在微软宣布计划于2024年底淘汰邮件应用&#xff08;Mail app&#xff09;之后&#xff0c;许多用户发现新版Outlook应用&#xff08;Outlook (new)&#xff09;在他们的Windows 11/10系统上自动启动。如果您更倾向于使用经典版Outlook&#xff08;Outlook (classic)&…

实验丰富、原创改进!|多策略改进蜣螂优化算法(MATLAB)

本文内容来源于本人公众号&#xff1a;KAU的云实验台&#xff0c;更新内容&#xff1a;智能优化算法及其改进应用。 本文核心内容&#xff1a; 新颖的多策略改进蜣螂优化算法 对比算法包括&#xff1a;高引用/新发布/经典/其他DBO变体&#xff08;共11种&#xff09; 实验设计…

Go语言中GC(垃圾回收回收机制)三色标记与混合写屏障

5、Golang三色标记混合写屏障GC模式全分析 (yuque.com) 第1讲-课程目标_哔哩哔哩_bilibili Golang三色标记GC混合写屏障 Go V1.3之前的标记清除&#xff08;mark and sweep) 垃圾回收、内存管理、自动适放、三色标记法、STW (stop the world) 图的遍历&#xff1f;可达性分…

ArgMed-Agents:通过多个智能体论证方案增强大模型,进行可解释的临床决策推理

ArgMed-Agents&#xff1a;通过多个智能体论证方案增强大模型&#xff0c;进行可解释的临床决策推理 提出背景ArgMed-Agents 框架目的解法拆解逻辑链 临床讨论的论证方案&#xff08;ASCD&#xff09;论证方案用于决策&#xff08;ASDM&#xff09;论证方案用于副作用&#xff…

python课设——宾馆管理系统

python课设——宾馆管理系统 数据库课设-宾馆管理系统-python3.7pyqt5 简介 大二数据库课程设计&#xff08;3-4天工作量&#xff09;的项目&#xff0c;登录界面的ui设计参考了他人成果&#xff0c;其余ui以及所有后端部分全部独立完成&#xff0c;详细功能见功能模块图使用…

【ffmpeg命令】制作一个属于你自己的动图表情包

文章目录 前言如何制作一个动态表情包制作动图表情包转换分辨率减少帧率截取主要内容转换为gif动图去除水印 最终结果总结 前言 在数字时代&#xff0c;动图表情包已经成为我们日常交流的重要组成部分。它们富有表现力&#xff0c;能够传达出我们无法用语言表述的情感和信息。…

LangChain-v0.2 Build an Agent 构建代理

语言模型本身不能采取行动&#xff0c;它们只是输出文本。LangChain的一个重要用例是创建代理。代理是使用LLM作为推理引擎来确定要采取哪些行动&#xff0c;以及传递哪些输入的系统。执行操作后&#xff0c;可以将结果反馈到LLM中&#xff0c;以确定是否需要更多操作&#xff…

博客前端项目学习day01

这里写自定义目录标题 登录创建项目配置环境变量&#xff0c;方便使用登录页面验证码登陆表单 在VScode上写前端&#xff0c;采用vue3。 登录 创建项目 检查node版本 node -v 创建一个新的项目 npm init vitelatest blog-front-admin 中间会弹出询问是否要安装包&#xff0c…

docker容器重启错误解决方案

目录 起因解决方案重启 起因 是这样的&#xff0c;今天客户服务器的服务器突然断电了&#xff0c;原本是配置了自启动的项目&#xff0c;在重启之后发现还是无法登录&#xff0c;然后又看了一眼工控机&#xff0c;欸&#xff0c;这边居然可以&#xff0c;那么问题就直接排除了…

大样本 OLS 模型及 Stata 具体操作步骤

目录 一、引言 二、理论原理 三、小样本 OLS 和大样本 OLS 的区别 四、数据准备 五、程序代码及解释 六、代码运行结果 一、引言 在统计学和计量经济学中&#xff0c;普通最小二乘法&#xff08;Ordinary Least Squares&#xff0c;OLS&#xff09;是一种广泛应用的线性回…

QT-RTSP相机监控视频流

QT-RTSP相机监控视频流 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "mainwindow.h"#include <QDebug>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), m_settings("outSmart", "LiveWatcher&…

为什么品牌需要做 IP 形象?

品牌做IP形象的原因有多方面&#xff0c;这些原因共同构成了IP形象在品牌建设中的重要性和价值&#xff0c;主要原因有以下几个方面&#xff1a; 增强品牌识别度与记忆点&#xff1a; IP形象作为品牌的视觉符号&#xff0c;具有独特性和辨识性&#xff0c;能够在消费者心中留…

CSA笔记2-文件管理命令

tree 以树状图显示多级目录 示例&#xff1a; [rootlocalhost ~]# tree haha/ haha/ └── 111 └── 222 2 directories, 0 files [rootlocalhost ~]# tree -L 1 haha/haha/ └── 111 echo > >> < << 示例&#xff1a; [rootxxx ~]#…

【ACM 独立出版,高录用EI稳检索】2024年大数据与数字化管理国际学术会议 (ICBDDM 2024,8月16-18)

2024年大数据与数字化管理国际学术会议 (ICBDDM 2024)&#xff0c;将于2024年8月16-18日在中国上海召开。 “大数据与数字化管理”作为会议主题&#xff0c;旨在聚焦这一跨学科领域中最新的理论研究、技术进展、实践案例和未来趋势。本主题探讨的研究方向涵盖了大数据的收集、…