当前位置: 首页 > news >正文

【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 参数说明:

  1. pathname:要打开的文件路径名。
  2. flags:打开文件的模式标志,可以是以下几种模式的组合:
    • O_RDONLY:只读模式打开文件。
    • O_WRONLY:只写模式打开文件。
    • O_RDWR:读写模式打开文件。
    • O_CREAT:如果文件不存在,则创建文件。
    • O_EXCL:与O_CREAT一同使用,如果文件已存在,则返回错误。
    • O_TRUNC:如果文件存在且以可写模式打开,则将文件截断为0。
    • O_APPEND:在文件末尾追加数据。
  3. 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()函数打印获取到的文件信息,包括文件大小、文件权限、文件所有者的UIDGID等。

需要注意的是,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系统编程中&#xff0c;文件IO操作是非常常见和重要的操作之一。通过文件IO操作&#xff0c;我们可以打开、读取、写入和关闭文件&#xff0c;对文件进行定位、复制、删除和重命名等操作。本篇博客将介绍一些常用的文件IO操作函数。 文章目录 1. open()1.1 原型、参数及…...

Ubuntu和centos版本有哪些区别

Ubuntu和CentOS是两个非常流行的Linux发行版&#xff0c;它们在一些方面有一些区别&#xff0c;如下所示&#xff1a; CentOS的版本发布周期相对较长&#xff0c;主要是因为它是基于RedHatEnterpriseLinux(RHEL)的。这意味着在RHEL发布后才能推出对应的CentOS版本。而Ubuntu则在…...

Netty:ChannelHandler抛出异常,对应的channel被关闭

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

pytest结合 allure 打标记之的详细使用

前言 前面我们提到使用allure 可以生成漂亮的测试报告&#xff0c;下面就Allure 标记我们做详细介绍。 allure 标记 包含&#xff1a;epic&#xff0c;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中&#xff0c;ActivatedRoute和Router是两个核心的路由服务。他们都提供可以用来检查和操作当前页面路由信息的方法和属性。 ActivatedRoute ActivatedRoute是一个保存关于当前路由状态&#xff08;如路由参数、查询参数以…...

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&#xff1f;SSH的优点在Ubuntu上启用SSH服务连接到远程Ubuntu服务器SSH的常用命令 1. 什么是SSH&#xff1f; SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于在不安全的网络中安全地远程登录和执行命令。它使用…...

NPM与外部服务的集成(下)

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

Flask Web开发实战(狼书)| 笔记第1、2章

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

PHP利用PCRE回溯次数限制绕过某些安全限制实战案例

目录 一、正则表达式概述 有限状态自动机 匹配输入的过程分别是&#xff1a; DFA&#xff08;确定性有限状态自动机&#xff09; NFA&#xff08;非确定性有限状态自动机&#xff09; 二、回溯的过程 三、 PHP 的 pcre.backtrack_limit 限制利用 例题一 回溯绕过步骤 &…...

读书笔记 |【项目思维与管理】➾ 顺势而动

读书笔记 |【项目思维与管理】➾ 顺势而动 一、企业步入“终结者时代”二、过去成功的经验也许是最可怕的三、做好非重复性的事四、适应客户是出发点五、向知识型企业转变六、速度是决胜条件 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; …...

开发利器:接口代理和接口模拟工具

前端开发过程往往需要和后端对接接口,而且一般开发都是前后端同步开发,这就难免出现接口提供滞后的问题,从而导致我们前端开发 UI 开发完成而无法调试的问题。面对这种问题,一般我们会有很多种方式处理,比如在代码中写一些模拟数据,或者打断点调试,或者用代理工具 Fidde…...

MAVEN利器:一文带你了解MAVEN以及如何配置

前言&#xff1a; 强大的构建工具——Maven。作为Java生态系统中的重要组成部分&#xff0c;Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用&#xff0c;Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等…...

解决 adb install 错误INSTALL_FAILED_UPDATE_INCOMPATIBLE

最近给游戏出包&#xff0c;平台要求 v1 签名吧&#xff0c;AS 打包后&#xff0c;adb 执行安装到手机&#xff0c;我用的设备是google pixel6 , android 系统 13&#xff0c; 提示如下&#xff1a; adb install -r v5_android_202308161046.apk Performing Streamed Install a…...

学习Vue:Event Bus 与 Provide/Inject

在Vue.js中&#xff0c;兄弟组件通信是指两个没有直接父子关系的组件之间如何进行数据传递和通信。为了实现兄弟组件通信&#xff0c;我们可以借助Vue的一些特性&#xff0c;如Event Bus和Provide/Inject。让我们一起来深入了解这些方法&#xff0c;并通过实例来看看如何实现兄…...

Java 工具类之JSON key根据ASCII排序

Java按键值字典序排列 参数按照KEY值进行字典序排序(按照KEY值的ASCII码从小到大),并用&作为各参数之间的分隔符将参数拼接成字符串。这里用到了SortedMap&#xff0c;复制以下代码开箱即用~ /*** getSortedString 对参数按照Key进行ASCII排序* param jsonObject 请求参数…...

深兰科技提出新多模态谣言监测模型,刷新世界纪录

近日&#xff0c;深兰科技旗下深兰科技科学院投稿的《基于二部特定事件树的分层表示的谣言检测》(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:装饰器带参数 进阶案例 再议装饰器 # 定义函数&#xff1a;完成包裹数据 def makeBold(fn):def wrapped():return &qu…...

【自动电压调节器】无功功率控制的终端电压控制研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

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