⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pack.c

📁 系统迁移的源代码: http://www.diku.dk/hjemmesider/ansatte/jacobg/
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <sys/sendfile.h>#include <string.h>struct file {	char* name;	size_t size;	int fd;	int optional;};void stat_files(struct file* files,int num_files){	int i;	for(i=0; i<num_files;i++)	{		struct file* f = &files[i];		f->fd = open(f->name, O_RDONLY);		if(f->name && *(f->name) && f->fd>=0)		{			struct stat stat;			fstat(f->fd, &stat);			f->size = stat.st_size;			printf("%s size %d\n", f->name, f->size);		}		else if(!f->optional)		{			printf("no file: '%s'\n",f->name);			exit(-1);		}	}}void write_file(FILE* out, struct file* f){	char* d= malloc(f->size);	if(f->fd>=0)	{		printf("sending file %s\n", f->name);		if(read(f->fd,d,f->size)!=f->size)		{			printf("read err\n");			exit(-1);		}		fwrite(d, f->size,1,out);		free(d);		close(f->fd);	}}int main(int argc, char** argv){	int args_size;	int i;	char cmdline[256];	int num_pfns = 0x1000;	struct file files[] = {		{ "/root/bin/linux_loader", 0,0,0},		{ "/root/vmlinux", 0,0,0},		{ "/root/domUinitrd", 0,0,1}	};	const int num_files = sizeof(files)/sizeof(struct file);	FILE* out = fopen("/tmp/out.img","w");	memset(cmdline,0,sizeof(cmdline));	strcpy(cmdline,"mem=16M init=/linuxrc root=/dev/ram xencons=ttyS0");	printf("%d files\n", num_files);	stat_files(files,num_files);	fwrite(&files[0].size, sizeof(size_t),1,out);	write_file( out, &files[0] );	args_size = sizeof(cmdline) + 3*sizeof(size_t);	fwrite(&args_size, sizeof(args_size),1,out);	fwrite(&num_pfns, sizeof(num_pfns),1,out);	fwrite(cmdline, sizeof(cmdline),1,out);	fwrite(&files[1].size, sizeof(size_t),1,out);	fwrite(&files[2].size, sizeof(size_t),1,out);	for(i=1; i<num_files; i++) write_file( out, &files[i] );	fclose(out);	return 0;}

⌨️ 快捷键说明

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