fdopen.c

来自「minix操作系统最新版本(3.1.1)的源代码」· C语言 代码 · 共 74 行

C
74
字号
/* * fdopen - convert a (UNIX) file descriptor into a FILE pointer *//* $Header: /cvsup/minix/src/lib/other/fdopen.c,v 1.2 2005/09/06 10:15:57 beng Exp $ */#include	<stdlib.h>#include	"../stdio/loc_incl.h"#include	<stdio.h>#include	<sys/stat.h>FILE *fdopen(fd, mode)int fd;_CONST char *mode;{	register int i;	struct stat st;	FILE *stream;	int flags = 0;	if (fd < 0) return (FILE *)NULL;	for (i = 0; __iotab[i] != 0 ; i++) 		if (i >= FOPEN_MAX-1)			return (FILE *)NULL;	switch(*mode++) {	case 'r':		flags |= _IOREAD | _IOREADING;		break;	case 'a':		flags |= _IOAPPEND;	case 'w':		flags |= _IOWRITE | _IOWRITING;		break;	default:		return (FILE *)NULL;	}	while(*mode) {		switch(*mode++) {		case 'b':			continue;		case '+':			flags |= _IOREAD | _IOWRITE;			continue;		/* The sequence may be followed by aditional characters */		default:			break;		}		break;	}	if ( fstat( fd, &st ) < 0 ) {		return (FILE *)NULL;	}		if ( st.st_mode & S_IFIFO ) {		flags |= _IOFIFO;	}		if ((stream = (FILE *) malloc(sizeof(FILE))) == NULL) {		return (FILE *)NULL;	}	if ((flags & _IOREAD) && (flags & _IOWRITE))		flags &= ~(_IOREADING | _IOWRITING);	stream->_count = 0;	stream->_fd = fd;	stream->_flags = flags;	stream->_buf = NULL;	__iotab[i] = stream;	return stream;}

⌨️ 快捷键说明

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