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

📄 iocall.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <thread.h>#include "threadimpl.h"longiocall(Ioproc *io, long (*op)(va_list*), ...){	int ret, inted;	Ioproc *msg;	if(send(io->c, &io) == -1){		werrstr("interrupted");		return -1;	}	assert(!io->inuse);	io->inuse = 1;	io->op = op;	va_start(io->arg, op);	msg = io;	inted = 0;	while(send(io->creply, &msg) == -1){		msg = nil;		inted = 1;	}	if(inted){		werrstr("interrupted");		return -1;	}	/*	 * If we get interrupted, we have to stick around so that	 * the IO proc has someone to talk to.  Send it an interrupt	 * and try again.	 */	inted = 0;	while(recv(io->creply, nil) == -1){		inted = 1;		iointerrupt(io);	}	USED(inted);	va_end(io->arg);	ret = io->ret;	if(ret < 0)		errstr(io->err, sizeof io->err);	io->inuse = 0;	/* release resources */	while(send(io->creply, &io) == -1)		;	return ret;}

⌨️ 快捷键说明

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