📄 arcv.c
字号:
/* * Convert old to new archive format*/#include <signal.h>#include <ar.h>#define omag 0177555struct ar_hdr nh;struct{ char oname[8]; long odate; char ouid; char omode; unsigned siz;} oh;char *tmp;char *mktemp();int f;int tf;union { char buf[512]; int magic;} b;main(argc, argv)char *argv[];{ register i; tmp = mktemp("/tmp/arcXXXXX"); for(i=1; i<4; i++) signal(i, SIG_IGN); for(i=1; i<argc; i++) conv(argv[i]); unlink(tmp);}conv(fil)char *fil;{ register unsigned i, n; f = open(fil, 2); if(f < 0) { printf("arcv: cannot open %s\n", fil); return; } close(creat(tmp, 0600)); tf = open(tmp, 2); if(tf < 0) { printf("arcv: cannot open temp\n"); close(f); return; } b.magic = 0; read(f, (char *)&b.magic, sizeof(b.magic)); if(b.magic != omag) { printf("arcv: %s not archive format\n", fil); close(tf); close(f); return; } b.magic = ARMAG; write(tf, (char *)&b.magic, sizeof(b.magic));loop: i = read(f, (char *)&oh, sizeof(oh)); if(i != sizeof(oh)) goto out; for(i=0; i<8; i++) nh.ar_name[i] = oh.oname[i]; nh.ar_size = oh.siz; nh.ar_uid = oh.ouid; nh.ar_gid = 1; nh.ar_mode = 0666; nh.ar_date = oh.odate; n = (oh.siz+1) & ~01; write(tf, (char *)&nh, sizeof(nh)); while(n > 0) { i = 512; if(n < i) i = n; read(f, b.buf, i); write(tf, b.buf, i); n -= i; } goto loop;out: lseek(f, 0L, 0); lseek(tf, 0L, 0); while((i=read(tf, b.buf, 512)) > 0) write(f, b.buf, i); close(f); close(tf);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -