joindump.c

来自「Parallel programming/Lou Baker, Bradley 」· C语言 代码 · 共 81 行

C
81
字号
/* Program to join split files */
#include <stdio.h>

void
main(int argc, char **argv)
{
 FILE *f, *out, *hf;
 int i;
 char name[256];
 char tmp[256], host[256];
 int n;
 char buf[4096];

 if(argc != 2 && argc != 3 && argc != 4)
	{
	fprintf(stderr, "Usage: joindump <filename> [hosts]\n");
	exit(1);
	}

 if((out=fopen(argv[1],"w")) == NULL)
	{
	fprintf(stderr, "Can't open output file '%s' for write\n", argv[1]);
	exit(1);
	}
 if(argc >= 3)
	{
	if((hf = fopen(argv[2], "r")) == NULL)
		{
		fprintf(stderr,"Can't open host file %s\n", argv[2]);
		exit(1);
		}
	}
 else
	hf = NULL;
 if(argc == 4)
	i=atoi(argv[3]);
 else
	i=0;
 for(; i<2048; i++)
	{
	sprintf(name, "%s.%d", argv[1], i);
	if(hf)
		{
		if(fgets(host,sizeof(host),hf) == NULL)
			break;
		if(host[strlen(host)-1] == '\n')
			host[strlen(host)-1] = '\0';
		sprintf(tmp,"rcp %s:/tmp/%s %s", host, name, name);
		if(system(tmp) != 0)
			{
			fprintf(stderr,"Joindump failed in RCP: %s\n", tmp);
			exit(1);
			}
		sprintf(tmp,"rsh %s 'rm -f /tmp/%s'", host,name);
		if(system(tmp) != 0)
			fprintf(stderr,"Warning: RM failed: %s\n", tmp);
		}

	printf("Joining %s\n", name);
 	if((f=fopen(name,"r")) == NULL)
		break;
	while((n=fread(buf, 1, sizeof(buf), f)) > 0)
		fwrite(buf, 1, n, out);
	fclose(f);
	unlink(name);
	}

#ifdef NOTDEF
 for(i=0; i<2048; i++)
	{
	sprintf(name, "%s.%d", argv[1], i);
	if(access(name,0) == 0)
		unlink(name);
	else
		break;
	}
#endif
		
 fclose(out);
}

⌨️ 快捷键说明

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