【Linux】基础IO篇

2023-11-09

C文件接口

  1. fopen函数

FILE* fopen(const char* path,const char* mode)
参数含义:
path:

带路径的文件名称(也可以不带路径,此时默认在当前路径下查找)

mode:

r :只读模式打开,文件流指针指向文件的起始位置
r+:可读可写方式打开,文件流指针指向文件的起始位置
w:只写模式打开,被打开文件若存在,则截断文件(清空文件内容),若不存在,创建该文件
w+:可读可写模式打开,,被打开文件若存在,则截断文件(清空文件内容),若不存在,创建该文件
a:追加写。若文件存在,文件流指针指向文件的末尾进行写。若不存在,创建文件
a+:可以读也可以 追加写。文件存在,读的位置被初始化到文件头,追加写的时候依旧是在文件末尾追加 ,文件不存在,创建该文件

返回值

成功:返回文件流指针FILE*
失败:返回NULL

对fopen的测试

  • 场景一:通过r方式打开一个文件,观察其返回值的情况
    在这里插入图片描述
    插播:perror函数
    在这里插入图片描述
    详解:
    errno是系统当中的一个错误码,当我们在调用一个函数发生错误的时候,系统会给errno赋值为对应的错误码,该错误码是一个整型数据
    每一个错误码都对应着一个错误信息 error msg
    perror函数的作用就是将errno中的值进行解析,解析完毕后,打印输出。

  • 场景二:将上述的打开方式更改为w,查看能否打开成功
    在这里插入图片描述
    观察发现,当前可执行程序的路径下会多出来一个1.txt文件
    在这里插入图片描述

  1. fwrite函数

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

ptr:要往文件中写的内容
size:定义往文件中写的时候,一个快是多大,单位是字节(通常情况下都是1)
nmemb:期望写多少块
stream:文件流指针,指向被写入的文件

返回值

返回成功读入文件的块的个数

  1. fread函数

size_t fread(void* ptr,size_t size,size_t nmemb,FILE* stream)
参数:

ptr:从文件中读出来的数据存放在ptr中(该内存由程序员自己提供,必须合法)
size:定义从文件中读的时候,一个块是多大,单位是字节(通常定义1个字节)
nmemb:期望读多少块
stream:文件流指针(指向被读取的文件)

返回值

返回成功读入的文件块的个数

对函数fwrite&fread的测试

  1. 情景一:提前向文件1.txt中写入hello world ,然后使用w的方式打开文件并写入 I like Linux!
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 情景二:提前向文件1.txt中写入hello world ,然后使用a的方式向文件中写入 I like Linux!
    在这里插入图片描述
    运行后查看1.txt的内容
    在这里插入图片描述

  3. 情景三:使用a+的方式打开文件,将文件中的内容读取出来
    在这里插入图片描述
    结果:
    在这里插入图片描述
    画图解释一下原因:
    在这里插入图片描述
    那么这种情况应该如何解决??
    很简单,就是在读之前将我们的文件流指针指向文件的首部。这样就可以避免上述情况的发生
    如何移动呢?那就是接下来的主角fseek函数的功能

  4. fseek函数

int fseek(FILE* stream,long offset,int whence)
参数

stream:文件流指针
offset:偏移量
whence:将文件流指针偏移到什么位置

SEEK_SET:文件头部
SEEK_CUR:当前文件流指针的位置
SEEK_END:文件末尾

返回值

成功 -----> 0
失败 -----> -1

我们在上述的基础上,加入fseek函数再查看结果
在这里插入图片描述
结果可以正常输出
在这里插入图片描述
注意:为什么读在每次读一块的时候,期望读到的块数是数组长度-1呢?
解释:
从文件中期望读多少字节,会有三种情况:
情况一:文件字节数量和期望字节数量一致
情况二:文件字节数量 大于 期望读的字节数量
情况三:文件字节数量 小于 期望读的字节数量

我们仔细分析前两种情况,如果我们提供的是数组的长度,而没有对其-1,那么在这两种情况下,数组会被存满并且数组的最后一个位置的\0也不存在了,而是被文件中的某个字符占据了,这样,我们在使用从文件中读取出来的内容的时候,也就会出错。

所以,对数组长度-1的目的就是在字符数组当中预留\0的位置,防止在后续访问的时候越界访问,导致程序崩溃。
6. fclose函数

int fclose(FILE* stream)
参数

要关闭的文件流指针

返回值

成功: 0
失败:EOF

系统调用文件接口

  1. open

int open(const char* pathname,int flags)

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

pathname:要打开或创建的目标文件
flags:打开文件时,可以传入多个参数选项,用下面的一个或者多个进行或运算,构成flags

必须指定一个且只能指定一个的常量

O_RDONLY:只读打开
O_WRONLY:只写打开
O_RDWR:读写打开

其他常量

O_CREAT:若文件不存在,则创建文件,需要使用mode选项来指明新文件的访问权限
O_APPEND:追加写

mode:当创建一个新文件的时候,指定新创建文件的权限,传递一个8进制的数字(e.g:0664)

返回值

成功:新打开的文件描述符,文件描述符又可以称为文件操作句柄,文件句柄
失败:-1

  1. write

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

fd:文件描述符
buf:将buf指向的内容写到文件中去
count:期望写多少个字节

返回值

返回写入的字节数量

  1. read

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

fd:文件描述符
buf:将文件中读到的内容写到buf所指向的空间中去
count:期望读多少字节

返回值

返回读到的字节数量

  1. lseek

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

在这里插入图片描述
5. close

int close(int fd)
关闭文件描述符

综合测试:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>

int main()
{
    int fd = open("1.txt",O_RDWR|O_CREAT,0664);
    if(fd < 0)
    {
        perror("open");
        return 0;
    }

    const char* str = "I like Linux!";
    write(fd,str,strlen(str));

    lseek(fd,0,SEEK_SET);

    char buf[1024] = {0};
    read(fd,buf,sizeof(buf)-1);

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

}

在这里插入图片描述
在这里插入图片描述

文件描述符

是什么

是一个小正数,没有负数。
可以在/proc/进程号/fd文件夹下查看,对应的就是它的文件描述符

验证:

  1. 打印观察文件描述符的值
  2. 查看/proc/[pid]/fd下的文件描述符信息
    在这里插入图片描述
    在这里插入图片描述

分配规则

最小未使用
通过代码验证一下:
验证思路:我们知道标准输出对应1号文件描述符,我们先将标准输出关闭,然后再通过open函数打开一个文件。查看该文件的文件描述符
在这里插入图片描述

在这里插入图片描述

内核角度理解

从task_struct的角度理解文件描述符在内核当中是什么

  1. struct task_struct :PCB进程控制块
    在这里插入图片描述
  2. 在 struct task_struct结构体中有一个成员变量是一个结构体指针files,该指针指向的是一个文件描述信息的结构体
    在这里插入图片描述
  3. 我们本次研究的主要对象就是files指向的那个结构体,所以,我们先找到该结构体的定义处
    在这里插入图片描述
  4. 好的,到这一步是时候综合理解一下了。我们先通过画图的方式进行描述
    在这里插入图片描述
    总结:文件描述符在内核当中本质上就是task_struct结构体中的一个结构体指针files所指向的结构体struct files_struct中的结构体指针数组fd_array的数组下标

扩展

一个进程最多可以打开多少个文件描述符?

解答:

  1. 系统当中针对一个进程打开的文件描述符的数量是有限的
  2. 通过ulimit -a可以查看“open files”的大小,而“open files”的大小就是限制一个进程可以打开的文件描述符的数量
  3. 我的机器中看到的“open files”的大小是1024,也就是意味着我的机器创建出来的进程最大可以打开的文件数量是1024
  4. open fiels”的大小并不是没有办法改变。可以通过 ulinit -n [数字] 进行改变
    e.g:ulimit -n 10000 就是将一个进程打开文件描述符的数量改为了10000

理解文件描述符和文件流指针的区别

  1. 从源码的角度理解,文件流指针(struct _IO_FILE)是什么
  • 找到对应的源代码 /usr/include/stdio.h
    在这里插入图片描述
  • 我们发现FILE原来只是一个被重命名后的名称,真正的结构体是struct _IO_FILE,我们转到定义处发现它属于该路径下的libio.h
    在这里插入图片描述
    struct _IO_FILE的应用
    在这里插入图片描述
    图示解析:
    在这里插入图片描述
  1. 将文件流指针和文件描述符联系起来
    2.1读写缓冲区问题
    struct _IO_FILE{…}这个结构体是C标准库当中的结构体,而该结构体当中维护的读写缓冲区就是进程终止部分提到的exit函数处理的那个缓冲区。
    2.2 文件描述
    文件流指针对应的结构体struct _IO_FILE 这个结构体内部的成员变量 int _fileno保存了对应的文件描述符的数值
    代码验证:
    前提:使用fopen打开一个文件1.txt,输出FILE结构体内的成员变量 fileno ,与/proc/[pid]/fd下的文件描述符对比
#include<stdio.h>
#include<unistd.h>



int main()
{
    FILE* fp = fopen("1.txt","w+");
    if(NULL == fp)
    {
        perror("fopen");
        return 0;
    }
    printf("_fileno is %d\n",fp->_fileno);

    while(1)
    {
        sleep(1);
    }
    return 0;
}

在这里插入图片描述

在这里插入图片描述

图示解析:
在这里插入图片描述

重定向

符号

  1. >
    清空重定向
  2. >>
    追加重定向

接口

int dup2(int oldfd , int newfd);
作用:将newfd的值重定向为oldfd,也即newfd拷贝oldfd
参数:两个参数均是文件描述符
返回值

成功(做两件事情)

1、关闭newfd
2、让newfd指向oldfd对应的 struct file*

失败(两种情况)

1、如果oldfd是一个非法或无效的文件描述符,则重定向失败,newfd没有变化
2、如果oldfd和newfd的值相等,则什么也不干

内核角度理解重定向

图示理解
在这里插入图片描述

重定向的代码验证

重定向标准输出到某一个文件当中

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main()
{
    int fd = open("1.txt",O_RDWR|O_CREAT,0664);
    if(fd < 0)
    {
        perror("open:");
        return 0;
    }

    dup2(fd,1);

    printf("kkkkkkk!\n");
    return 0;
}

在这里插入图片描述

在这里插入图片描述

动态库 && 静态库

库的概念
静态库&&动态库都是程序代码(二进制文件)的集合。一般为了方便将程序提供给第三方使用,就是将程序编写成为库文件提供给第三方(用户)使用。
在这里插入图片描述

动态库

  1. 特征
    Windows系统下:没有前缀,后缀为dll
    Linux系统下:前缀为lib,后缀为.so
  2. 生成动态库
    生成动态库的代码当中不需要包含main函数(程序入口函数)
    使用gcc/g++ 编译器(注:需要在普通的编译命令下增加两个命令行参数)

参数1:-fPIC 产生位置无关码
参数2:-shared 生成共享库格式

  1. 场景模拟

生成动态库 && 使用动态库

  1. 编写生成动态库所需要的文件(这里重点在于测试动态库,编写的文件比较简单,具有说明性即可)
    在这里插入图片描述
    在这里插入图片描述

  2. 编写Makefile文件,用来生成动态库
    在这里插入图片描述
    在这里插入图片描述

  3. 创建用户文件夹,在用户的程序中使用动态库文件
    在这里插入图片描述
    在这里插入图片描述

  4. 编写main.c对应的Makefile文件
    在这里插入图片描述

  5. make后,运行生成的可执行程序,查看运行结果
    出错了!!!在这里插入图片描述
    分析出错原因:
    在这里插入图片描述
    本质上的原因就是程序在运行的时候无法找到动态库

  6. 下面我们就介绍一下如何找到动态库

  7. 让程序找到动态库的三种方式
    4.1将动态库放到可执行程序的路径下(可以解决问题,但是不推荐)
    在这里插入图片描述
    4.2配置 LD_LIBRARY_PATH环境变量
    LD_LIBRARY_PATH:一个库文件的环境变量,在~/.bash_profile或者 ~/.bashrc文件中
    在这里插入图片描述
    在这里插入图片描述
    下面再次运行test_so
    在这里插入图片描述
    4.3放到系统库的路径下:/lib64
    极力不推荐,不要将系统的库文件与用户使用的糅合在一块
    不必尝试,极力不推荐!!

静态库

  1. 特征
    Windows系统:没有前缀,后缀为.lib
    Linux系统:前缀为lib,后缀为.a
  2. 生成静态库文件(两个阶段)
    2.1 第一阶段
    使用gcc/g++将源码编译成为目标程序(.o文件)
    在这里插入图片描述
    2.2 第二阶段
    使用 ar -rc 命令编译目标程序为静态库
    ar -rc [静态库文件名称] [目标程序]
    在这里插入图片描述
    在这里插入图片描述
    2.3 注意事项
    在这里插入图片描述
    3 . 场景模拟
    创建user文件夹使用该静态库,观察结果
    在这里插入图片描述
    在这里插入图片描述
    程序正常运行!!

简单的文件系统

  1. ls -l 命令可以列出当前路径下的所有文件&&文件夹的详细信息
    在这里插入图片描述
    既然文件有这么多的信息,我们知道所有的信息都要存储。
    文件的内容势必会被存放在磁盘当中
    描述文件属性信息的内容也是需要保存在磁盘当中
  2. Linux ext2文件系统
    2.1图示
    在这里插入图片描述
    详述每一个模块:
  • 超级块(Super Block)
    存放文件系统本身的结构信息。记录的主要信息有:block 和 inode的总量,未使用的block 和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间、最后一次检查磁盘的时间等其他文件系统的信息。
    super Block的信息被破坏,可以说整个文件系统结构就被破坏了
  • GDT,块组描述符
    描述块组属性信息
  • 块位图(Block Bitmap)
    记录Data block中哪个数据块已经被占用,哪个数据块没有被占用
  • 存储文件内容(Data blocks)
    画图理解块位图与Data blocks之间的关系
    在这里插入图片描述
  • inode位图(inode Bitmap)
    每个bit表示一个inode是否空闲可用
  • i节点表(inode table)
    存放文件属性,如文件大小、所有者、最近修改时间等
    2.2 创建一个新文件主要的4个操作
    我们以下图为例进行分析
    在这里插入图片描述
    步骤1:存储属性
    inode节点号查看:ll -i 命令列表中第一个就是inode节点号
    先找到一个空闲的 i 节点(265458)。内核将文件信息记录到其中
    步骤2:存储数据
    该文件需要存储到3个磁盘块,内核找到了3个空闲块(300,500,800),将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推
    步骤3:记录分配情况
    文件内容按顺序300 500 800 存放,内核在inode上的磁盘分布区记录了上述块列表。
    步骤4:添加文件名到目录
    新的文件名ABC,内核将入口(265458,ABC)添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来。

软链接 & 硬链接

软链接

  1. 是什么
    目标文件的快捷方式

  2. 如何生成软链接文件
    使用命令 ln -s 源文件 软链接文件

  3. 使用的注意事项
    3.1修改软链接文件,源文件也会被修改,修改源文件,软链接文件也会被改变
    3.2源文件如果被删除,软链接文件还在的,修改软链接文件。会重新建立源文件,重新建立链接关系(这种情况慎重考虑,如果之前的源文件在程序中作用很大,删除后,通过这种方式新生成的源文件与原来的已经不一样了。可能会导致程序崩溃)
    建议:在删除源文件的时候,将软链接文件也一并删除掉,以防后患

  4. 结合文件系统理解
    4.1软链接文件和源文件是拥有不一样的节点号的
    在这里插入图片描述

硬链接

  1. 是什么
    目标文件的替身
  2. 生成方式
    使用命令 ln 源文件 硬链接文件
  3. 结合文件系统理解
    3.1源文件与硬链接文件的inode节点号相同
    在这里插入图片描述
    3.2多个文件引用同一个inode节点的时候,inode节点内部的引用计数会++
    当文件删除的时候,引用计数会–,直到引用计数减为0的时候,才会释放inode节点
    模拟:将源文件test.c删掉,查看硬链接文件的情况
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

以上就是基础IO篇的相关总结,感觉对自己有帮助的老板们还请一键三连~~感谢感谢

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】基础IO篇 的相关文章

  • 在 Linux 上访问 main 之外的主要参数

    是否可以访问参数main在外面main 即在共享库构造函数中 在 Linux 上除了通过解析之外 proc self cmdline 您可以通过将构造函数放入 init array部分 功能在 init array 不像 init 使用相同
  • 如何使用 echo 写入非 ASCII 字符?

    如何写非ASCII http en wikipedia org wiki ASCII使用 echo 的字符 是否有转义序列 例如 012或类似的东西 我想使用以下方法将 ASCII 字符附加到文件中 echo gt gt file 如果您关
  • 如何访问 mmaped /dev/mem 而不导致 Linux 内核崩溃?

    我有一个简单的程序 尝试访问用户空间中的物理内存 其中内核存储第一个结构页 在 64 位机器上 该地址是 内核虚拟地址 ffffea0000000000 物理地址 0000620000000000 我正在尝试通过用户空间中的 mmap 访问
  • 找出 Linux 上的默认语言

    有没有办法从C语言中找出Linux系统的默认语言 有 POSIX API 可以实现这个功能吗 例如 我想要一个人类可读格式的字符串 即德语系统上的 German 或 Deutsch 法语系统上的 French 或 Francais 等 有类
  • 查看 Linux 上的多核或多 CPU 利用率

    我有一个在 Linux 上运行的程序 我需要确定它如何利用所有 CPU 内核 有没有什么程序可以查看这些信息 跑过 top 命令并按下 1 查看各个核心
  • 在 debian wheezy amd64 上安装 ia32-libs

    我正在使用 Debian 7 喘息 amd64 uname a Linux tzwm debian 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 我想安装ia32 libs在我的
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • Python将文件从Linux复制到WIndows

    我正在构建一个网站 该网站有一个表单 可以捕获用户数据并在用户数据上运行一些cgi cgi 的第一步是需要将文件从 Linux Web 服务器复制到 Windows 计算机 服务器将使用 Active Directory 角色帐户作为复制凭
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • Bash - 比较 2 个文件列表及其 md5 校验和

    我有 2 个列表 其中包含带有 md5sum 检查的文件 即使文件相同 列表也具有不同的路径 我想检查每个文件的 md5 和 我们正在讨论数千个文件 这就是为什么我需要脚本来仅显示差异 第一个列表是普通列表 第二个列表是文件的当前状态 我想
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 在用户程序中使用 或在驱动程序模块代码中使用 ...这有关系吗?

    我正在开发一个设备驱动程序模块和关联的用户库来处理ioctl 来电 该库获取相关信息并将其放入一个结构中 该结构被传递到驱动程序模块中并在那里解压 然后进行处理 我省略了很多步骤 但这就是总体思路 一些数据通过结构体传递ioctl is u
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa

随机推荐

  • java中的TreeMap

    TreeMap集合 package dailyTest import javax persistence criteria CriteriaBuilder import java util StringJoiner import java
  • 弱网测试(Charles模拟)

    一 介绍 移动应用的网络环境多样 而且会出现在不同网络之间切换的场景 即使是在同一网络环境下 也会出现网络连接状态时好时坏的情况 比如时高时低的延迟 经常丢包 频繁断线 在乘坐地铁 穿越隧道 和地下车库的场景下经常会发生 所以 移动应用的测
  • 理解一个最简单的C语言代码,“hello world!“的真相

    怎么编写出一个最简单 能运行的程序 int main 使用你习惯的编辑器 创建test cpp 把这些代码敲进去 这就是一个程序了 他可以编译成一个test exe 是一个可以执行的程序 只不过这个程序什么事情都没做 可以暂时不用理解为什么
  • ue4 材质始终面向摄像机

    材质面向设想
  • flutter 基本类写法

    import package flutter cupertino dart class text extends StatefulWidget 有状态的 override State
  • ubuntu添加qmake 出现错误 qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or

    出错原因 没有安装qt4库 usr lib x86 64 linux gnu qt4 所以出现错误 可以安装手动安装qt库 sudo apt get install qt sdk 如果自己编译 库 那就需要手动修改路径 cd usr lib
  • VUE+Element-ui实战之el-calendar日历自定义显示内容

    目录 1 确保添加el calendar组件 2 遍历日期 确定显示内容 3 最终实现效果 4 完整代码 1 确保添加el calendar组件 确保你的element引入了el calendar组件 这里不再赘述 2 遍历日期 确定显示内
  • DLP和DMD的区别

    DLP是解决问题的方案 DMD是上述方案内采用的芯片 DMD只是DLP的一部分 DLP技术是TI的专利 全球只有TI提供 而采用DLP方案就必须用到DMD芯片 这也是TI垄断的
  • git如何撤销所有本地修改

    git checkout 本地所有修改的 没有的提交的 都返回到原来的状态 git stash 把所有没有提交的修改暂存到stash里面 可用git stash pop恢复 git reset hard HASH 返回到某个节点 不保留修改
  • 文本意图识别方案整理

    意图识别本质上是文本分类问题 从目前的对话数据来看 用户说的话一般是短文本 长度大多在几十个字内 其中关键词和短语对分类显著的作用 目前主流的本文分类模型可以分为CNN RNN和Bert self attention 三类 三者可以结合起来
  • Python二级考试常见题型及解析(附刷题软件)

    导语 Python二级考试是计算机等级考试中非常重要的一项考试 需要熟练掌握Python的基础知识和常见的编程技巧 本文将为大家介绍Python二级考试常见的题型及解析 并提供多个实例代码进行演示 帮助大家更好地理解和掌握考试内容 一 选择
  • 三因子两水平doe_DOE试验设计案例

    DOE试验设计 一种安排实验和分析实验数据的数理统计方法 试验设计主要对试验进行合理安排 以较小的试验规模 试验次数 较短的试验周期和较低的试验成本 获得理想的试验结果以及得出科学的结论 从本质上讲 DOE 是这样一门科学 研究如何以最有效
  • 软件工程-12章

    一 判断题 程序设计语言是值编程是表现出来的特点 习惯 逻辑思维等 F 进行程序设计语言的选择是 首先考虑的是应用领域 T 好程序的一个重要标准是源程序代码的逻辑简明清晰 易读易懂 T 软件测试的目的是尽可能多地发现软件中存在的错误 将它作
  • 关于辽大信息学院选导师的一点儿心得

    首先 看到这个博文的时候 你可能已经上岸了 欢迎进入一所211综合院校 信息学院成立源远流长 涉及科类比较多 从电工电子到软件 以及生物学 学院的哲理楼也是孕育了一大批辽大优秀的学子 其他的不扯了 谈选导师的事情 首先 学院任何一位老师都有
  • 解压报错 你需要从上一压缩卷启动解压命令以便解压 解决方案及WinRAR怎么分卷压缩详解

    一 解决方案 1 问题描述 解压的时候报错 提示 你需要从上一压缩卷启动解压命令以便解压 2 解决 会出现这个问题 是因为你正在解压的文件为分卷压缩生成的压缩包 首先你要确保自己有完整的压缩包 可能对方将压缩包分为5个 那么你就需要拿到5份
  • Tensorflow2.0训练损失值降低,但测试正确率基本不变的情况

    Tensorflow2 0训练损失值降低 但测试正确率基本不变的情况 问题描述 解决方法 修改参数 检查模型 loss计算方法 数据标签 权重初始值 问题描述 对于一个架构 在识别mnist手写数字集精度较高的情况下 更换其他数据集 却无法
  • 大数据集群可视化管理界面

    hadoop hadoop http master 50070 dfshealth html tab overview hdfs http master 50070 explorer html yarn http master 8088 c
  • a deep leaning

    1 设计了新的搜索空间 即NASNet search space 并在实验中搜索得到最优的网络结构NASNet 2 提出新的正则化技术 ScheduledDropPath 是DropPath方法的改进版 可以大大提高了模型的泛化能力 Dro
  • 大学计算机基础 - 第十一章习题

    1 选择题 1 多媒体计算机中的媒体信息是指 D 文字 音频 音频 图形 动画 视频 视频 音频 A B c D 全部 2 多媒体技术的主要特性有 C 多样性 集成性 交互性 实时性 A 仅 B c D 全部 多媒体技术具有以下基本特征 1
  • 【Linux】基础IO篇

    文章目录 C文件接口 系统调用文件接口 文件描述符 是什么 分配规则 内核角度理解 从task struct的角度理解文件描述符在内核当中是什么 理解文件描述符和文件流指针的区别 重定向 符号 接口 内核角度理解重定向 重定向的代码验证 动