iocall.c
来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 53 行
C
53 行
#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 + =
减小字号Ctrl + -
显示快捷键?