《操作系统》的实验代码。
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 

68 rader
1.3 KiB

#include <defs.h>
#include <string.h>
#include <syscall.h>
#include <stdio.h>
#include <stat.h>
#include <error.h>
#include <unistd.h>
int
open(const char *path, uint32_t open_flags) {
return sys_open(path, open_flags);
}
int
close(int fd) {
return sys_close(fd);
}
int
read(int fd, void *base, size_t len) {
return sys_read(fd, base, len);
}
int
write(int fd, void *base, size_t len) {
return sys_write(fd, base, len);
}
int
seek(int fd, off_t pos, int whence) {
return sys_seek(fd, pos, whence);
}
int
fstat(int fd, struct stat *stat) {
return sys_fstat(fd, stat);
}
int
fsync(int fd) {
return sys_fsync(fd);
}
int
dup2(int fd1, int fd2) {
return sys_dup(fd1, fd2);
}
static char
transmode(struct stat *stat) {
uint32_t mode = stat->st_mode;
if (S_ISREG(mode)) return 'r';
if (S_ISDIR(mode)) return 'd';
if (S_ISLNK(mode)) return 'l';
if (S_ISCHR(mode)) return 'c';
if (S_ISBLK(mode)) return 'b';
return '-';
}
void
print_stat(const char *name, int fd, struct stat *stat) {
cprintf("[%03d] %s\n", fd, name);
cprintf(" mode : %c\n", transmode(stat));
cprintf(" links : %lu\n", stat->st_nlinks);
cprintf(" blocks : %lu\n", stat->st_blocks);
cprintf(" size : %lu\n", stat->st_size);
}