| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- /******************************************************************************
- 版权所有:
- 文件名称: rt_file.c
- 文件版本: 01.01
- 创建作者: sunxi
- 创建日期: 2020-06-18
- 功能说明: 实时微系统文件系统接口。
- 其它说明:
- 修改记录:
- */
- /*------------------------------- 头文件 --------------------------------------
- */
- #include "rt_file.h"
- #include <dirent.h>
- /*------------------------------- 宏定义 --------------------------------------
- */
- /*------------------------------ 类型结构 -------------------------------------
- */
- /*------------------------------ 全局变量 -------------------------------------
- */
- /*------------------------------ 函数声明 -------------------------------------
- */
- 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;
- }
- /*------------------------------ 内部函数 -------------------------------------
- 内部函数以下划线‘_’开头,不需要检查参数的合法性.
- */
- /*------------------------------ 测试函数 -------------------------------------
- 一个实体文件必须带一个本模块的测试函数来进行单元测试,如果的确不方便在本模块中
- 进行单元测试,必须在此注明实际的测试位置(例如在哪个实体文件中使用哪个测试函数).
- */
- /*------------------------------ 文件结束 -------------------------------------
- */
|