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

📄 fdesc.c

📁 java 到c的转换程序的原代码.对喜欢C程序而不懂JAVA程序的人很有帮助
💻 C
字号:
/* fdesc.c  - user-level file descriptor information for the system  * call wrappers */#include <sys/types.h>#include <sys/stat.h>#include <sys/time.h>#include <fcntl.h>#include <errno.h>#include "scout_semaphore.h"#define IS_OPEN (1 << 31)struct fdesc {    int f;              /* fcntl/open flags - we set the high order bit 			 * if the file has been opened */    struct Semaphore s; /* semaphore to wait on */};struct Semaphore selectSema;static int maxopen = -1;static struct fdesc files[FD_SETSIZE];void fdescInit() {    int i;    for (i = 0; i < FD_SETSIZE; i++) {	semaphoreInit(&files[i].s, 0);	files[i].f = 0;    }    semaphoreInit(&selectSema, 0);}int fdescGetFlags(unsigned int fd) {    if (fd > FD_SETSIZE) {	return -EBADF;    } else if ((files[fd].f & IS_OPEN) == 0) {	return -EBADF;    } else {	return files[fd].f & ~IS_OPEN;    }}/* The IS_OPEN flag is set through a seperate call to fdescOpen */int fdescSetFlags(unsigned int fd, unsigned int flags) {    if (fd > FD_SETSIZE) {	return -EBADF;    } else if ((files[fd].f & IS_OPEN) == 0) {	return -EBADF;    } else {	return files[fd].f |= (flags & ~IS_OPEN);    }}/* The IS_OPEN flag is set through a seperate call to fdescClose */int fdescClearFlags(unsigned int fd, unsigned int flags) {    if (fd > FD_SETSIZE) {	return -EBADF;    } else if ((files[fd].f & IS_OPEN) == 0) {	return -EBADF;    } else {	return files[fd].f &= (~flags | IS_OPEN);    }}/* Mark fd as an open file, with some initial flags */int fdescOpen(unsigned int fd, unsigned int flags) {    if (fd > FD_SETSIZE) {	return -EBADF;    } else if ((files[fd].f & IS_OPEN) != 0) {	return -EBADF;    } else {	if ((int)fd > maxopen)	    maxopen = fd;	return files[fd].f |= (flags | IS_OPEN);    }}/* Mark fd as an open file, with some initial flags */int fdescClose(unsigned int fd) {    if (fd > FD_SETSIZE) {	return -EBADF;    } else if ((files[fd].f & IS_OPEN) == 0) {	return -EBADF;    } else {	return files[fd].f = 0;    }}int fdescIsOpen(unsigned int fd) {    if (fd > FD_SETSIZE)	return 0;    else if (files[fd].f & IS_OPEN)	return 1;    else	return 0;}int fdescMaxOpen() {    int i;    for (i = maxopen; i >= 0; i--) {	if (fdescIsOpen(i))	    return i;    }    return -1;}/* Signal or wait for a change in a file descriptor */void fdescSignal(unsigned int fd){    if (fd > FD_SETSIZE) {	return;    }    semaphoreSignal(&files[fd].s);}void fdescWait(unsigned int fd){    if (fd > FD_SETSIZE) {	return;    }    semaphoreWait(&files[fd].s);}void fdescAnyWait() {    semaphoreWait(&selectSema);}void fdescAnySignal(){    semaphoreSignal(&selectSema);}/* Routines tro iterate through all open file descriptors */int fdescGetFirstOpen(){    int i;    for (i = 0; i < FD_SETSIZE; i++)	if ((files[i].f & IS_OPEN) != 0)	    return i;    return -1;}int fdescGetNextOpen(int curr) {    int i;    for (i = curr + 1; i < FD_SETSIZE; i++)	if ((files[i].f & IS_OPEN) != 0)	    return i;    return -1;}

⌨️ 快捷键说明

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