/* * fopen.c */ #include #include #include FILE *fopen(const char *file, const char *mode) { int flags = O_RDONLY; int plus = 0; int fd; while (*mode) { switch (*mode) { case 'r': flags = O_RDONLY; break; case 'w': flags = O_WRONLY | O_CREAT | O_TRUNC; break; case 'a': flags = O_WRONLY | O_CREAT | O_APPEND; break; case '+': plus = 1; break; } mode++; } if (plus) { flags = (flags & ~(O_RDONLY | O_WRONLY)) | O_RDWR; } fd = open(file, flags, 0666); if (fd < 0) return NULL; else return fdopen(fd, mode); }