本文整理汇总了C++中cclose函数的典型用法代码示例。如果您正苦于以下问题:C++ cclose函数的具体用法?C++ cclose怎么用?C++ cclose使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cclose函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: setswapchan
void
setswapchan(Chan *c)
{
uchar dirbuf[sizeof(Dir)+100];
Dir d;
int n;
if(swapimage.c) {
if(swapalloc.free != conf.nswap){
cclose(c);
error(Einuse);
}
cclose(swapimage.c);
}
/*
* if this isn't a file, set the swap space
* to be at most the size of the partition
*/
if(devtab[c->type]->dc != L'M'){
n = devtab[c->type]->stat(c, dirbuf, sizeof dirbuf);
if(n <= 0){
cclose(c);
error("stat failed in setswapchan");
}
convM2D(dirbuf, n, &d, nil);
if(d.length < conf.nswap*BY2PG){
conf.nswap = d.length/BY2PG;
swapalloc.top = &swapalloc.swmap[conf.nswap];
swapalloc.free = conf.nswap;
}
}
swapimage.c = c;
}
开发者ID:Zabrane,项目名称:smalltable,代码行数:35,代码来源:swap.c
示例2: sys_fstat
long
sys_fstat(ulong *arg)
{
Chan *c;
char *name;
uint l;
uchar buf[128]; /* old DIRLEN plus a little should be plenty */
char strs[128];
Dir d;
char old[] = "old fstat system call - recompile";
validaddr(arg[1], 116, 1);
c = fdtochan(arg[0], -1, 0, 1);
if(waserror()){
cclose(c);
nexterror();
}
l = devtab[c->type]->stat(c, buf, sizeof buf);
/* buf contains a new stat buf; convert to old. yuck. */
if(l <= BIT16SZ) /* buffer too small; time to face reality */
error(old);
name = pathlast(c->path);
if(name)
l = dirsetname(name, strlen(name), buf, l, sizeof buf);
l = convM2D(buf, l, &d, strs);
if(l == 0)
error(old);
packoldstat((uchar*)arg[1], &d);
poperror();
cclose(c);
return 0;
}
开发者ID:Akheon23,项目名称:nix-os,代码行数:33,代码来源:sysfile.c
示例3: vbecall
static void
vbecall(Ureg *u)
{
Proc *up = externup();
Chan *creg, *cmem;
uint32_t pa;
cmem = namec("/dev/realmodemem", Aopen, ORDWR, 0);
if(waserror()){
cclose(cmem);
nexterror();
}
creg = namec("/dev/realmode", Aopen, ORDWR, 0);
if(waserror()){
cclose(creg);
nexterror();
}
pa = PADDR(RMBUF);
cmem->dev->write(cmem, modebuf, sizeof modebuf, pa);
u->trap = 0x10;
print("vbecall: sizeof u is %d\n", sizeof *u);
creg->dev->write(creg, u, sizeof *u, 0);
creg->dev->read(creg, u, sizeof *u, 0);
if((u->ax&0xFFFF) != 0x004F)
error("vesa bios error");
cmem->dev->read(cmem, modebuf, sizeof modebuf, pa);
poperror();
cclose(creg);
poperror();
cclose(cmem);
}
开发者ID:Harvey-OS,项目名称:harvey,代码行数:33,代码来源:vgavesa.c
示例4: dupread
static long
dupread(Chan *c, void *va, long n, vlong offset)
{
char *a = va;
char buf[256];
int fd, twicefd;
if(c->qid.type == QTDIR)
return devdirread(c, a, n, nil, 0, dupgen);
twicefd = c->qid.path - 1;
fd = twicefd/2;
if(twicefd & 1){
c = fdtochan(up->env->fgrp, fd, -1, 0, 1);
if(waserror()){
cclose(c);
nexterror();
}
progfdprint(c, fd, 0, buf, sizeof buf);
poperror();
cclose(c);
return readstr((ulong)offset, va, n, buf);
}
panic("dupread");
return 0;
}
开发者ID:8l,项目名称:inferno,代码行数:25,代码来源:devdup.c
示例5: _syspipe
long
_syspipe(int fd[2])
{
Chan *c[2];
Dev *d;
static char *datastr[] = {"data", "data1"};
d = devtab[devno('|', 0)];
c[0] = namec("#|", Atodir, 0, 0);
c[1] = 0;
fd[0] = -1;
fd[1] = -1;
if(waserror()){
cclose(c[0]);
if(c[1])
cclose(c[1]);
nexterror();
}
c[1] = cclone(c[0]);
if(walk(&c[0], datastr+0, 1, 1, nil) < 0)
error(Egreg);
if(walk(&c[1], datastr+1, 1, 1, nil) < 0)
error(Egreg);
c[0] = d->open(c[0], ORDWR);
c[1] = d->open(c[1], ORDWR);
if(newfd2(fd, c) < 0)
error(Enofd);
poperror();
return 0;
}
开发者ID:99years,项目名称:plan9,代码行数:32,代码来源:sysfile.c
示例6: sysfversion
long
sysfversion(ulong *arg)
{
char *vers;
uint arglen, m, msize;
Chan *c;
msize = arg[1];
vers = (char*)arg[2];
arglen = arg[3];
validaddr(arg[2], arglen, 1);
/* check there's a NUL in the version string */
if(arglen==0 || memchr(vers, 0, arglen)==0)
error(Ebadarg);
c = fdtochan(arg[0], ORDWR, 0, 1);
if(waserror()){
cclose(c);
nexterror();
}
m = mntversion(c, vers, msize, arglen);
cclose(c);
poperror();
return m;
}
开发者ID:CoryXie,项目名称:nix-os,代码行数:26,代码来源:auth.c
示例7: sysfversion
int sysfversion(int fd, unsigned int msize, char *vers, unsigned int arglen)
{
ERRSTACK(2);
int m;
struct chan *c;
if (waserror()) {
poperror();
return -1;
}
/* check there's a NUL in the version string */
if (arglen == 0 || memchr(vers, 0, arglen) == 0)
error(EINVAL, ERROR_FIXME);
c = fdtochan(¤t->open_files, fd, O_RDWR, 0, 1);
if (waserror()) {
cclose(c);
nexterror();
}
m = mntversion(c, vers, msize, arglen);
poperror();
cclose(c);
poperror();
return m;
}
开发者ID:broketech,项目名称:akaros,代码行数:29,代码来源:sysfile.c
示例8: aoeidentify
/* must call with d qlocked */
static int
aoeidentify(Ctlr *d, SDunit *u)
{
Chan *c;
c = nil;
if(waserror()){
if(c)
cclose(c);
iprint("aoeidentify: %s\n", up->errstr);
nexterror();
}
uprint("%s/ident", d->path);
c = namec(up->genbuf, Aopen, OREAD, 0);
devtab[c->type]->read(c, d->ident, sizeof d->ident, 0);
poperror();
cclose(c);
d->feat = 0;
d->smart = 0;
identify(d, (ushort*)d->ident);
memset(u->inquiry, 0, sizeof u->inquiry);
u->inquiry[2] = 2;
u->inquiry[3] = 2;
u->inquiry[4] = sizeof u->inquiry - 4;
memmove(u->inquiry+8, d->model, 40);
return 0;
}
开发者ID:carriercomm,项目名称:plan9-gpl,代码行数:33,代码来源:sdaoe.c
示例9: lookup_fd
struct chan *fdtochan(struct fd_table *fdt, int fd, int mode, int chkmnt,
int iref)
{
struct chan *c;
c = lookup_fd(fdt, fd, iref, FALSE);
if (!c) {
/* We lost the info about why there was a problem (we used to track file
* group closed too, can add that in later). */
error(EBADF, ERROR_FIXME);
}
if (chkmnt && (c->flag & CMSG)) {
if (iref)
cclose(c);
error(EBADF, ERROR_FIXME);
}
if (mode < 0)
return c;
if ((mode & c->mode) != mode) {
if (iref)
cclose(c);
error(EBADF,
"FD access mode failure: chan mode 0x%x, wanted 0x%x (opened with 0 instead of O_READ?)",
c->mode, mode);
}
return c;
}
开发者ID:broketech,项目名称:akaros,代码行数:27,代码来源:sysfile.c
示例10: wstat
static int32_t
wstat(Chan* c, uint8_t* p, usize n)
{
Proc *up = externup();
int32_t l;
usize namelen;
if(waserror()){
cclose(c);
nexterror();
}
/*
* Renaming mount points is disallowed to avoid surprises
* (which should be renamed? the mount point or the mounted Chan?).
*/
if(c->ismtpt){
dirname(p, &namelen);
if(namelen)
nameerror(chanpath(c), Eismtpt);
}
l = c->dev->wstat(c, p, n);
poperror();
cclose(c);
return l;
}
开发者ID:Shamar,项目名称:harvey,代码行数:27,代码来源:sysfile.c
示例11: sysremove
long
sysremove(ulong *arg)
{
Chan *c;
validaddr(arg[0], 1, 0);
c = namec((char*)arg[0], Aremove, 0, 0);
/*
* Removing mount points is disallowed to avoid surprises
* (which should be removed: the mount point or the mounted Chan?).
*/
if(c->ismtpt){
cclose(c);
error(Eismtpt);
}
if(waserror()){
c->type = 0; /* see below */
cclose(c);
nexterror();
}
devtab[c->type]->remove(c);
/*
* Remove clunks the fid, but we need to recover the Chan
* so fake it up. rootclose() is known to be a nop.
*/
c->type = 0;
poperror();
cclose(c);
return 0;
}
开发者ID:Akheon23,项目名称:nix-os,代码行数:30,代码来源:sysfile.c
示例12: sysfversion
void
sysfversion(Ar0* ar0, va_list list)
{
Chan *c;
char *version;
int fd;
u32int msize;
usize nversion;
/*
* int fversion(int fd, int bufsize, char *version, int nversion);
* should be
* usize fversion(int fd, u32int msize, char *version, usize nversion);
*/
fd = va_arg(list, int);
msize = va_arg(list, u32int);
version = va_arg(list, char*);
nversion = va_arg(list, usize);
version = validaddr(version, nversion, 1);
/* check there's a NUL in the version string */
if(nversion == 0 || memchr(version, 0, nversion) == nil)
error(Ebadarg);
c = fdtochan(fd, ORDWR, 0, 1);
if(waserror()){
cclose(c);
nexterror();
}
ar0->u = mntversion(c, msize, version, nversion);
cclose(c);
poperror();
}
开发者ID:0intro,项目名称:enhanced-plan9,代码行数:34,代码来源:sysauth.c
示例13: sys_dup_to
/* Could pass in the fdt instead of the proc, but we used to need the to_proc
* for now so we can claim a VFS FD. Careful, we don't close the old chan. */
int sys_dup_to(struct proc *from_proc, unsigned int from_fd,
struct proc *to_proc, unsigned int to_fd)
{
ERRSTACK(1);
int ret;
struct chan *c;
if (waserror()) {
poperror();
return -1;
}
c = fdtochan(&from_proc->open_files, from_fd, -1, 0, 1);
if (c->qid.type & QTAUTH) {
cclose(c);
error(EPERM, ERROR_FIXME);
}
ret = insert_obj_fdt(&to_proc->open_files, c, to_fd, 0, TRUE, FALSE);
/* drop the ref from fdtochan. if insert succeeded, there is one other ref
* stored in the FDT */
cclose(c);
if (ret < 0)
error(EFAIL, "Can't insert FD %d into FDG", to_fd);
poperror();
return 0;
}
开发者ID:broketech,项目名称:akaros,代码行数:27,代码来源:sysfile.c
示例14: sysunmount
long
sysunmount(ulong *arg)
{
Chan *cmount, *cmounted;
cmounted = 0;
validaddr(arg[1], 1, 0);
cmount = namec((char *)arg[1], Amount, 0, 0);
if(waserror()) {
cclose(cmount);
if(cmounted)
cclose(cmounted);
nexterror();
}
if(arg[0]) {
/*
* This has to be namec(..., Aopen, ...) because
* if arg[0] is something like /srv/cs or /fd/0,
* opening it is the only way to get at the real
* Chan underneath.
*/
validaddr(arg[0], 1, 0);
cmounted = namec((char*)arg[0], Aopen, OREAD, 0);
}
cunmount(cmount, cmounted);
poperror();
cclose(cmount);
if(cmounted)
cclose(cmounted);
return 0;
}
开发者ID:Akheon23,项目名称:nix-os,代码行数:33,代码来源:sysfile.c
示例15: sysfversion
uintptr
sysfversion(va_list list)
{
uint msize, arglen;
char *vers;
Chan *c;
int fd;
fd = va_arg(list, int);
msize = va_arg(list, uint);
vers = va_arg(list, char*);
arglen = va_arg(list, uint);
validaddr((uintptr)vers, arglen, 1);
/* check there's a NUL in the version string */
if(arglen==0 || memchr(vers, 0, arglen)==0)
error(Ebadarg);
c = fdtochan(fd, ORDWR, 0, 1);
if(waserror()){
cclose(c);
nexterror();
}
msize = mntversion(c, vers, msize, arglen);
cclose(c);
poperror();
return msize;
}
开发者ID:Nurb432,项目名称:plan9front,代码行数:26,代码来源:auth.c
示例16: sysstat
long
sysstat(uint32 *arg)
{
char *name;
Chan *c;
uint l;
uchar *p;
l = arg[2];
p = uvalidaddr(arg[1], l, 1);
name = uvalidaddr(arg[0], 1, 0);
c = namec(name, Aaccess, 0, 0);
if(waserror()){
cclose(c);
nexterror();
}
l = devtab[c->type]->stat(c, p, l);
name = pathlast(c->path);
if(name)
l = dirsetname(name, strlen(name), p, l, arg[2]);
poperror();
cclose(c);
return l;
}
开发者ID:0intro,项目名称:vx32,代码行数:25,代码来源:sysfile.c
示例17: sys_stat
long
sys_stat(uint32 *arg)
{
Chan *c;
uint l;
uchar buf[128]; /* old DIRLEN plus a little should be plenty */
char strs[128], *name, *elem;
Dir d;
char old[] = "old stat system call - recompile";
uchar *p;
p = uvalidaddr(arg[1], 116, 1);
name = uvalidaddr(arg[0], 1, 0);
c = namec(name, Aaccess, 0, 0);
if(waserror()){
cclose(c);
nexterror();
}
l = devtab[c->type]->stat(c, buf, sizeof buf);
/* buf contains a new stat buf; convert to old. yuck. */
if(l <= BIT16SZ) /* buffer too small; time to face reality */
error(old);
elem = pathlast(c->path);
if(elem)
l = dirsetname(elem, strlen(elem), buf, l, sizeof buf);
l = convM2D(buf, l, &d, strs);
if(l == 0)
error(old);
packoldstat(p, &d);
poperror();
cclose(c);
return 0;
}
开发者ID:0intro,项目名称:vx32,代码行数:34,代码来源:sysfile.c
示例18: _sysseek
static vlong
_sysseek(int fd, vlong off, int whence)
{
Chan *c;
uchar buf[sizeof(Dir)+100];
Dir dir;
int n;
c = fdtochan(fd, -1, 1, 1);
if(waserror()){
cclose(c);
nexterror();
}
if(devtab[c->type]->dc == '|')
error(Eisstream);
switch(whence){
case 0:
if((c->qid.type & QTDIR) && off != 0)
error(Eisdir);
if(off < 0)
error(Enegoff);
c->offset = off;
break;
case 1:
if(c->qid.type & QTDIR)
error(Eisdir);
lock(&c->ref.lk); /* lock for read/write update */
off = off + c->offset;
if(off < 0)
error(Enegoff);
c->offset = off;
unlock(&c->ref.lk);
break;
case 2:
if(c->qid.type & QTDIR)
error(Eisdir);
n = devtab[c->type]->stat(c, buf, sizeof buf);
if(convM2D(buf, n, &dir, nil) == 0)
error("internal error: stat error in seek");
off = dir.length + off;
if(off < 0)
error(Enegoff);
c->offset = off;
break;
default:
error(Ebadarg);
}
c->uri = 0;
c->dri = 0;
cclose(c);
poperror();
return off;
}
开发者ID:99years,项目名称:plan9,代码行数:57,代码来源:sysfile.c
示例19: sseek
static int64_t
sseek(int fd, int64_t offset, int whence)
{
Proc *up = externup();
Chan *c;
uint8_t buf[sizeof(Dir)+100];
Dir dir;
int n;
c = fdtochan(fd, -1, 1, 1);
if(waserror()){
cclose(c);
nexterror();
}
if(c->dev->dc == '|')
error(Eisstream);
switch(whence){
case 0:
if((c->qid.type & QTDIR) && offset != 0LL)
error(Eisdir);
c->offset = offset;
break;
case 1:
if(c->qid.type & QTDIR)
error(Eisdir);
lock(&c->r.l); /* lock for read/write update */
offset += c->offset;
c->offset = offset;
unlock(&c->r.l);
break;
case 2:
if(c->qid.type & QTDIR)
error(Eisdir);
n = c->dev->stat(c, buf, sizeof buf);
if(convM2D(buf, n, &dir, nil) == 0)
error("internal error: stat error in seek");
offset += dir.length;
c->offset = offset;
break;
default:
error(Ebadarg);
}
c->uri = 0;
c->dri = 0;
cclose(c);
poperror();
return offset;
}
开发者ID:Shamar,项目名称:harvey,代码行数:53,代码来源:sysfile.c
示例20: spin_lock
struct chan *fdtochan(struct fgrp *f, int fd, int mode, int chkmnt, int iref)
{
struct chan *c;
c = 0;
spin_lock(&f->lock);
if (f->closed) {
spin_unlock(&f->lock);
error("File group closed");
}
if (fd < 0 || f->maxfd < fd || (c = f->fd[fd]) == 0) {
spin_unlock(&f->lock);
set_errno(EBADF);
error("Bad FD %d\n", fd);
}
if (iref)
chan_incref(c);
spin_unlock(&f->lock);
if (chkmnt && (c->flag & CMSG)) {
if (iref)
cclose(c);
error(Ebadusefd);
}
if (mode < 0 || c->mode == ORDWR) {
return c;
}
if ((mode & OTRUNC) && IS_RDONLY(c->mode)) {
if (iref)
cclose(c);
error(Ebadusefd);
}
/* TODO: this is probably wrong. if you get this from a dev, in the dev's
* open, you are probably saving mode directly, without passing it through
* openmode. */
if ((mode & ~OTRUNC) != c->mode) {
warn("Trunc mode issue: mode %o, mode minus trunc %o, chan mode %o\n",
mode, mode & ~OTRUNC, c->mode);
if (iref)
cclose(c);
error(Ebadusefd);
}
return c;
}
开发者ID:7perl,项目名称:akaros,代码行数:50,代码来源:sysfile.c
注:本文中的cclose函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论