0%

6-S081-lec1

6-S081-lec1

写在前面:mit的6.828课程在2020年被拆分为了两部分,一部分是6.S081,另一部分仍然被称为6.828。其中6.S081是基础部分,适合高年级本科生学习,在有了6.S081的基础后进一步学习6.828会更顺利。

网址:6.S081

系统调用介绍

Eg1: copy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// copy.c: copy input to output.

#include "kernel/types.h"
#include "user/user.h"

int
main()
{
char buf[64];

while(1){
int n = read(0, buf, sizeof(buf));
if(n <= 0)
break;
write(1, buf, n);
}

exit(0);
}

read

read()作用是从指定的文件描述符读取一段数据至内存,共有三个参数。

  1. 第一个参数是文件描述符,指向一个之前打开的文件。默认情况下,文件描述符0连接到console的输入,文件描述符1连接到console的输出。

  2. 第二个参数是指向某段内存的指针,表示将文件描述符处读到的数据存入。

  3. 第三个参数是代码读取的最大长度。

read的返回值是读到的字节数。read如果读到文件尾没有更多内容,则返回0。如果出现错误如fd不存在则返回-1。

write

write()作用是从内存中读取一段数据并存至文件描述符,参数与read一致。

open

Eg2: open

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// open.c: create a file, write to it.

#include "kernel/types.h"
#include "user/user.h"
#include "kernel/fcntl.h"

int
main()
{
int fd = open("output.txt", O_WRONLY | O_CREATE);
write(fd, "ooo\n", 4);

exit(0);
}

open()的作用是创建一个文件并向文件写入内容。

open返回的文件描述符是一个小数字

systemcall大全如下:

image-20210615154704582