dirtostat.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 53 行

C
53
字号
#include "lib.h"#include <sys/stat.h>#include <errno.h>#include "sys9.h"#include "dir.h"/* fi is non-null if there is an fd associated with s */void_dirtostat(struct stat *s, Dir *d, Fdinfo *fi){	int num;	char *nam;	s->st_dev = (d->type<<8)|(d->dev&0xFF);	s->st_ino = d->qid.path;	s->st_mode = d->mode&0777;	if(fi && (fi->flags&FD_ISTTY))		s->st_mode |= S_IFCHR;	else if(d->mode & 0x80000000)		s->st_mode |= S_IFDIR;	else if(d->type == '|' || d->type == 's')		s->st_mode |= S_IFIFO;	else if(d->type != 'M')		s->st_mode |= S_IFCHR;	else		s->st_mode |= S_IFREG;	s->st_nlink = 1;	s->st_uid = 1;	s->st_gid = 1;	if(fi && (fi->flags&FD_BUFFERED))		s->st_size = fi->buf->n;	else		s->st_size = d->length;	s->st_atime = d->atime;	s->st_mtime = d->mtime;	s->st_ctime = d->mtime;	if(fi && fi->uid != -2){		s->st_uid = fi->uid;		s->st_gid = fi->gid;	} else {		nam = d->uid;		if(_getpw(&num, &nam, 0))			s->st_uid = num;		nam = d->gid;		if(_getpw(&num, &nam, 0))			s->st_gid = num;		if(fi){			fi->uid = s->st_uid;			fi->gid = s->st_gid;		}	}}

⌨️ 快捷键说明

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