37#include <sys/syscall.h>
63 struct sched_param param = { 0 };
66 ret = sched_getparam(
getpid(), ¶m);
71 param.sched_priority = SHELL_PROCESS_PRIORITY_INIT;
73 ret = sched_setparam(
getpid(), ¶m);
98 if (strncmp(argv[0], SHELL_EXEC_COMMAND, SHELL_EXEC_COMMAND_BYTES) == 0) {
101 for (i = 0; argv[i]; i++) {
102 len += strlen(argv[i]);
105 cmdLine = (
char *)
malloc(len);
109 errno_t ret1 = memset_s(cmdLine, len, 0, len);
115 for (j = 0; j < i; j++) {
116 (
void)strcat_s(cmdLine, len, argv[j]);
117 (
void)strcat_s(cmdLine, len,
" ");
120 cmdLine[len - 2] =
'\0';
121 ret = syscall(__NR_shellexec, argv[0], cmdLine);
129 while (waitpid(-1, NULL, WNOHANG) > 0) {
146 setbuf(stdout, NULL);
149 if (shellCB == NULL) {
int main(int argc, char **argv)
unsigned int OsShellKeyInit(ShellCB *shellCB)
shell 命令初始化
void OsShellKeyDeInit(CmdKeyLink *cmdKeyLink)
shell的析构函数
void ShellEntry(ShellCB *shellCB)
void ChildExec(const char *cmdName, char *const paramArray[], bool foreground)
int ShellTaskInit(ShellCB *shellCB)
给控制台注册一个shell客户端任务
static void ShellSigChildHook(int sig)
static int OsShellCreateTask(ShellCB *shellCB)
ShellCB * OsGetShellCb()
获取shell控制块
void ShellDeinit(ShellCB *shellCB)
static int DoShellExec(char **argv)
void * malloc(size_t size)
动态分配内存块大小
void free(void *ptr)
释放ptr所指向的内存空间
pid_t getpid(void)
获取当前任务ID
pthread_t pthread_self(void)
int pthread_mutex_destroy(pthread_mutex_t *mutex)
销毁互斥锁
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexAttr)
初始化互斥锁。 如果 mutexAttr 为 NULL,则使用默认属性。
int sem_init(sem_t *sem, int shared, unsigned int value)
pthread_t shellEntryHandle
shell客户端任务
void * cmdKeyLink
命令链表,所有敲过的命令链表
void * cmdHistoryKeyLink
命令的历史记录链表,去重,10个
pthread_mutex_t historyMutex
操作cmdHistoryKeyLink的互斥量
char shellWorkingDirectory[PATH_MAX]
shell工作目录
pthread_mutex_t keyMutex
操作cmdKeyLink的互斥量
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