43#include "sys/statfs.h"
65#define ERROR_OUT_IF(condition, message_function, handler) \
76static inline
void set_err(
int errcode, const
char *err_message)
82int osShellCmdDoChdir(
const char *path)
84 char *fullpath = NULL;
85 char *fullpath_bak = NULL;
88 if (shell_working_directory == NULL)
96 PRINTK(
"%s\n", shell_working_directory);
102 ERROR_OUT_IF(strlen(path) > PATH_MAX, set_err(ENOTDIR,
"cd error"),
return -1);
105 ERROR_OUT_IF(ret < 0, set_err(-ret,
"cd error"),
return -1);
107 fullpath_bak = fullpath;
108 ret =
chdir(fullpath);
119 ret = strncpy_s(shell_working_directory, PATH_MAX, fullpath, strlen(fullpath));
156int osShellCmdLs(
int argc,
const char **argv)
158 char *fullpath = NULL;
159 const char *filename = NULL;
162 if (shell_working_directory == NULL)
167 ERROR_OUT_IF(argc > 1, PRINTK(
"ls or ls [DIRECTORY]\n"),
return -1);
171 ls(shell_working_directory);
177 ERROR_OUT_IF(ret < 0, set_err(-ret,
"ls error"),
return -1);
205int osShellCmdCd(
int argc,
const char **argv)
209 (
void)osShellCmdDoChdir(
"/");
213 (
void)osShellCmdDoChdir(argv[0]);
218#define CAT_BUF_SIZE 512
219#define CAT_TASK_PRIORITY 10
220#define CAT_TASK_STACK_SIZE 0x3000
221pthread_mutex_t g_mutex_cat = PTHREAD_MUTEX_INITIALIZER;
243 char buf[CAT_BUF_SIZE];
244 size_t size, written, toWrite;
246 char *fullpath = (
char *)arg;
250 ini = fopen(fullpath,
"r");
260 (
void)memset_s(buf,
sizeof(buf), 0, CAT_BUF_SIZE);
261 size = fread(buf, 1, CAT_BUF_SIZE, ini);
266 goto out_with_fclose;
269 for (toWrite = size, written = 0; toWrite > 0;)
271 cnt = write(1, buf + written, toWrite);
280 perror(
"cat write error");
303 char *fullpath = NULL;
305 unsigned int ca_task;
306 struct Vnode *vnode = NULL;
309 if (shell_working_directory == NULL)
314 ERROR_OUT_IF(argc != 1, PRINTK(
"cat [FILE]\n"),
return -1);
317 ERROR_OUT_IF(ret < 0, set_err(-ret,
"cat error"),
return -1);
343 init_param.
pcName =
"shellcmd_cat";
344 init_param.
uwResved = LOS_TASK_STATUS_DETACHED | OS_TASK_FLAG_SPECIFIES_PROCESS;
357static int nfs_mount_ref(
const char *server_ip_and_path,
const char *mount_path,
362 unsigned long mountfalgs = 0;
364 while ((options != NULL) && (p = strsep((
char**)&options,
",")) != NULL) {
365 if (strncmp(p,
"ro", strlen(
"ro")) == 0) {
366 mountfalgs |= MS_RDONLY;
367 }
else if (strncmp(p,
"rw", strlen(
"rw")) == 0) {
368 mountfalgs &= ~MS_RDONLY;
369 }
else if (strncmp(p,
"nosuid", strlen(
"nosuid")) == 0) {
370 mountfalgs |= MS_NOSUID;
371 }
else if (strncmp(p,
"suid", strlen(
"suid")) == 0) {
372 mountfalgs &= ~MS_NOSUID;
382 PRINTK(
"mount [DEVICE] [PATH] [NAME]\n");
409 char *fullpath = NULL;
410 const char *filename = NULL;
413 char *filessystemtype = NULL;
414 unsigned long mountfalgs;
416 if (shell_working_directory == NULL)
423 if (strncmp(argv[0],
"-t", 2) == 0 || strncmp(argv[0],
"-o", 2) == 0)
427 PRINTK(
"mount -t/-o [DEVICE] [PATH] [NAME]\n");
433 ERROR_OUT_IF(ret < 0, set_err(-ret,
"mount error"),
return -1);
435 if (strncmp(argv[3],
"nfs", 3) == 0)
439 uid = ((argc >= 5) && (argv[4] != NULL)) ? (
unsigned int)strtoul(argv[4], (
char **)NULL, 0) : 0;
440 gid = ((argc == 6) && (argv[5] != NULL)) ? (
unsigned int)strtoul(argv[5], (
char **)NULL, 0) : 0;
447 PRINTK(
"mount -t [DEVICE] [PATH] [NAME]\n");
452 PRINTK(
"can't find nfs_mount\n");
459 filessystemtype = (argc >= 4) ? (
char *)argv[3] : NULL;
460 mountfalgs = (argc >= 5) ?
get_mountflags((
const char *)argv[4]) : 0;
461 data = (argc >= 6) ? (
char *)argv[5] : NULL;
463 if (strcmp(argv[1],
"0") == 0)
465 ret = mount((
const char *)NULL, fullpath, filessystemtype, mountfalgs,
data);
469 ret = mount(argv[1], fullpath, filessystemtype, mountfalgs,
data);
473 perror(
"mount error");
477 PRINTK(
"mount ok\n");
484 ERROR_OUT_IF(ret < 0, set_err(-ret,
"mount error"),
return -1);
486 if (strncmp(argv[2],
"nfs", 3) == 0)
490 uid = ((argc >= 4) && (argv[3] != NULL)) ? (
unsigned int)strtoul(argv[3], (
char **)NULL, 0) : 0;
491 gid = ((argc == 5) && (argv[4] != NULL)) ? (
unsigned int)strtoul(argv[4], (
char **)NULL, 0) : 0;
498 PRINTK(
"mount [DEVICE] [PATH] [NAME]\n");
503 PRINTK(
"can't find nfs_mount\n");
514 mountfalgs = (argc >= 4) ?
get_mountflags((
const char *)argv[3]) : 0;
515 data = (argc >= 5) ? (
char *)argv[4] : NULL;
517 if (strcmp(argv[0],
"0") == 0)
519 ret = mount((
const char *)NULL, fullpath, argv[2], mountfalgs,
data);
523 ret = mount(argv[0], fullpath, argv[2], mountfalgs,
data);
527 perror(
"mount error");
531 PRINTK(
"mount ok\n");
560 const char *filename = NULL;
561 char *fullpath = NULL;
562 char *target_path = NULL;
564 char *work_path = NULL;
566 if (shell_working_directory == NULL)
570 work_path = shell_working_directory;
572 ERROR_OUT_IF(argc == 0, PRINTK(
"umount [PATH]\n"),
return 0);
576 ERROR_OUT_IF(ret < 0, set_err(-ret,
"umount error"),
return -1);
578 target_path = fullpath;
579 cmp_num = strlen(fullpath);
580 ret = strncmp(work_path, target_path, cmp_num);
583 work_path += cmp_num;
584 if (*work_path ==
'/' || *work_path ==
'\0')
587 perror(
"umount error");
593 ret = umount(fullpath);
597 perror(
"umount error");
601 PRINTK(
"umount ok\n");
628 char *fullpath = NULL;
629 const char *filename = NULL;
631 if (shell_working_directory == NULL)
636 ERROR_OUT_IF(argc != 1, PRINTK(
"mkdir [DIRECTORY]\n"),
return 0);
640 ERROR_OUT_IF(ret < 0, set_err(-ret,
"mkdir error"),
return -1);
642 ret = mkdir(fullpath, S_IRWXU | S_IRWXG | S_IRWXO);
645 perror(
"mkdir error");
668 char buf[SHOW_MAX_LEN] = {0};
671 if (shell_working_directory == NULL)
676 ERROR_OUT_IF(argc > 0, PRINTK(
"\nUsage: pwd\n"),
return -1);
678 dir = opendir(shell_working_directory);
686 if (strncpy_s(buf, SHOW_MAX_LEN, shell_working_directory, SHOW_MAX_LEN - 1) != EOK)
689 PRINTK(
"pwd error: strncpy_s error!\n");
703 PRINTK(
" statfs <path>\n");
704 PRINTK(
" path : Mounted file system path that requires query information\n");
705 PRINTK(
"Example:\n");
706 PRINTK(
" statfs /ramfs\n");
730 unsigned long long total_size, free_size;
731 char *fullpath = NULL;
732 const char *filename = NULL;
734 if (shell_working_directory == NULL)
739 ERROR_OUT_IF(argc != 1, PRINTK(
"statfs failed! Invalid argument!\n"),
return -1);
741 (
void)memset_s(&sfs,
sizeof(sfs), 0,
sizeof(sfs));
745 ERROR_OUT_IF(result < 0, set_err(-result,
"statfs error"),
return -1);
747 result = statfs(fullpath, &sfs);
750 if (result != 0 || sfs.f_type == 0)
752 PRINTK(
"statfs failed! Invalid argument!\n");
757 total_size = (
unsigned long long)sfs.f_bsize * sfs.f_blocks;
758 free_size = (
unsigned long long)sfs.f_bsize * sfs.f_bfree;
760 PRINTK(
"statfs got:\n f_type = %d\n cluster_size = %d\n", sfs.f_type, sfs.f_bsize);
761 PRINTK(
" total_clusters = %llu\n free_clusters = %llu\n", sfs.f_blocks, sfs.f_bfree);
762 PRINTK(
" avail_clusters = %llu\n f_namelen = %d\n", sfs.f_bavail, sfs.f_namelen);
763 PRINTK(
"\n%s\n total size: %4llu Bytes\n free size: %4llu Bytes\n", argv[0], total_size, free_size);
784 char *fullpath = NULL;
785 const char *filename = NULL;
787 if (shell_working_directory == NULL)
792 ERROR_OUT_IF(argc != 1, PRINTK(
"touch [FILE]\n"),
return -1);
796 ERROR_OUT_IF(ret < 0, set_err(-ret,
"touch error"),
return -1);
798 fd = open(fullpath, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
802 perror(
"touch error");
810#define CP_BUF_SIZE 4096
836 char *src_fullpath = NULL;
837 char *dst_fullpath = NULL;
838 const char *src_filename = NULL;
839 char *dst_filepath = NULL;
841 const char *filename = NULL;
845 struct stat stat_buf;
848 if (shell_working_directory == NULL)
853 buf = (
char *)
malloc(CP_BUF_SIZE);
856 PRINTK(
"cp error: Out of memory!\n");
866 PRINTK(
"cp error: %s\n", strerror(errno));
873 ret = stat(src_fullpath, &stat_buf);
876 PRINTK(
"cp %s error: %s\n", src_fullpath, strerror(errno));
877 goto errout_with_srcpath;
879 src_mode = stat_buf.st_mode;
882 if (S_ISDIR(stat_buf.st_mode))
884 PRINTK(
"cp %s error: Source file can't be a directory.\n", src_fullpath);
885 goto errout_with_srcpath;
890 dst_fullpath = strdup(dst_filename);
891 if (dst_fullpath == NULL)
893 PRINTK(
"cp error: Out of memory.\n");
894 goto errout_with_srcpath;
899 ret = stat(dst_fullpath, &stat_buf);
904 if (S_ISDIR(stat_buf.st_mode))
908 src_filename = src_filepath;
911 filename = strchr(src_filename,
'/');
912 if (filename == NULL)
916 src_filename = filename + 1;
925 PRINTK(
"cp error. %s.\n", strerror(errno));
926 goto errout_with_path;
929 dst_fullpath = dst_filepath;
935 if (strcmp(src_fullpath, dst_fullpath) == 0)
937 PRINTK(
"cp error: '%s' and '%s' are the same file\n", src_fullpath, dst_fullpath);
938 goto errout_with_path;
944 src_fd = open(src_fullpath, O_RDONLY);
947 PRINTK(
"cp error: can't open %s. %s.\n", src_fullpath, strerror(errno));
948 goto errout_with_mutex;
951 dst_fd = open(dst_fullpath, O_CREAT | O_WRONLY | O_TRUNC, src_mode);
954 PRINTK(
"cp error: can't create %s. %s.\n", dst_fullpath, strerror(errno));
955 goto errout_with_srcfd;
960 (
void)memset_s(buf, CP_BUF_SIZE, 0, CP_BUF_SIZE);
961 r_size = read(src_fd, buf, CP_BUF_SIZE);
964 PRINTK(
"cp %s %s failed. %s.\n", src_fullpath, dst_fullpath, strerror(errno));
967 w_size = write(dst_fd, buf, r_size);
968 if (w_size != r_size)
970 PRINTK(
"cp %s %s failed. %s.\n", src_fullpath, dst_fullpath, strerror(errno));
974 while (r_size == CP_BUF_SIZE);
1002#define SEPARATOR_EOF_LEN 2
1022 struct dirent *dirent = NULL;
1023 struct stat stat_info;
1025 char *fullpath = NULL;
1028 (
void)memset_s(&stat_info,
sizeof(stat_info), 0,
sizeof(
struct stat));
1029 if (stat(pathname, &stat_info) != 0)
1034 if (S_ISREG(stat_info.st_mode) || S_ISLNK(stat_info.st_mode))
1036 return remove(pathname);
1038 d = opendir(pathname);
1045 dirent = readdir(d);
1050 if (strcmp(dirent->d_name,
"..") && strcmp(dirent->d_name,
"."))
1052 size_t fullpath_buf_size = strlen(pathname) + strlen(dirent->d_name) + SEPARATOR_EOF_LEN;
1053 if (fullpath_buf_size <= 0)
1055 PRINTK(
"buffer size is invalid!\n");
1059 fullpath = (
char *)
malloc(fullpath_buf_size);
1060 if (fullpath == NULL)
1062 PRINTK(
"malloc failure!\n");
1066 ret = snprintf_s(fullpath, fullpath_buf_size, fullpath_buf_size - 1,
"%s/%s", pathname, dirent->d_name);
1069 PRINTK(
"name is too long!\n");
1079 return rmdir(pathname);
1090 if (*filename ==
'*')
1092 while ((*filename ==
'*') || (*filename ==
'?'))
1097 if (*filename ==
'\0')
1102 while (*src !=
'\0' && !(*src == *filename))
1114 while ((ret != 0) && (*(++src) !=
'\0'))
1116 if (*src == *filename)
1125 if ((*src == *filename) || (*filename ==
'?'))
1133 while (*filename !=
'\0')
1135 if (*filename !=
'*')
1148 while (*filename !=
'\0')
1150 if ((*filename ==
'*') || (*filename ==
'?'))
1171 ret = unlink(fullpath);
1174 ret = rmdir(fullpath);
1181 PRINTK(
"%s ", fullpath);
1182 perror(
"rm/rmdir error!");
1186 PRINTK(
"%s match successful!delete!\n", fullpath);
1197 int len = strlen(fullpath);
1199 for (n = 0; n < len; n++)
1201 if (fullpath[n] ==
'/')
1206 *wait = fullpath + n + 1;
1211 else if (fullpath[n] ==
'*' || fullpath[n] ==
'?')
1217 *handle = fullpath + a + 1;
1220 *handle = fullpath + a + 1;
1230 char separator[] =
"/";
1231 char src[PATH_MAX] = {0};
1232 struct dirent *dirent = NULL;
1238 struct stat stat_buf;
1251 ret = stat(fullpath, &stat_buf);
1252 if (ret == 0 && (S_ISREG(stat_buf.st_mode) || S_ISLNK(stat_buf.st_mode)))
1264 d = (*f ==
'\0') ? opendir(
"/") : opendir(f);
1268 perror(
"opendir error");
1274 dirent = readdir(d);
1280 ret = strcpy_s(src, PATH_MAX, f);
1289 ret = strcat_s(src,
sizeof(src), separator);
1294 ret = strcat_s(src,
sizeof(src), dirent->d_name);
1307 ret = stat(src, &stat_buf);
1308 if (ret == 0 && (S_ISREG(stat_buf.st_mode) || S_ISLNK(stat_buf.st_mode)))
1311 if ((*(
int *)dst) > 1)
1328 ret = strcat_s(src,
sizeof(src), separator);
1333 ret = strcat_s(src,
sizeof(src), t);
1339 if (mark ==
CP_COUNT && (*(
int *)dst) > 1)
1347 if (deleteFlag == 1)
1389 const char *src = NULL;
1390 const char *dst = NULL;
1391 char *src_fullpath = NULL;
1392 char *dst_fullpath = NULL;
1393 struct stat stat_buf;
1396 if (shell_working_directory == NULL)
1401 ERROR_OUT_IF(argc < 2, PRINTK(
"cp [SOURCEFILE] [DESTFILE]\n"),
return -1);
1412 PRINTK(
"cp error:%s\n", strerror(errno));
1416 if (src[strlen(src) - 1] ==
'/')
1418 PRINTK(
"cp %s error: Source file can't be a directory.\n", src);
1419 goto errout_with_srcpath;
1428 PRINTK(
"cp error: can't open %s. %s\n", dst, strerror(errno));
1429 goto errout_with_srcpath;
1434 ret = stat(dst_fullpath, &stat_buf);
1439 if (dst[strlen(dst) - 1] ==
'/')
1441 PRINTK(
"cp error: %s, %s.\n", dst_fullpath, strerror(errno));
1442 goto errout_with_path;
1447 if ((S_ISREG(stat_buf.st_mode) || S_ISLNK(stat_buf.st_mode)) && dst[strlen(dst) - 1] ==
'/')
1449 PRINTK(
"cp error: %s is not a directory.\n", dst_fullpath);
1450 goto errout_with_path;
1456 if (ret < 0 || S_ISREG(stat_buf.st_mode) || S_ISLNK(stat_buf.st_mode))
1458 char *src_copy = strdup(src_fullpath);
1459 if (src_copy == NULL)
1461 PRINTK(
"cp error : Out of memory.\n");
1462 goto errout_with_path;
1468 PRINTK(
"cp error : %s is not a directory.\n", dst_fullpath);
1469 goto errout_with_path;
1491 PRINTK(
"rm [FILE] or rm [-r/-R] [FILE]\n");
1508 char *fullpath = NULL;
1509 const char *filename = NULL;
1511 if (shell_working_directory == NULL)
1516 ERROR_OUT_IF(argc != 1 && argc != 2,
print_rm_usage(),
return -1);
1520 ERROR_OUT_IF(strcmp(argv[0],
"-r") != 0 && strcmp(argv[0],
"-R") != 0,
print_rm_usage(),
return -1);
1524 ERROR_OUT_IF(ret < 0, set_err(-ret,
"rm error"),
return -1);
1539 ERROR_OUT_IF(ret < 0, set_err(-ret,
"rm error"),
return -1);
1547 ret = unlink(fullpath);
1585 char *fullpath = NULL;
1586 const char *filename = NULL;
1588 if (shell_working_directory == NULL)
1593 ERROR_OUT_IF(argc == 0, PRINTK(
"rmdir [DIRECTORY]\n"),
return -1);
1597 ERROR_OUT_IF(ret < 0, set_err(-ret,
"rmdir error"),
return -1);
1605 ret = rmdir(fullpath);
1609 PRINTK(
"rmdir %s failed. Error: %s.\n", fullpath, strerror(errno));
1640 ERROR_OUT_IF(argc > 0, PRINTK(
"\nUsage: sync\n"),
return -1);
1673 ERROR_OUT_IF(argc > 0, PRINTK(
"\nUsage: lsfd\n"),
return -1);
1693 for (; arg[i] != 0; i++)
1695 if (!isdigit(arg[i]))
1703#ifdef LOSCFG_KERNEL_SYSCALL
1732 ERROR_OUT_IF((argc != 2), PRINTK(
"su [uid_num] [gid_num]\n"),
return -1);
1734 PRINTK(
"check uid_num and gid_num is digit\n"),
return -1);
1736 su_uid = atoi(argv[0]);
1737 su_gid = atoi(argv[1]);
1739 ERROR_OUT_IF((su_uid < 0) || (su_uid > 60000) || (su_gid < 0) ||
1740 (su_gid > 60000), PRINTK(
"uid_num or gid_num out of range!they should be [0~60000]\n"),
return -1);
1765 char *fullpath = NULL;
1766 const char *filename = NULL;
1767 struct IATTR attr = {0};
1768 char *shell_working_directory = NULL;
1769 const char *p = NULL;
1772 ERROR_OUT_IF((argc != 2), PRINTK(
"Usage: chmod <MODE> [FILE]\n"),
return -1);
1777 if ((p[i] <=
'7') && (p[i] >=
'0'))
1779 mode = ((uint)mode << MODE_BIT) | (uint)(p[i] -
'0');
1783 PRINTK(
"check the input <MODE>\n");
1791 if (shell_working_directory == NULL)
1796 ERROR_OUT_IF(ret < 0, set_err(-ret,
"chmod error\n"),
return -1);
1800 ret =
chattr(fullpath, &attr);
1804 PRINTK(
"chmod error! %s\n", strerror(errno));
1824 char *fullpath = NULL;
1825 const char *filename = NULL;
1831 ERROR_OUT_IF(((argc != 2) && (argc != 3)), PRINTK(
"Usage: chown [OWNER] [GROUP] FILE\n"),
return -1);
1834 ERROR_OUT_IF((
checkNum(argv[0]) != 0), PRINTK(
"check OWNER is digit\n"),
return -1);
1835 owner = atoi(argv[0]);
1840 ERROR_OUT_IF((
checkNum(argv[0]) != 0), PRINTK(
"check OWNER is digit\n"),
return -1);
1841 ERROR_OUT_IF((
checkNum(argv[1]) != 0), PRINTK(
"check GROUP is digit\n"),
return -1);
1842 owner = atoi(argv[0]);
1843 group = atoi(argv[1]);
1859 if (shell_working_directory == NULL)
1864 ERROR_OUT_IF(ret < 0, set_err(-ret,
"chown error\n"),
return -1);
1866 ret =
chattr(fullpath, &attr);
1870 PRINTK(
"chown error! %s\n", strerror(errno));
1893 char *fullpath = NULL;
1894 const char *filename = NULL;
1898 ERROR_OUT_IF((argc != 2), PRINTK(
"Usage: chgrp GROUP FILE\n"),
return -1);
1899 ERROR_OUT_IF((
checkNum(argv[0]) != 0), PRINTK(
"check GROUP is digit\n"),
return -1);
1900 group = atoi(argv[0]);
1909 if (shell_working_directory == NULL) {
1913 ERROR_OUT_IF(ret < 0, set_err(-ret,
"chmod error"),
return -1);
1915 ret =
chattr(fullpath, &attr);
1918 PRINTK(
"chgrp error! %s\n", strerror(errno));
1926#ifdef LOSCFG_SHELL_CMD_DEBUG
1930#ifdef LOSCFG_KERNEL_SYSCALL
@ CMD_TYPE_EX
不支持标准命令参数输入,会把用户填写的命令关键字屏蔽掉,例如:输入ls /ramfs,传入给注册函数的参数只有/ramfs,而ls命令关键字并不会被传入。
char * OsShellGetWorkingDirectory(void)
void ls(const char *pathname)
list directory contents.
int chattr(const char *pathname, struct IATTR *attr)
int vfs_normalize_path(const char *directory, const char *filename, char **pathname)
LITE_OS_SEC_TEXT_MINOR VOID LOS_TaskUnlock(VOID)
Unlock the task scheduling.
struct tagTskInitParam TSK_INIT_PARAM_S
LITE_OS_SEC_TEXT_MINOR VOID LOS_TaskLock(VOID)
Lock the task scheduling.
LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskCreate(UINT32 *taskID, TSK_INIT_PARAM_S *initParam)
创建任务,并使该任务进入ready状态,如果就绪队列中没有更高优先级的任务,则运行该任务
LITE_OS_SEC_TEXT UINT32 LOS_TaskDelay(UINT32 tick)
任务延时等待,释放CPU,等待时间到期后该任务会重新进入ready状态
VOID *(* TSK_ENTRY_FUNC)(UINTPTR param1, UINTPTR param2, UINTPTR param3, UINTPTR param4)
Define the type of a task entrance function.
__attribute__((aligned(MMU_DESCRIPTOR_L1_SMALL_ENTRY_NUMBERS)))
int SysSetUserID(int uid)
void * malloc(size_t size)
动态分配内存块大小
void free(void *ptr)
释放ptr所指向的内存空间
int pthread_mutex_lock(pthread_mutex_t *mutex)
互斥锁加锁操作
int pthread_mutex_unlock(pthread_mutex_t *mutex)
解锁互斥锁
unsigned attr_chg_uid
用户ID
unsigned attr_chg_mode
确定了文件的类型,以及它的所有者、它的group、其它用户访问此文件的权限 (S_IWUSR | ...)
unsigned int attr_chg_valid
节点改变有效性 (CHG_MODE | CHG_UID | ... )
vnode并不包含文件名,因为 vnode和文件名是 1:N 的关系
TSK_ENTRY_FUNC pfnTaskEntry
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 ARG_NUM_0 ARG_NUM_2 ARG_NUM_1 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_4 ARG_NUM_5 ARG_NUM_6 ARG_NUM_3 ARG_NUM_5 ARG_NUM_7 ARG_NUM_1 ARG_NUM_4 ARG_NUM_5 ARG_NUM_4 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_7 ARG_NUM_3 ARG_NUM_3 ARG_NUM_3 ARG_NUM_7 ARG_NUM_3 ARG_NUM_2 char ARG_NUM_2 ARG_NUM_1 ARG_NUM_0 ARG_NUM_0 ARG_NUM_3 void ARG_NUM_1 ARG_NUM_0 unsigned ARG_NUM_0 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_5 ARG_NUM_3 ARG_NUM_3 ARG_NUM_4 ARG_NUM_1 ARG_NUM_1 ARG_NUM_3 ARG_NUM_2 ARG_NUM_1 ARG_NUM_4 ARG_NUM_4 ARG_NUM_5 ARG_NUM_3 ARG_NUM_2 void ARG_NUM_6 unsigned ARG_NUM_0 unsigned ARG_NUM_0 ARG_NUM_3 ARG_NUM_3 ARG_NUM_2 ARG_NUM_2 SysSetGroupID
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 ARG_NUM_0 ARG_NUM_2 ARG_NUM_1 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_4 ARG_NUM_5 ARG_NUM_6 ARG_NUM_3 ARG_NUM_5 ARG_NUM_7 ARG_NUM_1 ARG_NUM_4 ARG_NUM_5 ARG_NUM_4 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_7 ARG_NUM_3 ARG_NUM_3 ARG_NUM_3 ARG_NUM_7 ARG_NUM_3 ARG_NUM_2 char ARG_NUM_2 ARG_NUM_1 ARG_NUM_0 ARG_NUM_0 ARG_NUM_3 void ARG_NUM_1 ARG_NUM_0 unsigned ARG_NUM_0 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_5 ARG_NUM_3 ARG_NUM_3 ARG_NUM_4 ARG_NUM_1 ARG_NUM_1 ARG_NUM_3 ARG_NUM_2 ARG_NUM_1 ARG_NUM_4 ARG_NUM_4 ARG_NUM_5 ARG_NUM_3 ARG_NUM_2 void ARG_NUM_6 unsigned ARG_NUM_0 unsigned ARG_NUM_0 ARG_NUM_3 ARG_NUM_3 ARG_NUM_2 ARG_NUM_2 ARG_NUM_1 ARG_NUM_2 ARG_NUM_1 char ARG_NUM_0 ARG_NUM_4 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_4 ARG_NUM_5 ARG_NUM_2 ARG_NUM_3 ARG_NUM_3 ARG_NUM_3 ARG_NUM_3 ARG_NUM_6 ARG_NUM_6 ARG_NUM_5 ARG_NUM_3 void ARG_NUM_3 ARG_NUM_3 ARG_NUM_5 ARG_NUM_1 unsigned ARG_NUM_3 long
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 void
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 ARG_NUM_0 ARG_NUM_2 ARG_NUM_1 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_4 ARG_NUM_5 ARG_NUM_6 ARG_NUM_3 ARG_NUM_5 ARG_NUM_7 ARG_NUM_1 ARG_NUM_4 ARG_NUM_5 ARG_NUM_4 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_7 ARG_NUM_3 ARG_NUM_3 ARG_NUM_3 ARG_NUM_7 ARG_NUM_3 ARG_NUM_2 char ARG_NUM_2 ARG_NUM_1 ARG_NUM_0 ARG_NUM_0 ARG_NUM_3 void ARG_NUM_1 ARG_NUM_0 unsigned ARG_NUM_0 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_5 ARG_NUM_3 ARG_NUM_3 ARG_NUM_4 ARG_NUM_1 ARG_NUM_1 ARG_NUM_3 ARG_NUM_2 mode_t
u32_t(* CmdCallBackFunc)(u32_t argc, const char **argv)
int VnodeHold(void)
拿锁,封装互斥量
int VnodeLookup(const char *path, struct Vnode **vnode, uint32_t flags)
通过路径查询vnode节点
int chdir(const char *path)
static void print_mount_usage(void)
static int os_wildcard_extract_directory(char *fullpath, void *dst, wildcard_type mark)
int osShellCmdPwd(int argc, const char **argv)
static int os_wildcard_delete_file_or_dir(const char *fullpath, wildcard_type mark)
static int os_shell_cmd_do_cp(const char *src_filepath, const char *dst_filename)
int osShellCmdChown(int argc, const char **argv)
static int os_shell_cmd_do_rmdir(const char *pathname)
SHELLCMD_ENTRY(lsfd_shellcmd, CMD_TYPE_EX, "lsfd", XARGS,(CmdCallBackFunc) osShellCmdLsfd)
int osShellCmdRmdir(int argc, const char **argv)
int osShellCmdChgrp(int argc, const char **argv)
static unsigned long get_mountflags(const char *options)
int osShellCmdSu(int argc, const char **argv)
static void print_rm_usage(void)
int osShellCmdChmod(int argc, const char **argv)
int osShellCmdDoCatShow(UINTPTR arg)
static void print_statfs_usage(void)
static int os_is_containers_wildcard(const char *filename)
int osShellCmdLsfd(int argc, const char **argv)
int osShellCmdSync(int argc, const char **argv)
static int nfs_mount_ref(const char *server_ip_and_path, const char *mount_path, unsigned int uid, unsigned int gid) __attribute__((weakref("nfs_mount")))
static char * os_wildcard_split_path(char *fullpath, char **handle, char **wait)
pthread_mutex_t g_mutex_cp
int osShellCmdTouch(int argc, const char **argv)
int checkNum(const char *arg)
int osShellCmdUmount(int argc, const char **argv)
int osShellCmdMkdir(int argc, const char **argv)
static int os_wildcard_match(const char *src, const char *filename)
int osShellCmdStatfs(int argc, const char **argv)
int osShellCmdMount(int argc, const char **argv)
int osShellCmdCat(int argc, const char **argv)
int osShellCmdRm(int argc, const char **argv)
int osShellCmdCp(int argc, const char **argv)