/*
 *    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的更多相关文章

  1. zboot/xtract.c

    /* *  linux/zBoot/xtract.c * *  Copyright (C) 1993  Hannu Savolainen * *    Extracts the system imag ...

  2. zBoot/Makefile

    #上层makefile调用执行make命令,执行的应该是第一个目标allHEAD = head.oSYSTEM = ../tools/zSystem#LD = gcc#TEST = -DTEST_DR ...

  3. (寒假集训) Piggyback(最短路)

    Piggyback 时间限制: 1 Sec  内存限制: 64 MB提交: 3  解决: 3[提交][状态][讨论版] 题目描述 Bessie and her sister Elsie graze i ...

  4. WebSocket - ( 一.概述 )

    说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...

  5. 【DWR系列02】-DWR逆向Ajax即服务器推送

    .literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...

  6. USACO翻译:USACO 2014 DEC Silver三题

    USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 马拉松 奶牛慢跑 英文题目名称 piggyback marathon cowjog 可执行文件名 piggyback ma ...

  7. TCP协议

    TCP是一个面向连接的协议,在发送数据之前,必须在双方之间建立一条连接. TCP首部 TCP数据封装在IP数据报中 TCP包首部 下面简单说明部分字段的作用: 端口号:通讯双方由IP地址和端口号标识. ...

  8. 反向Ajax,实现服务器向客户端推送消息

    反向Ajax的基本概念是客户端不必从服务器获取信息,服务器会把相关信息直接推送到客户端.这样做的目的是解决Ajax传统Web模型所带来的一个限制:实时信息很难从技术上解决.原因是,客户端必须联系服务器 ...

  9. DWR的Reverse Ajax技术实现

    DWR的逆向ajax其实主要包括两种模式:主动模式和被动模式.其中主动模式包括Polling和Comet两种,被动模式只有Piggyback这一种. 所谓的Piggyback指的是如果后台有什么内容需 ...

随机推荐

  1. dancing link模板

    #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #i ...

  2. ASP.NET MVC学习之路由篇(1)

    1.基本路由 RouteConfig.cs: 1 public class RouteConfig 2 { 3 public static void RegisterRoutes(RouteColle ...

  3. 从ajax获取的数据无法通过Jquery选择器来调用事件

    如果标签是动态生成的,比如说div.tr.td等,若需通过Jquery来获取事件,那么需要用live来绑定相应的事件. 比如说绑定div的click事件 $("div").live ...

  4. 使用 JDBC 调用函数 & 存储过程

    /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connection connectio ...

  5. WP8 学习 Onnavigatedto和OnnavigatedFrom的区别

    OnNavigatedTo:重写 OnNavigatedTo 方法以检查导航请求并且准备供显示的页面.这个方法就像是初始化(Ini) ,它先于Loaded事件之前被执行,所以在这里可以控制一些初始化前 ...

  6. java中的日志组件-log4j

    1.为什么使用日志组件 Log4J是Apache的一个开放源代码项目,它是一个日志操作包,通过使用Log4J,可以指定日志信息输出的目的地,如控制台.文件.CUI组件.NT的事件记录器:还可以控制每一 ...

  7. CSU 1111 D(Contest #3)

              有三户人家共拥有一座花园,每户人家的太太均需帮忙整理花园.A 太太工作了5 天,B 太太则工作了4 天,才将花园整理完毕.C 太太因为正身怀六甲无法加入她们的行列,便出了90元.请 ...

  8. c#读写文本文档-1-用file类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  9. PHP+MySql字符问题原理分析

    假如数据库已经设置了utf-8 ,php文件也设置了utf-8 ,但在php文件的查询语句中未添加了 mysql_query("set names utf8")语句,此时php页面 ...

  10. struts2DMI(动态方法调用)

    DMI(Dynamic Method Invoke)即动态,是strus2的一个特性,我们知道,在最开始学习strus2时,往往一个action中只有一个excute方法,比如说add,delete, ...