unix.c

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

C
84
字号
#include <u.h>#include <libc.h>#include <bio.h>#include <libsec.h>#include <libproto.h>#include <ctype.h>#include "iso9660.h"#include <grp.h>#include <pwd.h>typedef struct Xarg Xarg;struct Xarg {	void (*enm)(char*,char*,XDir*,void*);	void (*warn)(char*,void*);	void *arg;};static long numericuid(char *user);static long numericgid(char *gp);voiddirtoxdir(XDir *xd, Dir *d){	//	char buf[NAMELEN+1];	memset(xd, 0, sizeof *xd);	xd->name = atom(d->name);	xd->uid = atom(d->uid);	xd->gid = atom(d->gid);	xd->uidno = numericuid(d->uid);	xd->gidno = numericgid(d->gid);	xd->mode = d->mode;	xd->atime = d->atime;	xd->mtime = d->mtime;	xd->ctime = 0;	xd->length = d->length;	if(xd->mode & CHLINK) {		xd->mode |= 0777;		xd->symlink = atom(d->symlink);	}};voidfdtruncate(int fd, ulong size){	ftruncate(fd, size);	return;}static longnumericuid(char *user){	struct passwd *pass;	static int warned = 0;	if (! (pass = getpwnam(user))) {		if (!warned)			fprint(2, "Warning: getpwnam(3) failed for \"%s\"\n", user);		warned = 1;		return 0;	}	return pass->pw_uid;}static longnumericgid(char *gp){	struct group *gr;	static int warned = 0;	if (! (gr = getgrnam(gp))) {		if (!warned)			fprint(2, "Warning: getgrnam(3) failed for \"%s\"\n", gp);		warned = 1;		return 0;	}	return gr->gr_gid;}

⌨️ 快捷键说明

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