open.c
来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 63 行
C
63 行
#include <errno.h>#include <stdarg.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include "lib.h"#include <sys/stat.h>#include "sys9.h"/* * O_NOCTTY has no effect */intopen(const char *path, int flags, ...){ int n; long f; int mode; Fdinfo *fi; va_list va; struct stat sbuf; f = flags&O_ACCMODE; if(flags&O_CREAT){ if(access(path, 0) >= 0){ if(flags&O_EXCL){ errno = EEXIST; return -1; }else{ if((flags&O_TRUNC)&&(flags&(O_RDWR|O_WRONLY))) f |= 16; n = _OPEN(path, f); } }else{ va_start(va, flags); mode = va_arg(va, int); va_end(va); n = _CREATE(path, f, mode&0777); } if(n < 0) _syserrno(); }else{ if((flags&O_TRUNC)&&(flags&(O_RDWR|O_WRONLY))) f |= 16; n = _OPEN(path, f); if(n < 0) _syserrno(); } if(n >= 0){ fi = &_fdinfo[n]; fi->flags = FD_ISOPEN; fi->oflags = flags&(O_ACCMODE|O_NONBLOCK|O_APPEND); fi->uid = -2; fi->gid = -2; fi->name = malloc(strlen(path)+1); if(fi->name) strcpy(fi->name, path); if(fi->oflags&O_APPEND) _SEEK(n, 0, 2); } return n;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?