更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
proc_shellcmd.c 文件参考

浏览源代码.

函数

int OsShellCmdWriteProc (int argc, char **argv)
 
 SHELLCMD_ENTRY (writeproc_shellcmd, CMD_TYPE_EX, "writeproc", XARGS,(CmdCallBackFunc) OsShellCmdWriteProc)
 

函数说明

◆ OsShellCmdWriteProc()

int OsShellCmdWriteProc ( int  argc,
char **  argv 
)

proc/uptime

在文件 proc_shellcmd.c82 行定义.

83{
84 int i;
85 int ret;
86 const char *path = NULL;
87 const char *value = NULL;
88 unsigned int len;
89 struct ProcDirEntry *handle = NULL;
90 char realPath[PATH_MAX] = {'\0'};
91 const char *rootProcDir = "/proc/";
92
93 if (argc == WRITEPROC_ARGC) {//argv[0] = ">>"
94 value = argv[0];//test
95 path = argv[2];///proc/uptime
96 len = strlen(value) + 1; /* +1:add the \0 */
97 if (strncmp(argv[1], ">>", strlen(">>")) == 0) { // 第二个参数必须得是 >>
98 if ((realpath(path, realPath) == NULL) || (strncmp(realPath, rootProcDir, strlen(rootProcDir)) != 0)) {
99 PRINT_ERR("No such file or directory\n");
100 return PROC_ERROR;
101 }
102
103 handle = OpenProcFile(realPath, O_TRUNC);//打开 proc 文件
104 if (handle == NULL) {
105 PRINT_ERR("No such file or directory\n");
106 return PROC_ERROR;
107 }
108
109 ret = WriteProcFile(handle, value, len);
110 if (ret < 0) {
111 (void)CloseProcFile(handle);
112 PRINT_ERR("write error\n");
113 return PROC_ERROR;
114 }
115 for (i = 0; i < argc; i++) {
116 PRINTK("%s%s", i > 0 ? " " : "", argv[i]);
117 }
118 PRINTK("\n");
119 (void)CloseProcFile(handle);
120 return LOS_OK;
121 }
122 }
123 PRINT_ERR("writeproc [data] [>>] [path]\n");
124 return PROC_ERROR;
125}
int CloseProcFile(struct ProcDirEntry *pde)
close a proc node
Definition: proc_file.c:663
struct ProcDirEntry * OpenProcFile(const char *fileName, int flags,...)
open a proc node
Definition: proc_file.c:553
int WriteProcFile(struct ProcDirEntry *pde, const void *buf, size_t len)
write a proc node
Definition: proc_file.c:601
proc 目录/文件项, @notethinking 直接叫 ProcEntry不香吗 ? 操作 /proc的 真正结构体
Definition: proc_fs.h:101
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
char * realpath(const char *path, char *resolved_path)
Definition: vfs_other.c:651
函数调用图:

◆ SHELLCMD_ENTRY()

SHELLCMD_ENTRY ( writeproc_shellcmd  ,
CMD_TYPE_EX  ,
"writeproc"  ,
XARGS  ,
(CmdCallBackFunc OsShellCmdWriteProc 
)