【Linux操作系统】举例解释Linux系统编程中文件io常用的函数
在Linux系统编程中,文件IO操作是非常常见和重要的操作之一。通过文件IO操作,我们可以打开、读取、写入和关闭文件,对文件进行定位、复制、删除和重命名等操作。本篇博客将介绍一些常用的文件IO操作函数。
文章目录
- 1. open()
- 1.1 原型、参数及返回值说明
- 1.1.1 原型:
- 1.1.2 参数说明:
- 1.1.3 返回值:
- 1.2 函数示例
- 1.3 代码解释
- 2. close()
- 2.1 原型、参数及返回值说明
- 2.1.1 原型:
- 2.1.2 参数:
- 2.1.3 返回值:
- 2.2 函数示例
- 2.3 代码解释
- 3. read()
- 3.1 原型、参数及返回值说明
- 3.1.1 原型:
- 3.1.2 参数:
- 3.1.3 返回值:
- 3.2 函数示例
- 3.3 代码解释
- 4. write()
- 4.1 原型、参数及返回值说明
- 4.1.1 原型:
- 4.1.2 参数:
- 4.1.3 返回值:
- 4.2 函数示例
- 4.3 代码解释
- 5. lseek()
- 5.1 原型、参数及返回值说明
- 5.1.1 原型:
- 5.1.2 参数:
- 5.1.3 返回值:
- 5.2 函数示例
- 5.3 代码解释
- 6. stat()
- 6.1 原型、参数及返回值说明
- 6.1.1 原型:
- 6.1.2 参数:
- 6.1.3 返回值:
- 6.2 函数示例
- 6.3 代码解释
- 7. fcntl()
- 7.1 原型、参数及返回值说明
- 7.1.1 原型:
- 7.1.2 参数:
- 7.1.3 返回值:
- 7.2 函数示例
- 7.3 代码解释
- 总结
1. open()
1.1 原型、参数及返回值说明
1.1.1 原型:
open()函数是Linux系统编程中常用的文件IO操作函数之一。它用于打开文件并返回一个文件描述符,以便后续的文件读写操作。
open()函数的原型如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int open(const char *pathname, int flags, mode_t mode);
1.1.2 参数说明:
pathname
:要打开的文件路径名。flags
:打开文件的模式标志,可以是以下几种模式的组合:O_RDONLY
:只读模式打开文件。O_WRONLY
:只写模式打开文件。O_RDWR
:读写模式打开文件。O_CREAT
:如果文件不存在,则创建文件。O_EXCL
:与O_CREAT一同使用,如果文件已存在,则返回错误。O_TRUNC
:如果文件存在且以可写模式打开,则将文件截断为0。O_APPEND
:在文件末尾追加数据。
mode
: 创建文件时的访问权限,只有在使用O_CREAT时才有效。
可以使用如下几个宏来设置权限:- S_IRUSR:用户读权限。
- S_IWUSR:用户写权限。
- S_IXUSR:用户执行权限。
- S_IRGRP:组读权限。
- S_IWGRP:组写权限。
- S_IXGRP:组执行权限。
- S_IROTH:其他用户读权限。
- S_IWOTH:其他用户写权限。
- S_IXOTH:其他用户执行权限。
1.1.3 返回值:
- 成功:返回一个非负整数的文件描述符,用于后续的文件IO操作。
- 失败:返回-1,并设置errno变量来指示错误类型。
1.2 函数示例
下面是一个使用open()函数的示例:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>int main() {int fd;// 打开文件fd = open("example.txt", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);if (fd == -1) {perror("open");return errno;}// 写入数据char buffer[] = "Hello, world!";ssize_t ret = write(fd, buffer, sizeof(buffer) - 1);if (ret == -1) {perror("write");close(fd);return errno;}// 关闭文件close(fd);return 0;
}
1.3 代码解释
在上述示例中,我们首先使用open()函数以只写模式打开一个文件example.txt。如果文件不存在,则创建该文件,并设置访问权限为用户可读可写。如果打开文件失败,我们使用perror()函数打印错误信息,并返回errno变量。
接下来,我们使用write()函数向文件中写入数据。在本例中,我们写入了字符串"Hello, world!"。如果写入数据失败,我们同样使用perror()函数打印错误信息,并在关闭文件前返回errno变量。
最后,我们使用close()函数关闭文件。
2. close()
2.1 原型、参数及返回值说明
2.1.1 原型:
close()函数是Linux系统编程中用于关闭文件的函数。它接受一个文件描述符作为参数,并返回一个整数值来指示操作是否成功。
close()函数的原型如下:
#include <unistd.h>int close(int fd);
2.1.2 参数:
fd
:要关闭的文件描述符。
2.1.3 返回值:
- 成功:返回0。
- 失败:返回-1,并设置
errno
变量来指示错误类型。
2.2 函数示例
下面是一个使用close()函数的示例:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>int main() {int fd;// 打开文件fd = open("example.txt", O_RDONLY);if (fd == -1) {perror("open");return errno;}// 关闭文件int ret = close(fd);if (ret == -1) {perror("close");return errno;}return 0;
}
2.3 代码解释
在上述示例中,我们首先使用open()
函数以只读模式打开一个文件example.txt
,并将返回的文件描述符存储在变量fd
中。如果打开文件失败,我们使用perror()
函数打印错误信息,并返回errno
变量。
接下来,我们使用close()
函数关闭文件。如果关闭文件失败,我们同样使用perror()
函数打印错误信息,并返回errno
变量。
需要注意的是,关闭文件后,我们不应再对该文件描述符进行任何操作。
3. read()
3.1 原型、参数及返回值说明
3.1.1 原型:
read()函数是Linux系统编程中用于从文件中读取数据的函数。它接受一个文件描述符、一个缓冲区地址和一个读取的最大字节数作为参数,并返回实际读取的字节数。
read()函数的原型如下:
#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);
3.1.2 参数:
fd
:要读取的文件的文件描述符。buf
:用于存储读取数据的缓冲区的地址。count
:要读取的最大字节数。
3.1.3 返回值:
- 成功:返回实际读取的字节数。
- 失败:返回
-1
,并设置errno
变量来指示错误类型。
3.2 函数示例
下面是一个使用read()函数的示例:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>int main() {int fd;// 打开文件fd = open("example.txt", O_RDONLY);if (fd == -1) {perror("open");return errno;}// 读取数据char buffer[100];ssize_t ret = read(fd, buffer, sizeof(buffer));if (ret == -1) {perror("read");close(fd);return errno;}// 输出读取的数据printf("Read %ld bytes: %s\n", ret, buffer);// 关闭文件close(fd);return 0;
}
3.3 代码解释
在上述示例中,我们首先使用open()
函数以只读模式打开一个文件example.txt
,并将返回的文件描述符存储在变量fd
中。如果打开文件失败,我们使用perror()
函数打印错误信息,并返回errno
变量。
接下来,我们使用read()
函数从文件中读取数据。我们定义一个长度为100的缓冲区buffer
,并将其作为参数传递给read()
函数。read()
函数将尽量读取count
个字节的数据,并将其存储在缓冲区中。如果读取数据失败,我们同样使用perror()
函数打印错误信息,并在关闭文件前返回errno
变量。
最后,我们使用printf()
函数输出读取的数据,并使用close()
函数关闭文件。
需要注意的是,read()函数是一个阻塞函数,如果文件中没有足够的数据可读,它将一直等待直到有足够的数据可读或者发生错误。如果需要非阻塞地读取数据,可以使用fcntl()函数设置文件描述符为非阻塞模式。
4. write()
4.1 原型、参数及返回值说明
4.1.1 原型:
write()函数是Linux系统编程中用于向文件中写入数据的函数。它接受一个文件描述符、一个数据缓冲区地址和要写入的字节数作为参数,并返回实际写入的字节数。
write()函数的原型如下:
#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);
4.1.2 参数:
fd
:要写入的文件的文件描述符。buf
:要写入的数据的缓冲区的地址。count
:要写入的字节数。
4.1.3 返回值:
- 成功:返回实际写入的字节数。
- 失败:返回
-1
,并设置errno
变量来指示错误类型。
4.2 函数示例
下面是一个使用write()函数的示例:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>int main() {int fd;// 打开文件fd = open("example.txt", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);if (fd == -1) {perror("open");return errno;}// 写入数据char buffer[] = "Hello, World!";ssize_t ret = write(fd, buffer, sizeof(buffer) - 1);if (ret == -1) {perror("write");close(fd);return errno;}// 关闭文件close(fd);return 0;
}
4.3 代码解释
在上述示例中,我们首先使用open()
函数以只写模式打开一个文件example.txt
,并将返回的文件描述符存储在变量fd
中。如果打开文件失败,我们使用perror()
函数打印错误信息,并返回errno
变量。
接下来,我们使用write()
函数将数据写入文件中。我们定义一个字符串buffer
,并将其作为参数传递给write()
函数。write()
函数将尽量写入count
个字节的数据到文件中。如果写入数据失败,我们同样使用perror()
函数打印错误信息,并在关闭文件前返回errno
变量。
最后,我们使用close()
函数关闭文件。
需要注意的是,write()函数是一个阻塞函数,如果文件无法立即接受写入的数据(例如,磁盘空间不足),它将一直等待直到可以写入数据或者发生错误。如果需要非阻塞地写入数据,可以使用fcntl()函数设置文件描述符为非阻塞模式。
5. lseek()
5.1 原型、参数及返回值说明
5.1.1 原型:
lseek()函数是Linux系统编程中用于在文件中定位读写位置的函数。它接受一个文件描述符、一个偏移量和一个起始位置作为参数,并返回新的读写位置。
lseek()函数的原型如下:
#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);
5.1.2 参数:
fd
:要定位的文件的文件描述符。offset
:偏移量,可以是正数、负数或零。whence
:起始位置,可以取以下三个值:SEEK_SET
:从文件开头开始计算偏移量。SEEK_CUR
:从当前读写位置开始计算偏移量。SEEK_END
:从文件末尾开始计算偏移量。
5.1.3 返回值:
- 成功:返回新的读写位置。
- 失败:返回
-1
,并设置errno
变量来指示错误类型。
5.2 函数示例
下面是一个使用lseek()函数的示例:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>int main() {int fd;// 打开文件fd = open("example.txt", O_RDONLY);if (fd == -1) {perror("open");return errno;}// 定位读写位置off_t ret = lseek(fd, 5, SEEK_SET);if (ret == -1) {perror("lseek");close(fd);return errno;}// 读取数据char buffer[10];ssize_t n = read(fd, buffer, sizeof(buffer) - 1);if (n == -1) {perror("read");close(fd);return errno;}buffer[n] = '\0';printf("Data: %s\n", buffer);// 关闭文件close(fd);return 0;
}
5.3 代码解释
在上述示例中,我们首先使用open()
函数以只读模式打开一个文件example.txt
,并将返回的文件描述符存储在变量fd
中。如果打开文件失败,我们使用perror()
函数打印错误信息,并返回errno
变量。
接下来,我们使用lseek()
函数将读写位置定位到文件开头后的第5个字节。我们将文件描述符、偏移量和起始位置作为参数传递给lseek()
函数。如果定位读写位置失败,我们同样使用perror()
函数打印错误信息,并在关闭文件前返回errno
变量。
然后,我们使用read()
函数从文件中读取数据。我们定义一个缓冲区buffer
,并将其作为参数传递给read()
函数。read()
函数将尽量读取count
个字节的数据到缓冲区中。如果读取数据失败,我们同样使用perror()
函数打印错误信息,并在关闭文件前返回errno
变量。最后,我们在缓冲区末尾添加一个空字符,并使用printf()
函数打印读取到的数据。
最后,我们使用close()
函数关闭文件。
需要注意的是,lseek()函数可以用于定位读写位置,但并不会改变文件的大小。如果需要改变文件的大小,可以使用truncate()函数或ftruncate()函数。
6. stat()
6.1 原型、参数及返回值说明
6.1.1 原型:
stat()函数是Linux系统编程中用于获取文件信息的函数。它接受一个文件路径作为参数,并返回一个包含文件信息的结构体。
stat()函数的原型如下:
#include <sys/types.h>
#include <sys/stat.h>int stat(const char *pathname, struct stat *buf);
6.1.2 参数:
pathname
:要获取信息的文件路径。buf
:用于存储文件信息的结构体指针。
6.1.3 返回值:
- 成功:返回0。
- 失败:返回
-1
,并设置errno
变量来指示错误类型。
struct stat
结构体包含了文件的各种信息,包括文件类型、权限、大小、创建时间、修改时间等。
下面是struct stat结构体的定义:
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; // 如果文件是设备文件,则为设备的IDoff_t st_size; // 文件的大小(字节)blksize_t st_blksize; // 文件系统的块大小blkcnt_t st_blocks; // 分配给文件的块数time_t st_atime; // 文件的最后访问时间time_t st_mtime; // 文件的最后修改时间time_t st_ctime; // 文件的最后状态改变时间
};
6.2 函数示例
下面是一个使用stat()函数的示例:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>int main() {const char *pathname = "example.txt";struct stat file_info;// 获取文件信息int ret = stat(pathname, &file_info);if (ret == -1) {perror("stat");return errno;}// 打印文件信息printf("File Size: %ld bytes\n", file_info.st_size);printf("File Permissions: %o\n", file_info.st_mode & 0777);printf("File Owner UID: %d\n", file_info.st_uid);printf("File Owner GID: %d\n", file_info.st_gid);return 0;
}
6.3 代码解释
在上述示例中,我们首先定义了一个文件路径pathname
和一个struct stat
结构体file_info
,用于存储获取到的文件信息。
然后,我们使用stat()
函数将文件信息存储到file_info
结构体中。我们将文件路径和file_info
结构体指针作为参数传递给stat()
函数。如果获取文件信息失败,我们使用perror()
函数打印错误信息,并返回errno
变量。
最后,我们使用printf()
函数打印获取到的文件信息,包括文件大小、文件权限、文件所有者的UID
和GID
等。
需要注意的是,stat()函数只能获取文件的信息,而不能修改文件的信息。如果需要修改文件的信息,可以使用chmod()函数来修改文件的权限。
7. fcntl()
7.1 原型、参数及返回值说明
7.1.1 原型:
fcntl()函数是Linux系统编程中用于对文件描述符进行控制操作的函数。它可以用于设置文件状态标志、获取文件状态标志、设置文件锁等。
fcntl()函数的原型如下:
#include <fcntl.h>int fcntl(int fd, int cmd, ... /* arg */ );
7.1.2 参数:
fd
:文件描述符,可以是打开文件的文件描述符,也可以是套接字的文件描述符。cmd
:控制命令,用于指定要执行的操作。arg
:可选参数,用于传递特定操作的参数。
7.1.3 返回值:
- 成功:根据不同的操作命令返回不同的值,一般为0或一个正整数。
- 失败:返回
-1
,并设置errno
变量来指示错误类型。
下面是fcntl()函数的一些常用命令:
F_DUPFD
:复制文件描述符,创建一个新的文件描述符,该描述符与原始描述符指向相同的打开文件。F_GETFD
:获取文件描述符的文件状态标志。F_SETFD
:设置文件描述符的文件状态标志。F_GETFL
:获取文件的打开方式和状态标志。F_SETFL
:设置文件的打开方式和状态标志。F_GETLK
:获取文件锁的信息。F_SETLK
:设置文件锁。F_SETLKW
:设置文件锁,如果无法获取锁,则阻塞等待。
7.2 函数示例
下面是一个使用fcntl()函数的示例:
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>int main() {int fd = open("example.txt", O_RDWR);if (fd == -1) {perror("open");return errno;}// 获取文件的打开方式和状态标志int flags = fcntl(fd, F_GETFL);if (flags == -1) {perror("fcntl");return errno;}// 设置文件的状态标志为非阻塞flags |= O_NONBLOCK;int ret = fcntl(fd, F_SETFL, flags);if (ret == -1) {perror("fcntl");return errno;}// 关闭文件描述符close(fd);return 0;
}
7.3 代码解释
在上述示例中,我们首先使用open()
函数打开一个文件,并将返回的文件描述符存储在变量fd中。如果打开文件失败,我们使用perror()
函数打印错误信息,并返回errno
变量。
然后,我们使用fcntl()
函数获取文件的打开方式和状态标志。将文件描述符和F_GETFL
命令作为参数传递给fcntl()
函数,获取到的文件状态标志存储在变量flags
中。如果获取文件状态标志失败,我们同样使用perror()
函数打印错误信息,并返回errno
变量。
接下来,我们将文件的状态标志设置为非阻塞,通过将O_NONBLOCK
标志位与flags
进行按位或操作。然后,我们使用fcntl()
函数将修改后的状态标志设置回文件描述符。将文件描述符、F_SETFL
命令和修改后的状态标志作为参数传递给fcntl()
函数。如果设置文件状态标志失败,我们同样使用perror()
函数打印错误信息,并返回errno
变量。
最后,我们使用close()
函数关闭文件描述符,释放资源。
需要注意的是,fcntl()函数的使用非常灵活,可以根据需要进行各种操作,如复制文件描述符、获取文件锁等。在使用fcntl()函数时,需要注意错误处理,并确保文件描述符的有效性。同时,需要在不再需要使用文件描述符时及时关闭文件描述符,以释放资源并避免资源泄漏。
总结
文件IO操作是Linux系统编程中的重要部分。通过open()
、close()
、read()
、write()
等函数,我们可以对文件进行打开、读取和写入操作。通过lseek()
函数,我们可以在文件中进行定位。而通过stat()
、fcntl()
、dup()
等函数,我们可以获取文件的状态信息,对文件描述符进行控制操作,复制文件描述符等。
除了上述的函数,还有许多其他的函数可以用于文件IO操作,如mkdir()
用于创建目录,rmdir()
用于删除目录,unlink()
用于删除文件,rename()
用于重命名文件等。
相关文章:

【Linux操作系统】举例解释Linux系统编程中文件io常用的函数
在Linux系统编程中,文件IO操作是非常常见和重要的操作之一。通过文件IO操作,我们可以打开、读取、写入和关闭文件,对文件进行定位、复制、删除和重命名等操作。本篇博客将介绍一些常用的文件IO操作函数。 文章目录 1. open()1.1 原型、参数及…...
Ubuntu和centos版本有哪些区别
Ubuntu和CentOS是两个非常流行的Linux发行版,它们在一些方面有一些区别,如下所示: CentOS的版本发布周期相对较长,主要是因为它是基于RedHatEnterpriseLinux(RHEL)的。这意味着在RHEL发布后才能推出对应的CentOS版本。而Ubuntu则在…...

Netty:ChannelHandler抛出异常,对应的channel被关闭
说明 使用Netty框架构建的socket服务端在处理客户端请求时,每接到一个客户端的连接请求,服务端会分配一个channel处理跟该客户端的交互。如果处理该channel数据的ChannelHandler抛出异常没有捕获,那么该channel会关闭。但服务端和其它客户端…...

pytest结合 allure 打标记之的详细使用
前言 前面我们提到使用allure 可以生成漂亮的测试报告,下面就Allure 标记我们做详细介绍。 allure 标记 包含:epic,feature, story, title, testcase, issue, description, step, serverity, link, attachment 常用的标记 allure.feature…...

【linux】2 软件管理器yum和编辑器vim
目录 1. linux软件包管理器yum 1.1 什么是软件包 1.2 关于rzsz 1.3 注意事项 1.4 查看软件包 1.5 如何安装、卸载软件 1.6 centos 7设置成国内yum源 2. linux开发工具-Linux编辑器-vim使用 2.1 vim的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行…...
Angular中的ActivatedRoute和Router
Angular中的ActivatedRoute和Router解释 在Angular中,ActivatedRoute和Router是两个核心的路由服务。他们都提供可以用来检查和操作当前页面路由信息的方法和属性。 ActivatedRoute ActivatedRoute是一个保存关于当前路由状态(如路由参数、查询参数以…...

Layui精简版,快速入门
目录 LayUI之入门 1.什么是layui 2.layui入门 3.自定义模块 4.用户登录 5.主页搭建 LayUI之动态树 main.jsp main.js LayUI之动态选项卡 1.选项卡 main.jsp main.js 2.用户登录 User.java UserDao.java UserAction.java R.java LayUI之用户管理 1.用户查询…...
SSH远程Ubuntu教程
SSH远程Ubuntu教程 目录 什么是SSH?SSH的优点在Ubuntu上启用SSH服务连接到远程Ubuntu服务器SSH的常用命令 1. 什么是SSH? SSH(Secure Shell)是一种网络协议,用于在不安全的网络中安全地远程登录和执行命令。它使用…...

NPM与外部服务的集成(下)
目录 1、撤消访问令牌 2、在CI/CD工作流中使用私有包 2.1 创建新的访问令牌 持续整合 持续部署 交互式工作流 CIDR白名单 2.2 将令牌设置为CI/CD服务器上的环境变量 2.3 创建并签入特定于项目的.npmrc文件 2.4 令牌安全 3、Docker和私有模块 3.1 背景:运…...

Flask Web开发实战(狼书)| 笔记第1、2章
前言 2023-8-11 以前对网站开发萌生了想法,又有些急于求成,在B站照着视频敲了一个基于flask的博客系统。但对于程序的代码难免有些囫囵吞枣,存在许多模糊或不太理解的地方,只会照葫芦画瓢。 而当自己想开发一个什么网站的时&…...

PHP利用PCRE回溯次数限制绕过某些安全限制实战案例
目录 一、正则表达式概述 有限状态自动机 匹配输入的过程分别是: DFA(确定性有限状态自动机) NFA(非确定性有限状态自动机) 二、回溯的过程 三、 PHP 的 pcre.backtrack_limit 限制利用 例题一 回溯绕过步骤 &…...

读书笔记 |【项目思维与管理】➾ 顺势而动
读书笔记 |【项目思维与管理】➾ 顺势而动 一、企业步入“终结者时代”二、过去成功的经验也许是最可怕的三、做好非重复性的事四、适应客户是出发点五、向知识型企业转变六、速度是决胜条件 💖The Begin💖点点关注,收藏不迷路💖 …...
开发利器:接口代理和接口模拟工具
前端开发过程往往需要和后端对接接口,而且一般开发都是前后端同步开发,这就难免出现接口提供滞后的问题,从而导致我们前端开发 UI 开发完成而无法调试的问题。面对这种问题,一般我们会有很多种方式处理,比如在代码中写一些模拟数据,或者打断点调试,或者用代理工具 Fidde…...

MAVEN利器:一文带你了解MAVEN以及如何配置
前言: 强大的构建工具——Maven。作为Java生态系统中的重要组成部分,Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用,Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等…...

解决 adb install 错误INSTALL_FAILED_UPDATE_INCOMPATIBLE
最近给游戏出包,平台要求 v1 签名吧,AS 打包后,adb 执行安装到手机,我用的设备是google pixel6 , android 系统 13, 提示如下: adb install -r v5_android_202308161046.apk Performing Streamed Install a…...
学习Vue:Event Bus 与 Provide/Inject
在Vue.js中,兄弟组件通信是指两个没有直接父子关系的组件之间如何进行数据传递和通信。为了实现兄弟组件通信,我们可以借助Vue的一些特性,如Event Bus和Provide/Inject。让我们一起来深入了解这些方法,并通过实例来看看如何实现兄…...
Java 工具类之JSON key根据ASCII排序
Java按键值字典序排列 参数按照KEY值进行字典序排序(按照KEY值的ASCII码从小到大),并用&作为各参数之间的分隔符将参数拼接成字符串。这里用到了SortedMap,复制以下代码开箱即用~ /*** getSortedString 对参数按照Key进行ASCII排序* param jsonObject 请求参数…...

深兰科技提出新多模态谣言监测模型,刷新世界纪录
近日,深兰科技旗下深兰科技科学院投稿的《基于二部特定事件树的分层表示的谣言检测》(Rumor Detection With Hierarchical Representation on Bipartite Ad Hoc Event Trees)研究论文被全球人工智能领域*期刊《IEEE Transactions on Neural Networks and Learning S…...
【从零学习python 】33.装饰器的作用(二)
文章目录 再议装饰器4. 装饰器(decorator)功能5. 装饰器示例例1:无参数的函数例2:被装饰的函数有参数例3:被装饰的函数有不定长参数例4:装饰器中的return例5:装饰器带参数 进阶案例 再议装饰器 # 定义函数:完成包裹数据 def makeBold(fn):def wrapped():return &qu…...

【自动电压调节器】无功功率控制的终端电压控制研究(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...