addhash.c

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

C
67
字号
#include <u.h>#include <libc.h>#include <bio.h>#include <regexp.h>#include "hash.h"Hash hash;voidusage(void){	fprint(2, "addhash [-o out] file scale [file scale]...\n");	exits("usage");}voidmain(int argc, char **argv){	int i, fd, n;	char err[ERRMAX], *out;	Biobuf *b, bout;	out = nil;	ARGBEGIN{	case 'o':		out = EARGF(usage());		break;	default:		usage();	}ARGEND;	if(argc==0 || argc%2)		usage();	while(argc > 0){		if((b = Bopenlock(argv[0], OREAD)) == nil)			sysfatal("open %s: %r", argv[0]);		n = atoi(argv[1]);		if(n == 0)			sysfatal("0 scale given");		Breadhash(b, &hash, n);		Bterm(b);		argv += 2;		argc -= 2;	}	fd = 1;	if(out){		for(i=0; i<120; i++){			if((fd = create(out, OWRITE, 0666|DMEXCL)) >= 0)				break;			rerrstr(err, sizeof err);			if(strstr(err, "file is locked")==nil && strstr(err, "exclusive lock")==nil)				break;			sleep(1000);		}		if(fd < 0)			sysfatal("could not open %s: %r\n", out);	}			Binit(&bout, fd, OWRITE);	Bwritehash(&bout, &hash);	Bterm(&bout);	exits(0);}

⌨️ 快捷键说明

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