zboot/piggyback.c
/*
* linux/zBoot/piggyback.c
*
* (C) 1993 Hannu Savolainen
*/
/*
* This program reads the compressed system image from stdin and
* encapsulates it into an object file written to the stdout.
*/
//这个程序读取压缩的system映像文件从标准输入然后压缩后写入标准输出
#include <stdio.h>
#include <unistd.h>
#include <a.out.h>
//主函数
int main(int argc, char *argv[])
{
int c, n=0, len=0;
//定义缓冲区
char tmp_buf[512*1024];
//可执行文件头
struct exec obj = {0x00640107}; /* object header */
//输入的数据和输入的长度
char string_names[] = {"_input_data\0_input_len\0"};
//标号表,变量名
struct nlist var_names[2] = /* Symbol table */
{
{ /* _input_data */
(char *)4, 7, 0, 0, 0
},
{ /* _input_len */
(char *)16, 7, 0, 0, 0
}
};
len = 0;
//从标准输入中读取数据到缓冲区
while ((n = read(0, &tmp_buf[len], sizeof(tmp_buf)-len+1)) > 0)
len += n;
//校验读取的长度
if (n==-1)
{
perror("stdin");
exit(-1);
}
if (len >= sizeof(tmp_buf))
{
fprintf(stderr, "%s: Input too large\n", argv[0]);
exit(-1);
}
//输出长度信息
fprintf(stderr, "Compressed size %d.\n", len);
/*
* Output object header
*/
//输出对象头
obj.a_data = len + sizeof(long);
obj.a_syms = sizeof(var_names);
write(1, (char *)&obj, sizeof(obj));
/*
* Output data segment (compressed system & len)
*/
//输出数据段
write(1, tmp_buf, len);
write(1, (char *)&len, sizeof(len));
/*
* Output symbol table
*/
//输出符号表
var_names[1].n_value = len;
write(1, (char *)&var_names, sizeof(var_names));
/*
* Output string table
*/
//输出字符表
len = sizeof(string_names) + sizeof(len);
write(1, (char *)&len, sizeof(len));
write(1, string_names, sizeof(string_names));
exit(0);
}
zboot/piggyback.c的更多相关文章
- zboot/xtract.c
/* * linux/zBoot/xtract.c * * Copyright (C) 1993 Hannu Savolainen * * Extracts the system imag ...
- zBoot/Makefile
#上层makefile调用执行make命令,执行的应该是第一个目标allHEAD = head.oSYSTEM = ../tools/zSystem#LD = gcc#TEST = -DTEST_DR ...
- (寒假集训) Piggyback(最短路)
Piggyback 时间限制: 1 Sec 内存限制: 64 MB提交: 3 解决: 3[提交][状态][讨论版] 题目描述 Bessie and her sister Elsie graze i ...
- WebSocket - ( 一.概述 )
说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...
- 【DWR系列02】-DWR逆向Ajax即服务器推送
.literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...
- USACO翻译:USACO 2014 DEC Silver三题
USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 马拉松 奶牛慢跑 英文题目名称 piggyback marathon cowjog 可执行文件名 piggyback ma ...
- TCP协议
TCP是一个面向连接的协议,在发送数据之前,必须在双方之间建立一条连接. TCP首部 TCP数据封装在IP数据报中 TCP包首部 下面简单说明部分字段的作用: 端口号:通讯双方由IP地址和端口号标识. ...
- 反向Ajax,实现服务器向客户端推送消息
反向Ajax的基本概念是客户端不必从服务器获取信息,服务器会把相关信息直接推送到客户端.这样做的目的是解决Ajax传统Web模型所带来的一个限制:实时信息很难从技术上解决.原因是,客户端必须联系服务器 ...
- DWR的Reverse Ajax技术实现
DWR的逆向ajax其实主要包括两种模式:主动模式和被动模式.其中主动模式包括Polling和Comet两种,被动模式只有Piggyback这一种. 所谓的Piggyback指的是如果后台有什么内容需 ...
随机推荐
- display:flex
元素在x方向走,元素y不一样[高度].可以用对齐.align-items. align-self 自身调节元素在x方向走,元素在x方向距离.justify-content . 元素在x方向走,x方 ...
- 过滤器 Filter
Filter(过滤器)简介 Filter 的基本功能是对发送到 Servlet 的请求进行拦截, 并对响应也进行拦截. Filter 程序是一个实现了 Filter 接口的 Java 类,与 Serv ...
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = # printf( ...
- C/C++类型转换总结
---恢复内容开始--- 最近做笔试题经常会碰到有关类型转换的题型,所以结合例子做下总结,也是希望自己能更时刻的理解类型转换. C++的类型转换包括内置类型和类类型对象的转换. (1) 1.1隐式类型 ...
- 用php 查询显示新闻消息
创建数据库: create database mydb ; use mydb ; create table News ( ids int identity primary key, title var ...
- 2013年7月份第4周51Aspx源码发布详情
大型企业通用管理ERP源码 2013-7-26 [VS2010]2013.7.4更新内容:1.修复决策模式-客户等级不能保存问题.2.修复企业知识库有报错问题.3.修复运营模式-人力资源分析模块-在 ...
- 《Java7中 下划线的新特性》
//Java7引入了一个新功能:程序员可以在数值中使用下画线,不管是 //整形数值,还是浮点型数值,都可以自由地使用下划线.通过下划线 //分隔,可以更直观的分辨数值中到底有多少位. public c ...
- Linux下TC使用说明
Linux下TC使用说明 一.TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. ...
- oracle的存储结构
表空间 当一个用户被创建以后,随之就要为用户分配数据存储的空间,这在oracle中成为“表空间”(Tablespace). 在数据库中创建用户时,基于应用性能和管理的考虑,最好为不同的用户创建独立的表 ...
- 关于offer选择
6月1日收到移动调剂到昭通移动的电话,当时第一反应就是拒绝,后来参考了很久,犹豫了很久,答应了hr:答应了就有点后悔了:各种挑刺为难Hr;6月2日上午回绝hr: 问:陈姐,我有件重要的事忘记问了,在昭 ...