Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Kernel Liteos A
提交
f10dd7c1
K
Kernel Liteos A
项目概览
OpenHarmony
/
Kernel Liteos A
1 年多 前同步成功
通知
464
Star
414
Fork
55
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel Liteos A
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
f10dd7c1
编写于
6月 03, 2021
作者:
L
li_zan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: A核proc文件系统在echo模式下新增write的功能
close: #I3T6MZ Signed-off-by:
N
li_zan
<
371442490@qq.com
>
上级
2067b2f6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
63 addition
and
1 deletion
+63
-1
fs/proc/os_adapt/proc_vfs.c
fs/proc/os_adapt/proc_vfs.c
+63
-1
未找到文件。
fs/proc/os_adapt/proc_vfs.c
浏览文件 @
f10dd7c1
...
...
@@ -74,6 +74,51 @@ static int EntryMatch(const char *name, int len, const struct ProcDirEntry *pn)
return
!
strncmp
(
name
,
pn
->
name
,
len
);
}
int
VfsProcfsTruncate
(
struct
Vnode
*
pVnode
,
off_t
len
)
{
return
0
;
}
int
VfsProcfsCreate
(
struct
Vnode
*
parent
,
const
char
*
name
,
int
mode
,
struct
Vnode
**
vnode
)
{
int
ret
;
struct
Vnode
*
vp
=
NULL
;
struct
ProcDirEntry
*
curEntry
=
NULL
;
struct
ProcDirEntry
*
parentEntry
=
VnodeToEntry
(
parent
);
if
(
parentEntry
==
NULL
)
{
return
-
ENODATA
;
}
ret
=
VnodeAlloc
(
&
g_procfsVops
,
&
vp
);
if
(
ret
!=
0
)
{
return
-
ENOMEM
;
}
curEntry
=
ProcCreate
(
name
,
mode
,
parentEntry
,
NULL
);
if
(
curEntry
==
NULL
)
{
VnodeFree
(
vp
);
return
-
ENODATA
;
}
vp
->
data
=
curEntry
;
vp
->
type
=
curEntry
->
type
;
if
(
vp
->
type
==
VNODE_TYPE_DIR
)
{
vp
->
mode
=
S_IFDIR
|
PROCFS_DEFAULT_MODE
;
}
else
{
vp
->
mode
=
S_IFREG
|
PROCFS_DEFAULT_MODE
;
}
vp
->
vop
=
parent
->
vop
;
vp
->
fop
=
parent
->
fop
;
vp
->
parent
=
parent
;
vp
->
originMount
=
parent
->
originMount
;
*
vnode
=
vp
;
return
LOS_OK
;
}
int
VfsProcfsRead
(
struct
file
*
filep
,
char
*
buffer
,
size_t
buflen
)
{
ssize_t
size
;
...
...
@@ -89,6 +134,21 @@ int VfsProcfsRead(struct file *filep, char *buffer, size_t buflen)
return
size
;
}
int
VfsProcfsWrite
(
struct
file
*
filep
,
const
char
*
buffer
,
size_t
buflen
)
{
ssize_t
size
;
struct
ProcDirEntry
*
entry
=
NULL
;
if
((
filep
==
NULL
)
||
(
filep
->
f_vnode
==
NULL
)
||
(
buffer
==
NULL
))
{
return
-
EINVAL
;
}
entry
=
VnodeToEntry
(
filep
->
f_vnode
);
size
=
(
ssize_t
)
WriteProcFile
(
entry
,
(
void
*
)
buffer
,
buflen
);
filep
->
f_pos
=
entry
->
pf
->
fPos
;
return
size
;
}
int
VfsProcfsLookup
(
struct
Vnode
*
parent
,
const
char
*
name
,
int
len
,
struct
Vnode
**
vpp
)
{
if
(
parent
==
NULL
||
name
==
NULL
||
len
<=
0
||
vpp
==
NULL
)
{
...
...
@@ -288,11 +348,13 @@ static struct VnodeOps g_procfsVops = {
.
Getattr
=
VfsProcfsStat
,
.
Readdir
=
VfsProcfsReaddir
,
.
Opendir
=
VfsProcfsOpendir
,
.
Closedir
=
VfsProcfsClosedir
.
Closedir
=
VfsProcfsClosedir
,
.
Truncate
=
VfsProcfsTruncate
};
static
struct
file_operations_vfs
g_procfsFops
=
{
.
read
=
VfsProcfsRead
,
.
write
=
VfsProcfsWrite
,
.
open
=
VfsProcfsOpen
,
.
close
=
VfsProcfsClose
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录