Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
939f9ede
提交
939f9ede
8月 09, 2006
创建
作者:
kaashoek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
iread for T_DEV
O_RDWR, etc. create file
上级
2601de00
显示空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
40 行增加
和
11 行删除
+40
-11
fs.c
fs.c
+8
-0
fs.h
fs.h
+4
-0
ide.c
ide.c
+1
-1
syscall.c
syscall.c
+18
-9
userfs.c
userfs.c
+9
-1
没有找到文件。
fs.c
浏览文件 @
939f9ede
...
...
@@ -239,6 +239,12 @@ readi(struct inode *ip, void *xdst, uint off, uint n)
uint
target
=
n
,
n1
;
struct
buf
*
bp
;
if
(
ip
->
type
==
T_DEV
)
{
if
(
ip
->
major
<
0
||
ip
->
major
>=
NDEV
||
!
devsw
[
ip
->
major
].
d_read
)
return
-
1
;
return
devsw
[
ip
->
major
].
d_read
(
ip
->
minor
,
xdst
,
n
);
}
while
(
n
>
0
&&
off
<
ip
->
size
){
bp
=
bread
(
ip
->
dev
,
bmap
(
ip
,
off
/
BSIZE
));
n1
=
min
(
n
,
ip
->
size
-
off
);
...
...
@@ -257,6 +263,8 @@ int
writei
(
struct
inode
*
ip
,
void
*
addr
,
uint
n
)
{
if
(
ip
->
type
==
T_DEV
)
{
if
(
ip
->
major
<
0
||
ip
->
major
>=
NDEV
||
!
devsw
[
ip
->
major
].
d_write
)
return
-
1
;
return
devsw
[
ip
->
major
].
d_write
(
ip
->
minor
,
addr
,
n
);
}
else
{
panic
(
"writei: unknown type
\n
"
);
...
...
fs.h
浏览文件 @
939f9ede
...
...
@@ -37,3 +37,7 @@ struct dirent {
char
name
[
DIRSIZ
];
};
#define O_CREATE 0x200
#define O_RDONLY 0x000
#define O_WRONLY 0x001
#define O_RDWR 0x002
ide.c
浏览文件 @
939f9ede
...
...
@@ -58,7 +58,7 @@ void
ide_intr
(
void
)
{
acquire
(
&
ide_lock
);
cprintf
(
"cpu%d: ide_intr
\n
"
,
cpu
());
//
cprintf("cpu%d: ide_intr\n", cpu());
wakeup
(
&
request
[
tail
]);
release
(
&
ide_lock
);
lapic_eoi
();
...
...
syscall.c
浏览文件 @
939f9ede
...
...
@@ -252,18 +252,28 @@ sys_open(void)
uint
arg0
,
arg1
;
int
ufd
;
struct
fd
*
fd
;
struct
inode
*
dp
;
int
l
;
if
(
fetcharg
(
0
,
&
arg0
)
<
0
||
fetcharg
(
1
,
&
arg1
)
<
0
)
return
-
1
;
if
(
checkstring
(
arg0
)
<
0
)
if
((
l
=
checkstring
(
arg0
))
<
0
)
return
-
1
;
if
((
ip
=
namei
(
cp
->
mem
+
arg0
))
==
0
)
{
if
(
arg1
&
O_CREATE
)
{
if
(
l
>=
DIRSIZ
)
return
-
1
;
dp
=
iget
(
rootdev
,
1
);
// XXX should parse name
if
(
dp
->
type
!=
T_DIR
)
return
-
1
;
if
((
ip
=
namei
(
cp
->
mem
+
arg
0
))
==
0
)
if
((
ip
=
mknod
(
dp
,
cp
->
mem
+
arg0
,
T_FILE
,
0
,
0
))
==
0
)
return
-
1
;
}
else
return
-
1
;
}
if
((
fd
=
fd_alloc
())
==
0
){
iput
(
ip
);
return
-
1
;
}
if
((
ufd
=
fd_ualloc
())
<
0
){
iput
(
ip
);
fd_close
(
fd
);
...
...
@@ -272,9 +282,12 @@ sys_open(void)
iunlock
(
ip
);
fd
->
type
=
FD_FILE
;
if
(
arg1
)
{
if
(
arg1
&
O_RDWR
)
{
fd
->
readable
=
1
;
fd
->
writeable
=
1
;
}
else
if
(
arg1
&
O_WRONLY
)
{
fd
->
readable
=
0
;
fd
->
writeable
=
1
;
}
else
{
fd
->
readable
=
1
;
fd
->
writeable
=
0
;
...
...
@@ -304,13 +317,9 @@ sys_mknod(void)
if
(
l
>=
DIRSIZ
)
return
-
1
;
dp
=
iget
(
rootdev
,
1
);
cprintf
(
"root inode type: %d
\n
"
,
dp
->
type
);
dp
=
iget
(
rootdev
,
1
);
// XXX should parse name
if
(
dp
->
type
!=
T_DIR
)
return
-
1
;
nip
=
mknod
(
dp
,
cp
->
mem
+
arg0
,
(
short
)
arg1
,
(
short
)
arg2
,
(
short
)
arg3
);
...
...
userfs.c
浏览文件 @
939f9ede
...
...
@@ -20,7 +20,7 @@ main(void)
puts
(
"mknod failed
\n
"
);
else
puts
(
"made a node
\n
"
);
fd
=
open
(
"console"
,
1
);
fd
=
open
(
"console"
,
O_WRONLY
);
if
(
fd
>=
0
){
puts
(
"open console ok
\n
"
);
}
else
{
...
...
@@ -45,6 +45,14 @@ main(void)
}
else
{
puts
(
"open doesnotexist failed
\n
"
);
}
fd
=
open
(
"doesnotexist"
,
O_CREATE
|
O_RDWR
);
if
(
fd
>=
0
){
puts
(
"creat doesnotexist succeeded
\n
"
);
}
else
{
puts
(
"error: creat doesnotexist failed!
\n
"
);
}
close
(
fd
);
//exec("echo", echo_args);
exec
(
"cat"
,
cat_args
);
return
0
;
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论