发布日期:2023-10-30 05:07 点击次数:184
思了解更多内容,请访谒:
诱惑51CTO和华为官方息争共建的鸿蒙时刻社区
https://harmonyos.51cto.com
iba现金网LiteOS-M内核LibC收尾存2种,不错左证需求进行二选一,永别是musl libC和newlibc。本文先学习下Musl LibC的收尾代码。文中所波及的源码,均不错在开源站点https://gitee.com/openharmony/kernel_liteos_m 赢得。LiteOS-M内核提供了和内核相干的文献系统、内存苦求开释接口,其他接口不错成功使用Musl提供的。咱们永别来看下内核提供的接口部分。
1、Musl LibC文献系统在使用Musl LibC而且使能复古POSIX FS API时,不错使用文献kal\libc\musl\fs.c中界说的文献系统操作接口。这些是圭臬的POSIX接口,淌若思了解其用法,不错参考Section 2: system calls。不错在网页上搜索,也不错成功把上述网址和函数称号进行拼接,如对于mount()函数,不错成功访谒https://linux.die.net/man/2/mount。opendir等部分函数需要在Section 3: library functions网页上稽查。下文快速记载下各个函数的使用治安。
1.1 函数mount函数mount会挂载source参数(常常是开导称号,也不错是目次)指定的文献系统到target参数指定的目次。文献系统类型LiteOS-M内核复古"fat"和"littlefs"两种类型。"littlefs"文献系统不需要挂载选项参数mountflags。对于fat文献类型,挂载选项参数界说在文献third_party\musl\porting\liteos_m\kernel\include\sys\mount.h中,如MS_RDONLY、MS_NOSUID、MS_REMOUNT等等。参数data由文献系统进行融会,fat文献类型不需要该参数;"littlefs"文献系统需要传入的data参数应该为 (struct lfs_config*)指针类型。
皇冠客服飞机:@seo3687
皇冠博彩平台您提供多样化博彩游戏赛事直播,全面、优质博彩攻略技巧分享,您博彩游戏中尽情享受乐趣收益。平台安全稳定,操作简便,充值提款便捷,您提供最佳博彩体验最高博彩收益。该函数会调用components\fs\vfs\los_fs.c中的函数LOS_FsMount,后文会挑升教训FS VFS。
int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data) { return LOS_FsMount(source, target, filesystemtype, mountflags, data); }1.2 函数umount和umount2
函数umount, umount2用于unmount卸载文献系统。参数target指定要卸载的文献系统。函数umount2除了卸载,还不错指定flag参数来闭幕卸载行径。复古的参数界说在third_party\musl\porting\liteos_m\kernel\include\sys\mount.h,如MNT_FORCE、MNT_DETACH、MNT_EXPIRE和UMOUNT_NOFOLLOW。
博彩平台游戏胜率int umount(const char *target) { return LOS_FsUmount(target); } int umount2(const char *target, int flag) { return LOS_FsUmount2(target, flag); }1.3 函数open、close和unlink
函数open用于翻开一个文献或开导,可能会先创建文献或开导。参数path指定文献或开导的旅途,参数oflag需要使用底下的访谒模式O_RDONLY, O_WRONLY, O_RDWR中的一个,这几个界说在文献third_party\musl\porting\liteos_m\kernel\include\fcntl.h。third_party\musl\porting\liteos_m\kernel\include\bits\fcntl.h。另外,还有些其他文献创建标签或文献景况标签不错通过逻辑与进行指定。文献创建标签有O_CLOEXEC, O_CREAT, O_DIRECTORY, O_EXCL, O_NOCTTY, O_NOFOLLOW, O_TRUNC和O_TTY_INIT。其余的为文献景况标签,这些标签界说文献中third_party\musl\porting\liteos_m\kernel\include\bits\fcntl.h中。不错访谒https://linux.die.net/man/2/open了解这些标签的详备用法。
函数open复返值为文献口头符file descriptor,会被其他函数如read, write, lseek, fcntl等使用。函数close用于关闭一个文献口头符,使fd不再援用任何文献,欧博会员网址可被再次重用。函数unlink用于删除path旅途指定的文献。
int open(const char *path, int oflag, ...) { va_list vaList; va_start(vaList, oflag); int ret; ret = LOS_Open(path, oflag, vaList); va_end(vaList); return ret; } int close(int fd) { return LOS_Close(fd); } int unlink(const char *path) { return LOS_Unlink(path); }1.4 函数read和write
函数read尝试从fd中读取nbyte字节的数据到buf运转的缓存里,读取成效时复返读取的字节数量。函数write把buf处运转的nbyte字节数据写入fd援用的文献里,写入成效时复返骨子写入的字节数量。
皇冠足球ssize_t read(int fd, void *buf, size_t nbyte) { return LOS_Read(fd, buf, nbyte); } ssize_t write(int fd, const void *buf, size_t nbyte) { return LOS_Write(fd, buf, nbyte); }1.5 函数lseek
函数lseek用于再行定位文献读写的偏移位置。参数whence取值为SEEK_SET、SEEK_CUR或SEEK_END,界说在文献third_party\musl\porting\liteos_m\kernel\include\fcntl.h。
SEEK_SET偏移成就在offset字节处。
SEEK_CUR偏移成就在现时位置加上offset字节处。
SEEK_END偏移成就在文献大小加上offset字节处。
函数实际成效时,复返值为从文献开始的偏移字节数值。
off_t lseek(int fd, off_t offset, int whence) { return LOS_Lseek(fd, offset, whence); }}1.6 函数fstat、stat和statfs
函数fstat和stat用于赢得文献的景况state,参数参数永别是文献口头符和文献旅途。参数中的struct stat结构体界说在文献third_party\musl\porting\liteos_m\kernel\include\bits\stat.h中。
函数statfs复返文献系皆备计statistics数据,结构体struct statfs界说在文献third_party\musl\porting\liteos_m\kernel\include\bits\statfs.h中。
int fstat(int fd, struct stat *buf) { return LOS_Fstat(fd, buf); } int stat(const char *path, struct stat *buf) { return LOS_Stat(path, buf); } int statfs(const char *path, struct statfs *buf) { return LOS_Statfs(path, buf); }1.7 函数mkdir、opendir、readir、closedir和rmdrir
函数mkdir用于创建一个目次,目次称号由参数path指定。参数mode指定目次权限。创建成效复返0,不然复返-1。
函数opendir用于翻开一个目次流a directory stream,目次称号由参数dirName指定,复返一个实际目次刘的指针。发生演叨时,复返NULL,并成就errno。复返值类型DIR是struct __dirstream的笔名,界说在文献中third_party\musl\porting\liteos_m\kernel\include\dirent.h。不错访谒https://linux.die.net/man/3/opendir了解更多对于该函数的信息。
函数readdir用于读取一个目次,复返一个struct dirent结构体指针,代表目次流DIR *dir中的下一个目次条款directory entry。到达目次流尾部或演叨时,复返NULL。结构体界说在文献third_party\musl\porting\liteos_m\kernel\include\bits\dirent.h中。 不错访谒https://linux.die.net/man/3/readdir了解更多对于该函数的信息。
函数closedir用于关闭一个目次。函数rmdir用于删除一个目次,只消空目次才会被删除。
年报显示,美邦服饰原来对投资性房地产采用成本模式进行计量,自2022年1月1日起,改按公允价值模式计量,并就该会计政策变更进行追溯调整。
皇冠体育会员int mkdir(const char *path, mode_t mode) { return LOS_Mkdir(path, mode); } DIR *opendir(const char *dirName) { return LOS_Opendir(dirName); } struct dirent *readdir(DIR *dir) { return LOS_Readdir(dir); } int closedir(DIR *dir) { return LOS_Closedir(dir); } int rmdir(const char *path) { return LOS_Unlink(path); }1.8 函数fsync
函数mkdir用于同步内存中通盘已修改的文献数据到储存开导。不错访谒https://linux.die.net/man/3/fsync了解更多对于该函数的信息。
int fsync(int fd) { return LOS_Fsync(fd); }1.9 函数rename
函数rename用于重定名一个文献。不错访谒https://linux.die.net/man/3/rename了解更多对于该函数的信息。
int rename(const char *oldName, const char *newName) { return LOS_Rename(oldName, newName); }1.10 函数ftruncate
函数ftruncate用于截断一个文献到指定的长度。不错访谒https://linux.die.net/man/3/ftruncate了解更多对于该函数的信息。
手机博彩开户送彩金int ftruncate(int fd, off_t length) { return LOS_Ftruncate(fd, length); }2、Musl LibC内存分派开释
LiteOS-M内核提供了内存分派开释函数。这些是圭臬的POSIX接口,淌若思了解其用法,不错参考Section 3: library functions。不错在网页上搜索,也不错成功把上述网址和函数称号进行拼接,如对于malloc()函数,不错成功访谒https://linux.die.net/man/3/malloc。opendir等部分函数需要在网页上稽查。下文快速记载下各个函数的使用治安。
1.1 函数malloc、free和memalign函数malloc和free永别调用内核内存模块的接口来收尾内存苦求和开释。函数memalign不错以指定的内存对皆大小来苦求内存。
void free(void *ptr) { if (ptr == NULL) { return; } LOS_MemFree(OS_SYS_MEM_ADDR, ptr); } void *malloc(size_t size) { if (size == 0) { return NULL; } return LOS_MemAlloc(OS_SYS_MEM_ADDR, size); } void *memalign(size_t boundary, size_t size) { if (size == 0) { return NULL; } return LOS_MemAllocAlign(OS_SYS_MEM_ADDR, size, boundary); }1.2 函数malloc、free和memalign
函数calloc在内存的动态存储区平分派nitems个长度为size的聚拢空间,函数复返一个指向分派肇端地址的指针;淌若分派不可功,复返NULL。
函数zalloc和malloc的区别是亚新三公,苦求成效后,对苦求的内存区域置0。函数realloc用于再行苦求一块内存区域。
void *calloc(size_t nitems, size_t size) { size_t real_size; void *ptr = NULL; if (nitems == 0