⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fopen.c

📁 在x86平台上运行不可信任代码的sandbox。
💻 C
字号:
#include <stdio.h>#include <string.h>#include <errno.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include "ioprivate.h"FILE *fopen(const char *name, const char *mode){	int fd, umode, seek, append;	FILE *f;	umode = 0;	seek = 0;	append = 0;	if (mode[0] == 'r' && mode[1] == '+') {		umode = O_RDWR;	} else if (mode[0] == 'r') {		umode = O_RDONLY;	} else if (mode[0] == 'w' && mode[1] == '+') {		umode = O_RDWR|O_CREAT|O_TRUNC;	} else if (mode[0] == 'w') {		umode = O_WRONLY|O_CREAT|O_TRUNC;	} else if (mode[0] == 'a' && mode[1] == '+') {		umode = O_RDWR|O_CREAT;		append = 1;	} else if (mode[0] == 'a') {		umode = O_WRONLY|O_CREAT;		seek = 1;	} else {		errno = EINVAL;		return NULL;	}	f = malloc(sizeof *f);	if (f == NULL)		return NULL;	memset(f, 0, sizeof *f);	f->ibuf = malloc(BUFSIZ);	f->obuf = malloc(BUFSIZ);	if (f->ibuf == NULL || f->obuf == NULL) {	freef:		free(f->ibuf);		free(f->obuf);		free(f);		return NULL;	}	f->imax = BUFSIZ;	f->omax = BUFSIZ;		if ((fd = open(name, umode, 0666)) < 0)		goto freef;			if (seek)		lseek(fd, 0, 2);	f->append = append;	f->fd = fd;	return f;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -