Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
a0fa7973
提交
a0fa7973
4月 10, 2012
创建
作者:
Silas Boyd-Wickizer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Run sh commands specified on the host command line.
E.g. make RUN="avar on; ls; avar off; halt"
上级
dca2a740
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
54 行增加
和
3 行删除
+54
-3
Makefile
Makefile
+3
-1
init.cc
bin/init.cc
+26
-0
sh.cc
bin/sh.cc
+25
-2
没有找到文件。
Makefile
浏览文件 @
a0fa7973
...
@@ -8,6 +8,7 @@ QEMUSRC ?= ../mtrace
...
@@ -8,6 +8,7 @@ QEMUSRC ?= ../mtrace
MTRACE
?=
$(QEMU)
MTRACE
?=
$(QEMU)
HW
?=
qemu
HW
?=
qemu
EXCEPTIONS
?=
y
EXCEPTIONS
?=
y
RUN
?=
$(empty)
O
=
o.
$(HW)
O
=
o.
$(HW)
ifdef
USE_CLANG
ifdef
USE_CLANG
...
@@ -97,7 +98,8 @@ $(O)/fs.img: $(O)/tools/mkfs README $(UPROGS)
...
@@ -97,7 +98,8 @@ $(O)/fs.img: $(O)/tools/mkfs README $(UPROGS)
##
##
QEMUOPTS
=
-smp
$(QEMUSMP)
-m
512
-serial
mon:stdio
-nographic
\
QEMUOPTS
=
-smp
$(QEMUSMP)
-m
512
-serial
mon:stdio
-nographic
\
-net
user
-net
nic,model
=
e1000
\
-net
user
-net
nic,model
=
e1000
\
-redir
tcp:2323::23
-redir
tcp:8080::80
-redir
tcp:2323::23
-redir
tcp:8080::80
\
$
(
if
$(RUN)
,-append
"
\$
$ $(RUN)
"
,
)
qemu
:
$(KERN)
qemu
:
$(KERN)
$(QEMU)
$(QEMUOPTS)
-kernel
$(KERN)
$(QEMU)
$(QEMUOPTS)
-kernel
$(KERN)
...
...
bin/init.cc
浏览文件 @
a0fa7973
...
@@ -43,6 +43,30 @@ startone(const char **argv)
...
@@ -43,6 +43,30 @@ startone(const char **argv)
return
pid
;
return
pid
;
}
}
static
void
runcmdline
(
void
)
{
const
char
*
argv
[
3
]
=
{
"sh"
,
0
,
0
};
char
buf
[
256
];
char
*
b
;
long
r
;
int
fd
;
fd
=
open
(
"/dev/cmdline"
,
O_RDONLY
);
if
(
fd
<
0
)
return
;
r
=
read
(
fd
,
buf
,
sizeof
(
buf
)
-
1
);
if
(
r
<
0
)
return
;
buf
[
r
]
=
0
;
if
((
b
=
strchr
(
buf
,
'$'
)))
{
argv
[
1
]
=
b
+
1
;
startone
(
argv
);
}
}
int
int
main
(
void
)
main
(
void
)
{
{
...
@@ -63,6 +87,8 @@ main(void)
...
@@ -63,6 +87,8 @@ main(void)
for
(
u32
i
=
0
;
i
<
NELEM
(
app_argv
);
i
++
)
for
(
u32
i
=
0
;
i
<
NELEM
(
app_argv
);
i
++
)
startone
(
app_argv
[
i
]);
startone
(
app_argv
[
i
]);
runcmdline
();
for
(;;){
for
(;;){
pid
=
startone
(
sh_argv
);
pid
=
startone
(
sh_argv
);
while
((
wpid
=
wait
())
>=
0
&&
wpid
!=
pid
)
while
((
wpid
=
wait
())
>=
0
&&
wpid
!=
pid
)
...
...
bin/sh.cc
浏览文件 @
a0fa7973
...
@@ -142,7 +142,7 @@ getcmd(char *buf, int nbuf)
...
@@ -142,7 +142,7 @@ getcmd(char *buf, int nbuf)
}
}
int
int
main
(
void
)
main
(
int
ac
,
char
**
av
)
{
{
static
char
buf
[
100
];
static
char
buf
[
100
];
int
fd
;
int
fd
;
...
@@ -154,7 +154,30 @@ main(void)
...
@@ -154,7 +154,30 @@ main(void)
break
;
break
;
}
}
}
}
// If args, concatenate them parse as a command.
if
(
ac
>
1
)
{
char
*
b
=
buf
;
char
*
e
=
b
+
sizeof
(
buf
);
for
(
int
i
=
1
;
i
<
ac
;
i
++
)
{
int
n
;
n
=
strlen
(
av
[
i
]);
if
(
b
+
n
+
1
>
e
)
die
(
"sh: too long"
);
strcpy
(
b
,
av
[
i
]);
b
+=
n
;
if
(
b
+
1
+
1
>
e
)
die
(
"sh: too long"
);
strcpy
(
b
,
" "
);
b
++
;
}
if
(
fork1
()
==
0
)
runcmd
(
parsecmd
(
buf
));
wait
();
exit
();
}
// Read and run input commands.
// Read and run input commands.
while
(
getcmd
(
buf
,
sizeof
(
buf
))
>=
0
){
while
(
getcmd
(
buf
,
sizeof
(
buf
))
>=
0
){
if
(
buf
[
0
]
==
'c'
&&
buf
[
1
]
==
'd'
&&
buf
[
2
]
==
' '
){
if
(
buf
[
0
]
==
'c'
&&
buf
[
1
]
==
'd'
&&
buf
[
2
]
==
' '
){
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论