目录、用户与组、出错相关函数、时间函数
一、目录相关函数及属性
1、 opendir()函数
opendir 用于打开一个目录,并返回一个目录流指针。name:要打开的目录的路径。
返回值:成功时返回指向目录流的指针,失败时返回 NULL。
#include <dirent.h>
DIR *opendir(const char *name);
2、readdir()函数
readdir用于读取目录中的一个条目(如文件或子目录)。每次调用会返回下一个目录条目,直到所有条目都读取完毕.
dirp:通过opendir打开的目录流指针。
返回值:成功时返回指向目录条目的指针,失败时返回 NULL。
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
struct dirent结构通常包含以下成员:d_name:文件或目录的名称。d_ino:文件的索引节点号(inode number)。
3、closedir()函数
closedir用于关闭一个已打开的目录流。 参数:opendir的返回结果中目录流对象。返回值:成功时返回 0,失败时返回 -1
#include <dirent.h>
int closedir(DIR *dirp);
4、chdir函数
chdir用于更改当前工作目录。参数: path:改变到的路径。返回值:成功返回0、失败返回-1。
#include <unistd.h>
int chdir(const char *path);
5、getcwd函数=>pwd
getcwd用于获取当前工作目录的绝对路径参数: buf:保存工作路径空间的首地址、 size:保存路径空间的长度
返回值: 成功返回包含路径空间的字符串首地址、失败返回NULL。
#include <unistd.h>
char *getcwd(char *buf, size_t size);
6、mkdir函数=>mkdir
mkdir()用于创建一个新的目录、LInux中区分大小写的。
pathname:要创建的目录的路径。
mode:目录的权限设置(如 0755 表示所有者可以读写执行,组和其他用户只读执行)。
返回值:成功时返回 0,失败时返回 -1。
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
7、rmdir函数=>rm
rmdir()删除一个空目录文件
pathname:要删除的目录的路径。该目录必须是空的,否则删除会失败。
返回值:成功时返回 0,失败时返回 -1
#include <unistd.h>
int rmdir(const char *pathname);
8、remove函数=>mv
remove用于删除指定的文件或空目录。
pathname:要删除的文件或空目录的路径。
返回值:成功时返回 0,失败时返回 -1。
说明:
如果路径指向的是一个文件,remove 将删除该文件。
如果路径指向的是一个目录,则该目录必须为空,否则删除将失败。
删除非空目录:remove不能删除非空目录,如果需要删除非空目录,应使用系统特定的函数或递归删除目录下的所有内容。
#include <stdio.h>
int remove(const char *pathname);
9、rename函数=>mv
rename用于重命名文件或目录,或者将文件或目录移动到新的位置。
oldpath:原文件或目录的路径。
newpath:新文件或目录的路径(可以是新的名字或新的路径)。
返回值:成功时返回 0,失败时返回 -1。
说明:
如果newpath已经存在,并且newpath 是一个文件,那么它将被删除并替换为oldpath。
如果newpath是一个目录,且目录非空,那么重命名操作将失败。
rename既可以重命名文件,也可以重命名目录,甚至可以跨目录移动文件或目录。
跨文件系统重命名:在某些文件系统上,rename可能不支持跨文件系统重命名或移动文件,在这种情况下,通常需要手动复制并删除文件
#include <stdio.h>
int rename(const char *oldpath, const char *newpath);
10、stat()函数=>stat
stat是一个在类 Unix 操作系统中非常有用的系统调用,用于获取文件或目录的详细信息,包括文件的大小、权限、修改时间等。使用stat可以获取一个文件或目录的状态信息。
pathname:文件或目录的路径。
statbuf:指向 struct stat结构体的指针,用于存储获取的文件或目录的状态信息。
返回值:成功时返回 0,失败时返回 -1。
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *pathname, struct stat *statbuf);
stat函数通过struct stat 结构返回文件的状态信息。该结构体定义如下 :
struct stat {dev_t st_dev; // 文件所在的设备ino_t st_ino; // 文件的节点号mode_t st_mode; // 文件的类型和权限nlink_t st_nlink; // 硬链接的数量uid_t st_uid; // 所有者的用户IDgid_t st_gid; // 所有者的组IDdev_t st_rdev; // 若此文件为设备文件,则为其设备号off_t st_size; // 文件大小,以字节为单位blksize_t st_blksize; // 文件系统的块大小blkcnt_t st_blocks; // 文件所占的块数time_t st_atime; // 最后一次访问时间time_t st_mtime; // 最后一次修改时间time_t st_ctime; // 最后一次状态变化时间
};
常用的 st_mode 值:
S_IFREG:普通文件
S_IFDIR:目录
S_IFLNK:符号链接
S_IFCHR:字符设备
S_IFBLK:块设备
S_IFIFO:FIFO (管道)
S_IFSOCK:套接字
此外,st_mode中还包含了文件权限位,如:
S_IRUSR:所有者可读
S_IWUSR:所有者可写
S_IXUSR:所有者可执行
11、truncate函数
truncate是一个系统调用,用于调整文件的大小。如果新大小小于文件当前大小,则文件会被截断;如果新大小大于文件当前大小,则文件会被扩展,并用空字节(通常为零)填充扩展部分。
path:文件的路径。
length:文件的新大小。
返回值:成功时返回 0,失败时返回 -1
二、软链接与硬链接
软链接(符号链接)是一个指向另一个文件或目录的特殊文件。它类似于 Windows 中的快捷方式。//ln -s 123 softlink 快捷方式
特点:
- 软链接只是一个指向目标文件的路径,并不包含目标文件的内容。
- 软链接可以跨文件系统创建。
- 如果目标文件被删除,软链接会变为“断开的链接”,因为它指向一个不存在的文件。
target:目标文件或目录的路径名。
linkpath:符号链接的路径名(即将要创建的符号链接的名称)。
返回值:成功时返回 0,失败时返回 -1
#include <unistd.h>
int symlink(const char *target, const char *linkpath);
硬链接是文件系统中指向同一文件数据的多个文件名。硬链接与目标文件共享相同的 inode 号码,因此它们实际上是同一个文件,只是有不同的文件名。//link ln 1 2
特点:
- 硬链接指向相同的文件数据,删除一个硬链接不会影响其他硬链接。
- 硬链接不能跨文件系统创建。
- 硬链接不能链接到目录(除非使用特定的系统选项或特殊的文件系统)
参数: oldpath:现有文件的路径名。
newpath:硬链接的路径名(即将要创建的硬链接的名称)。
返回值:成功时返回 0,失败时返回 -1。
#include <unistd.h>
int link(const char *oldpath, const char *newpath);
三、报错函数
在 C 语言中,perror()、strerror()和 error()是处理和显示错误信息的常用函数或宏。它们主要用于调试和错误处理,让程序员可以理解程序运行时的错误原因。
1.perror() 函数 void perror(const char *s);
perror()是一个标准库函数(stdio.h库),用于输出上一个库函数调用失败的原因。它会根据全局变量 errno的值来输出相应的错误信息。
s:这是一个字符串,通常是描述发生错误的上下文。perror()会先输出这个字符串,然后在后面加上一个冒号和空格,再输出根据 `errno` 解释的错误信息。无返回值
#include <stdio.h>
int main() {FILE *fp = fopen("non_existent_file.txt", "r");if (fp == NULL) {perror("Failed to open file");return -1;}return 0;
}
//输出Failed to open file: No such file or directory
2.strerror()函数 char *strerror(int errnum);
strerror()是一个标准库函数(string.h库),用于将错误号(通常是 errno)转换为描述错误的字符串。它返回一个指向错误消息字符串的指针。
errnum:这是一个错误号(通常是 errno的值)。
返回值:返回指向错误消息字符串的指针
#include <stdio.h>
#include <string.h>
#include <errno.h>//错误号变量int main() {int errnum = ENOENT; // "No such file or directory" error codeprintf("Error message: %s\n", strerror(errnum));//输出Error message: No such file or directoryreturn 0;
}
3.error()函数
error()不是标准的 C 库函数,但在 GNU C 库 (glibc) 中可用。它用于打印错误消息,并可选地终止程序。error() 函数还允许指定一个自定义的退出状态码。
status:如果 status不为 0,error()会调用 exit(status)以终止程序;如果为 0,程序将继续执行。
errnum:通常是 errno,表示错误号。如果 errnum为 0,不会输出任何错误消息,只输出 format指定的自定义信息。
format:这是一个格式化字符串,类似于 printf,用于输出自定义错误消息。
返回值:无返回值
#include <stdio.h>
#include <error.h>
#include <errno.h> //extern int errno
int main(int argc, char *argv[])
{FILE* fp = fopen("aaa","r"); if(NULL == fp){//perror("fopen");error(1,errno,"fopen,file:%s fun:%s line:%d",__FILE__,__func__,__LINE__);printf("aaaa\n");return -1;}return 0;
}
总结:
perror():输出自定义字符串和标准错误消息,适用于快速输出错误信息。
strerror():将错误码转换为可读的错误字符串,适用于需要将错误信息作为字符串处理的场合。
error()(GNU扩展):输出格式化的错误消息,并可选择是否退出程序,提供了更灵活的错误处理方式。
__FILE__: 表示是那个文件
__LINE__:表示第几行
__func__:表示在那个函数
__DATE__:编译时表示日期
__TIME__:编译时表示时间
四、获取用户和组相关函数
1.组函数
struct group {char *gr_name; // 组名char *gr_passwd; // 组密码gid_t gr_gid; // 组IDchar **gr_mem; // 组成员列表
};
1.getgrgid()函数
getgrgid()函数用于根据组ID (GID) 查找组信息,并返回指向 struct group结构体的指针。
返回值:指向 struct group结构体的指针,包含了组的名称、组ID、组成员等信息。如果没有找到对应的组,返回 NULL。
#include <stdio.h>
#include <grp.h>
int main() {gid_t gid = 1000; // 例如,组ID为1000//struct group *getgrgid(gid_t gid);struct group *grp = getgrgid(gid);if (grp != NULL) {printf("Group name: %s\n", grp->gr_name);} else {perror("Group not found");}return 0;
}
2.getgrnam()函数
getgrnam()函数用于根据组名查找组信息,并返回指向 struct group结构体的指针。
返回值:指向 struct group 结构体的指针。如果没有找到对应的组,返回 NULL
#include <stdio.h>
#include <grp.h>
//struct group *getgrnam(const char *name);
int main() {const char *group_name = "staff"; // 例如,组名为"staff"struct group *grp = getgrnam(group_name);if (grp != NULL) {printf("Group ID: %d\n", grp->gr_gid);} else {perror("Group not found");}return 0;
}
2.用户函数
struct passwd {char *pw_name; // 用户名char *pw_passwd; // 用户密码uid_t pw_uid; // 用户IDgid_t pw_gid; // 组IDchar *pw_gecos; // 用户全名char *pw_dir; // 用户的主目录char *pw_shell; // 用户的登录 shell
};
getpwuid()函数
getpwuid()函数用于根据用户ID (UID) 查找用户信息,并返回指向 struct passwd结构体的指针。
#include <stdio.h>
#include <pwd.h>
int main() {uid_t uid = 1000; // 例如,用户ID为1000struct passwd *pw = getpwuid(uid);if (pw != NULL) {printf("User name: %s\n", pw->pw_name);} else {perror("User not found");}return 0;
}
getpwnam()函数
getpwnam()函数用于根据用户名查找用户信息,并返回指向 struct passwd结构体的指针。
#include <stdio.h>
#include <pwd.h>
int main() {const char *user_name = "john"; // 例如,用户名为"john"struct passwd *pw = getpwnam(user_name);if (pw != NULL) {printf("User ID: %d\n", pw->pw_uid);} else {perror("User not found");}return 0;
}
五、时间函数
C 语言中的时间相关函数主要包含在 `<time.h>` 头文件中。这些函数用于处理和操作日期和时间,支持获取当前时间、格式化时间、测量时间间隔等操作。
struct tm {int tm_sec; // 秒,范围为 0-60,允许闰秒(考虑到可能存在的闰秒,所以有可能为 60)int tm_min; // 分,范围为 0-59int tm_hour; // 时,范围为 0-23int tm_mday; // 一个月中的某一天,范围为 1-31int tm_mon; // 月,范围为 0-11(0 表示 1 月,1 表示 2 月,以此类推)int tm_year; // 年份,自 1900 年起算,即 2024 年表示为 2024-1900 = 124int tm_wday; // 一周中的某一天,范围为 0-6(0 表示星期天,1 表示星期一,以此类推)int tm_yday; // 一年中的某一天,范围为 0-365(0 表示 1 月 1 日)int tm_isdst; // 夏令时标志,正值表示夏令时生效,零表示夏令时不生效,负值表示不确定
};
以下是一些常用的时间相关函数:
1. time()函数
time()函数用于获取当前的日历时间,并返回Epoch时间(1970-01-01 00:00:00 UTC)以来经过的秒数。
t:如果t不是NULL,则time_t值也会存储在t指向的内存中。
返回值:返回当前时间的time_t值(通常是一个长整型整数),如果失败返回(time_t)-1。
#include <time.h>
time_t time(time_t *t);
2. ctime()函数
ctime()函数将时间值(time_t类型)转换为字符串形式的本地时间,格式为 "Www Mmm dd hh:mm:ss yyyy\n"。
t:指向要转换的time_t时间值的指针。
返回值:返回指向字符串的指针,包含格式化的本地时间字符串。如果失败,返回 NULL。
#include <stdio.h>
#include <time.h>int main() {time_t current_time = time(NULL);printf("Current time: %s", ctime(¤t_time));
//Current time: Tue Aug 15 14:30:00 2024return 0;
}
3. difftime()函数
difftime()函数用于计算两个时间值之间的差值,并以秒为单位返回结果。
end:结束时间的time_t值。
start:开始时间的time_t值。
返回值:返回end和start之间的时间差(以秒为单位)。
#include <stdio.h>
#include <time.h>int main() {time_t start_time = time(NULL);// 模拟某种延迟sleep(2);time_t end_time = time(NULL);double elapsed = difftime(end_time, start_time);printf("Elapsed time: %.2f seconds\n", elapsed);return 0;
}
4. localtime()函数
localtime()函数将time_t类型的时间值转换为当地时间,并返回指向struct tm结构体的指针。
timep:指向要转换的time_t时间值的指针。
返回值:返回指向 struct tm的指针,包含分解的本地时间信息。如果失败,返回 NULL。
#include <stdio.h>
#include <time.h>int main() {time_t current_time = time(NULL);struct tm *local_time = localtime(¤t_time);printf("Local time: %02d:%02d:%02d\n",local_time->tm_hour, local_time->tm_min, local_time->tm_sec);return 0;
}
5. mktime()函数
mktime()函数将struct tm结构体表示的时间转换为time_t类型的日历时间(秒数)。
timeptr:指向要转换的 struct tm结构体的指针。
返回值:返回 time_t值(自 Epoch 时间以来的秒数),如果失败返回 (time_t)-1。
#include <stdio.h>
#include <time.h>int main() {struct tm time_info = {0};time_info.tm_year = 2024 - 1900; // 年份从1900年开始time_info.tm_mon = 7; // 8月,从0开始time_info.tm_mday = 15;time_info.tm_hour = 14;time_info.tm_min = 30;time_info.tm_sec = 0;time_t t = mktime(&time_info);printf("Time in seconds since Epoch: %ld\n", t);return 0;
}
6. strftime()函数
strftime()函数根据格式字符串生成格式化的时间字符串。
s:存放结果的字符串缓冲区。
max:缓冲区的最大长度。
format:格式字符串,类似于printf的格式字符串。
tm:指向struct tm结构体的指针,包含时间信息。
返回值:返回写入缓冲区的字符数。
#include <stdio.h>
#include <time.h>int main() {time_t current_time = time(NULL);struct tm *local_time = localtime(¤t_time);char buffer[80];strftime(buffer, sizeof(buffer), "Date: %Y-%m-%d Time: %H:%M:%S", local_time);printf("%s\n", buffer);return 0;
}
总结:
time():获取当前时间,以秒为单位。
ctime():将time_t时间转换为字符串形式的本地时间。
difftime():计算两个time_t时间之间的差值。
localtime():将time_t时间转换为本地时间的struct tm结构体。
gmtime():将time_t时间转换为 UTC 时间的struct tm结构体。
mktime():将 struct tm结构体转换为time_t时间。
strftime():根据格式字符串生成格式化的时间字符串。
这些函数提供了丰富的时间处理功能,适用于不同的时间和日期操作场景。
相关文章:

目录、用户与组、出错相关函数、时间函数
一、目录相关函数及属性 1、 opendir()函数 opendir 用于打开一个目录,并返回一个目录流指针。name:要打开的目录的路径。 返回值:成功时返回指向目录流的指针,失败时返回 NULL。 #include <dirent.h> DIR *opendir(con…...

<keep-alive> 一分钟了解
<keep-alive> 一分钟了解 <keep-alive> 是 Vue.js 提供的一个抽象组件,它的主要用途是在页面或组件切换时保留其状态,避免重复执行昂贵的渲染操作,从而提升应用性能。 文章目录 <keep-alive> 一分钟了解 一、 <keep-ali…...
Android 启动动画太生硬
跟 android:launchMode"singleTask"属性无关系 请禁用路由 ARouter.getInstance() .build(Routes.Main.MAIN) .withTransition(R.anim.activity_anim_in, R.anim.activity_anim_out).navigation() 正确做法是 val intent Intent(thisSplashActivity,MainActivit…...
深度学习中常用概念总结
最近在做深度学习,里面涉及到很多概念,有的名称都差不多容易记混。所以写这篇文章总结一下。眼过千遍不如手过一遍。 1. 轮数(Epochs): 一轮(Epoch)指的是整个训练数据集在训练过程中被完整使用一次。…...

进 程
1.进程:进行中的程序。 微观串行,宏观并行。 程序的一次执行过程 进程是程序的一个实例 一个程序可以对应一个或多个进程。 2.为什么需要进程? 3.进程的组成部分: 进程 pcb 块 栈|堆|bss|data|text 其中: 家族…...

Taro-UI
一、安装Taro UI 进入项目文件,执行项目 //使用yarn安装taro-ui yarn add taro-ui//使用npm安装taro-ui npm install taro-ui//注:因为要支持自定义主题功能,需要将样式从组件中抽离出来,在微信小程序中依赖 globalClass 功能&a…...

TypeScript 之 JavaScript文件类型检查
启用对 JavaScript 文件的类型检查 在 TypeScript 编译选项 compilerOptions 全部配置项 中,可以通过以下2个属性配置 JavaScript Support: allowJs 是否允许编译 JavaScript 文件。默认值是 false。在默认情况下,TypeScript 编译器只处理 .…...

基本数据类型变量间的自动提升与强制转换以及进制的转换
基本数据类型变量间的自动提升与强制转换 测试基本数据类型的运算规则 这里基本类型不包括布尔 运算规则 自动类型提升 当容量小的变量与容量大的变量做运算时,结果自动转换容量大的数据类型 说明:此时容量大小,指的是数据范围大小&…...
SparseConv 的学习笔记
安装 环境设置在74.183 sdfstudio 里面,SparseNeus 推荐的版本是是 torchsparse 2.0.0版本 命令行如下: 需要 C 的 sudo 权限指定安装: ## 安装依赖项 conda install -c conda-forge sparsehash sudo apt-get install libsparsehash-dev 进入官网下…...

vscode 快速生成vue 格式
1.用快捷Ctrl Shift P唤出控制台 输入“Snippets”并选择 Snippets: Configure User Snippets 2.输入vue,选中vue.json vs code自动生成vue.json文件 3.在 vue.json 中添加模板 {"Print to console": {"prefix": "vue2","b…...

react笔记:redux
redux状态管理 安装redux:num i redux 新建redux文件夹: store.jscount_reducer.js count_action.js constant.js (常量) 1. store.js文件: // 该文件专门用于暴露一个store对象,整个应用只有一个store对…...

数据结构与算法--图的应用
文章目录 回顾提要连通图生成树最小生成树构造最小生成树的算法普里姆(Prim)算法克鲁斯卡尔(Kruskal)算法 最短路径狄杰斯特拉 (Dijkstra) 算法当前最短路径的更新拓扑排序拓扑排序方法拓扑排序示例总结 回顾 图的遍历方法: 深度优先遍历 (DFS):从任意…...

【leetcode图文详解】特殊数组II : 空间换时间的“记忆化”,越多越好吗?
题目详解 需求:判断给定区间内的元素是否满足“特殊数组”要求 尝试: 暴力求解? 如果试着直接对每个queries中的区间进行检测而不做其他处理,那么最后不出意外地超时了。。 细想优化策略,不难察觉到其中可能存在大量的重复运算 那还等什…...

离线安装prometheus与Grafana实现可视化监控
简介 prometheus 是一个专为云环境设计的开源系统监控和警报工具,它收集并存储多维度的时间序列数据,通过PromQL查询语言提供强大的数据检索能力,并支持可视化及警报功能。而 Grafana 则是一个开源的数据可视化平台,能够与包括Pr…...

【Python学习-UI界面】PyQt5 小部件7-QSpinBox 计数器
样式如下: 一个 QSpinBox 对象向用户呈现一个文本框,右侧有一个上下按钮,显示一个整数。如果按下上下按钮,文本框中的值将增加/减少。 默认情况下,框中的整数从0开始,最高到99,并以步长1变化。对于浮点数…...

[二次元]个人主页搭建
文章目录 域名买一个免费的 框架HexoHexo-Theme-ParticleX Halo 参考 域名 买一个 有钱人玩这个 免费的 github.io 教程在github官方文档有; 框架 Hexo 静态的 Hexo-Theme-ParticleX Argvchsの小窝 Halo 动态的 halo 参考 基于Hexo框架的GitHub个人主页…...

Spring Data JPA 自动创建时间的相关注解和用法
以Springboot项目为例 在实体类上加上注解 EntityListeners(AuditingEntityListener.class)在相应的字段上添加对应的时间注解 LastModifiedDate 和 CreatedDateApplication启动类中添加注解 EnableJpaAuditing...

Java基础之隐式类型转换
类型转换 基本数据类型表示范围大小排序: 在变量赋值及算术运算的过程中,经常会用到数据类型转换,其分为两类: 隐式类型转换 显式类型转换 1 隐式类型转换 情形1:赋值过程中,小数据类型值或变量可以直…...

【数据结构与算法 | 图篇】Dijkstra算法(单源最短路径算法)
1. 前言 由图: 如果我们想要求得节点1到节点5(也可以是其他节点)的最短路径,我们可以使用Dijkstra算法。 2. 步骤与思路 1. 将所有顶点标记为未访问(顶点类的visited属性设置为false)。创建一个未访问顶点的集合。 2. 为每个顶…...
windows c转linux c要做的事情。
写在开头: 最近的copy项目要转到windows版本了,一直在跟进做这个事情。 直入主题说下移植过程中可能涉及以下几个方面的调整: 编译器和工具链的更改:Windows和Linux使用不同的编译器和工具链,因此需要在Windo…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...