/****************************************************************************** 版权所有: 文件名称: rt_file.c 文件版本: 01.01 创建作者: sunxi 创建日期: 2020-06-18 功能说明: 实时微系统文件系统接口。 其它说明: 修改记录: */ /*------------------------------- 头文件 -------------------------------------- */ #include "rt_file.h" #include /*------------------------------- 宏定义 -------------------------------------- */ /*------------------------------ 类型结构 ------------------------------------- */ /*------------------------------ 全局变量 ------------------------------------- */ /*------------------------------ 函数声明 ------------------------------------- */ extern void start_sync(void); /*------------------------------ 外部函数 ------------------------------------- 外部函数供其它实体文件引用,必须仔细检查传入参数的合法性. */ int rt_file_open(const char *filename, int flags, int mode) { return open(filename, flags); } int rt_file_close(int fd, int id) { return close(fd); } int rt_file_llseek(int fd, long offset, int origin) { return lseek(fd, offset, origin); } int rt_file_read(int fd, char *buf, size_t count, off_t *pos) { int result; if(pos != NULL) lseek(fd, *pos, SEEK_SET); result = read(fd, buf, count); if(pos != NULL) *pos += count; // add by sunxi 20221223 return result; } int rt_file_write(int fd, const char *buf, size_t count, off_t *pos) { int result; if(pos != NULL) lseek(fd, *pos, SEEK_SET); result = write(fd, buf, count); if(pos != NULL) *pos += count; // add by niyh 20201125 start_sync(); return result; } int rt_file_getfile_size(int fd) { struct stat st; if(fd < 0) return -1; // 检查文件长度是否正确 if(fstat(fd, &st) < 0) { return -2; } return (int)st.st_size; } int rt_file_cp(char *src, char *dst) { int ret; char argv[256] = {0x00}; sprintf(argv, "/bin/cp %s %s", src, dst); ret = system(argv); return ret; } int rt_file_mv(char *src,char *dst) { int ret; char argv[256] = {0x00}; sprintf(argv, "/bin/mv %s %s", src, dst); ret = system(argv); return ret; } int rt_file_del(char *pathname) { int ret; char argv[256] = {0x00}; sprintf(argv, "/bin/rm -f %s", pathname); ret = system(argv); return ret; } int rt_file_mkdir(char *dir) { int ret; char argv[256] = {0x00}; if(opendir((const char *)dir) != NULL)//文件夹已存在 return 1; sprintf(argv, "/bin/mkdir -p %s", dir); //递归创建文件夹 ret = system(argv); return ret; } int rt_file_ln(char *src, char *dst) { int ret; char argv[256] = {0x00}; sprintf(argv, "/bin/ln -s %s %s", src, dst); ret = system(argv); return ret; } int rt_rootfs_version(char *pathname) { int ret; char argv[256] = {0x00}; sprintf(argv, "/bin/cat %s", pathname); ret = system(argv); return ret; } int rt_rootfs_version1(char *pathname, char *pathname1, char *pathname2) { int ret = 0; char argv[256] = {0x00}; sprintf(argv, "/bin/cat %s %s %s", pathname, pathname1, pathname2); return ret; } int rt_kernel_version(char *pathname) { int ret; char argv[256] = {0x00}; sprintf(argv, "/bin/cat %s", pathname); ret = system(argv); return ret; } int rt_printenv_version(char *pathname) { int ret; char argv[256] = {0x00}; sprintf(argv, "/bin/cat %s", pathname); ret = system(argv); return ret; } int call_usermodehelper(char *cmd, char *cmd_and_argv[], char *envp[], int flag) { int ret; int i = 0; char cmd_str[512] = {0x00}; char *ptmp = cmd_and_argv[0]; while(ptmp != NULL) { strcat(cmd_str, ptmp); strcat(cmd_str, " "); i ++; ptmp = cmd_and_argv[i]; } ret = system(cmd_str); return ret; } /*------------------------------ 内部函数 ------------------------------------- 内部函数以下划线‘_’开头,不需要检查参数的合法性. */ /*------------------------------ 测试函数 ------------------------------------- 一个实体文件必须带一个本模块的测试函数来进行单元测试,如果的确不方便在本模块中 进行单元测试,必须在此注明实际的测试位置(例如在哪个实体文件中使用哪个测试函数). */ /*------------------------------ 文件结束 ------------------------------------- */