【源码学院】【公众平台源码】【人脸对比源码】gzip解压源码_gzip解压工具

时间:2024-12-22 19:08:20 分类:源码编写公式大全 来源:html精美界面源码

1.gz是解压解压什么文件
2.如何在linux上使用安装的软件
3.实现web服务器中的gzip

gzip解压源码_gzip解压工具

gz是什么文件

       gz文件是一种压缩文件。

       详细解释如下:

       1. gz文件的源码基本含义

       gz文件是GNU zip的缩写,也被称为gzip文件。工具它是解压解压一种常用的文件压缩格式,用于数据压缩和存档。源码gz文件的工具源码学院特点是压缩率高,能够显著减小文件大小,解压解压方便存储和传输。源码

       2. gz文件的工具特点

       这种压缩文件格式采用了LZ算法,并采用了霍夫曼编码的解压解压压缩算法进行编码。gzip压缩软件能够很好地压缩大部分文本文件,源码如文档、工具源代码等。解压解压同时,源码它能够很好地支持网络传输和离线存储。工具公众平台源码当处理大量数据时,使用gzip进行压缩能够显著节省存储空间和网络带宽。

       3. gz文件的使用场景

       在实际应用中,gz文件广泛应用于操作系统的安装、软件的安装以及大型软件的压缩包中。用户在下载这些大型软件时,经常可以遇到以gz为后缀的人脸对比源码文件。此外,在Linux操作系统中,系统管理员经常使用gzip工具来压缩和解压文件,以方便系统管理和维护。同时,在进行软件开发时,开发者也经常使用gzip来压缩源代码和其他文档,js加密源码以便更轻松地与其他团队成员共享或进行版本控制。此外,当需要进行网络通信或电子邮件附件发送大量数据时,使用gzip进行压缩也是一个很好的选择。它不仅能够减小文件大小,还可以加快传输速度。同时,自动加人源码它还可以确保数据的安全性和完整性。因此,无论是个人用户还是企业用户,gzip都是一个非常实用的工具。

如何在linux上使用安装的软件

       ç›®å‰æµè¡Œçš„软件包有两种比较常见的形式,一种是以 RPM、deb包为代表的智能软件包,另一种是file.tar.gz形式的压缩。

       ä¸€ã€æºä»£ç å®‰è£…

       åº”用软件的源代码一般是file.tar.gz或者file.tgz格式,也就是说是以tar来打包,然后用gzip来压缩。

       ä»¥åº”用软件xfce-3.8.7.tar.gz为例,先进入软件的当前目录,然后使用gzip解压:#gzip -d

       xfce-3.8.7.tar.gz(注:-d 代表解压)。然后用tar解包:#tar -xvf

       xfce-3.8.7.tar。由于tar和gzip经常一起使用,所以tar还提供了一个参数,它可以自动调用gzip来解压,即:# tar -xzvf xfce-3.8.7.tar.gz。

       è¿›å…¥è§£åŽ‹å®Œæˆä¹‹åŽæ–°å»ºç«‹çš„目录,一般的应用软件中都有一个用来配置软件的可执行文件

       â€”—configure,它的参数比较多,而且用法也非常灵活。当然,安装不同的软件参数也不相同,具体有些什么参数,可以用命令:#./configure help取得详细的帮助。例如./configure --prefix=/usr/local/mysql(表示设置软件的安装目录为:/usr/local/mysql)在运行#./configure [options]配置软件后,它会根据你当前系统、编译、安装相关的信息,生成一个安装配置文件Makefile。Makefile文件通常是用来编译和安装软件的,运行make命令时系统会自动根据Makefile文件中的设置对软件进行编译和安装,如果编译能够顺利通过的话,运行#make install命令来安装。

       äºŒã€æ™ºèƒ½åŒ…安装

       çŽ°åœ¨ï¼Œä»¥æ™ºèƒ½åŒ…形式提供的软件很多,像RedHat Linux的RPM、Debian

       Linux的DEB、KISS、BSD以及Slackware等。RPM和Debian几乎统治着Linux包管理世界是Linux发行版本所广泛采用的应用软件。

       RPM是RedHat Package Manager的缩写,它只能使用在安装了RPM软件的系统中,不过好像目前大多数中文Linux发行版本都支持RPM软件包。

       1、用命令管理

       #rpm [options] abc.rpm

       ä¾‹å¦‚安装python-1.5.2-.i.rpm软件时,可以使用如下命令:#rpm –ivh python-1.5.2-.i.rpm。

       å¦‚果想知道RPM软件包中的相关信息,可以使用命令: #rpm ivhpython1.5.2- .i.rpm。

       å¦‚果想知道python-1.5.2-.i.rpm会在系统里安装哪些文件,可以使用以下这个命令:rpm -qpl python-1.5.2-.i.rpm。

       2、图形界面工具管理

       ç›¸å¯¹å‘½ä»¤æ–¹å¼æ¥è¯´ï¼Œåœ¨å›¾å½¢çŽ¯å¢ƒä¸‹ï¼Œå®‰è£…、升级、卸载和查询RPM软件包是一件非常简单轻松的事情,因为Linux提供了几个功能强大的RPM包管理工具。推荐使用Linux的图形管理工具来维护RPM软件包,GNOME中的GnoRPM和KDE中的Kpackage就是功能强大的RPM。

       ç‚¹å‡»Start(开始)→System tools(系统工具)→Kpackage,出现Kpackage界面,同时分析Linux系统中的 RPM数据库。它将安装好的RPM包形式的软件按照功能分在Amusements、Application、Development、Document、 Extension、Extentions、Networking、System Environment、User Interface以及X等几个树形目录中,每个目录中有相应的文件图标和名称。要安装或升级软件,只要点击工具栏的相应按钮就会弹出打开文件的对话框,选中要安装的RPM文件,单击OK按钮,如果不缺必要的运行库,就开始安装软件了。卸载软件时,用鼠标选择相应的软件,单击右边的Uninstall按钮就可以了。

实现web服务器中的gzip

       web服务器实现压缩数据发送给浏览器

       web服务器使用gzip压缩可以提高网站的响应速度,因为数据压缩会消耗一定的cpu及I/O的。但是可以减少通过网络传输的数据量。

       从而提高网站的浏览速度

         本程序本人自己在ubuntu中编译成功,在ubuntu中经过Firefox中,window 系统IE 8,Firefox、chrome中测试成功。

       本程序需要用到zlib压缩类库,没有装将无法成功,本人只提供在ubuntu中的代码及运行方式。希望大家谅解。关于用到的

       zlib库中的知识,稍后会出新的博客做解释,关于gzip压缩的头部请看另外一篇博客 gzip头部格式。

       源码及makefile下载地址:tl.h#include string.h#include sys/stat.h#include signal.h#include stdio.h#include string.h#include assert.h#include zlib.h#define OS_CODE 0x /*Unix OS_CODE*/#define DEFAULT_COMPRESSION Z_DEFAULT_COMPRESSION#define DEFAULT_WINDOWSIZE -#define DEFAULT_MEMLEVEL 9#define DEFAULT_BUFFERSIZE #define MAX #define METHOD //获取数据的方式,使用字符串的长度#define URI //表示URI的最大长度#define VERSION //HTTP版本好的最大长度#define TYPE     //表示文件的类型的长度int res_socket;void app_exit();static const char gzip_header[] = { '', '', Z_DEFLATED, 0, 0, 0, 0, 0, 0, OS_CODE};void put_long (unsigned char *string, unsigned long x) {  string[0] = (x 0xff); string[1] = ((x 8) 0xff) ;   string[2] = ((x ) 0xff) ;  string[3] = ((x ) 0xff);}/*@description:将数据使用gzip压缩后发给浏览器@parametersockd:套接字file: 要压缩的内容了*/int gzip_buffer (int  sockd, char * msg, int len) { z_stream stream;//zlib使用的。  int ret, flush; char in[MAX];//存放输入的数据  char send[MAX + ];//存放压缩过后的数据    unsigned have;  memcpy (send, gzip_header, ); memset (in, 0, len);    stream.zalloc = Z_NULL; stream.zfree = Z_NULL;  stream.opaque = Z_NULL; stream.avail_in = 0;    stream.next_in = Z_NULL;    memcpy (in, msg, len);  //压缩初始化。    int tmp_result = deflateInit2(stream,              Z_DEFAULT_COMPRESSION,//压缩级别                Z_DEFLATED,//压缩方式               -MAX_WBITS,             8,              Z_DEFAULT_STRATEGY);    if (Z_OK != tmp_result) {       printf("deflateInit error: %drn", tmp_result);        return 0;   }   stream.avail_in = len; //要压缩数据的长度   stream.next_in = in;    //要压缩数据的首地址 stream.avail_out = MAX;  //可存放的最大输出结果的长多。就是压缩后数据的最大长度   stream.next_out = send + ; //存放压缩数据的开始位置,send前十个字节用来放头部   ret = deflate (stream,Z_FINISH); //压缩  assert (ret != Z_STREAM_ERROR); switch (ret) {      case Z_NEED_DICT:           ret = Z_DATA_ERROR;     case Z_DATA_ERROR:      case Z_MEM_ERROR:           (void)inflateEnd (stream);         return ret; }   have = MAX - stream.avail_out;  unsigned crc = crc(0L, in, len);  char * tail = send + + have; put_long (tail, crc);   put_long (tail + 4, len);   write (sockd, send, have + ); deflateEnd (stream);   return 1;}/* @description:开始服务端监听@parameterip:web服务器的地址port:web服务器的端口@result:成功返回创建socket套接字标识,错误返回-1*/int socket_listen( char *ip, unsigned short int port){   int res_socket; //返回值   int res, on;    struct sockaddr_in address; struct in_addr in_ip;   res = res_socket = socket(AF_INET, SOCK_STREAM, 0); setsockopt(res_socket, SOL_SOCKET, SO_REUSEADDR, on, sizeof(on));  memset(address, 0, sizeof(address));   address.sin_family = AF_INET ;  address.sin_port =htons(port);  address.sin_addr.s_addr = htonl(INADDR_ANY); //inet_addr(".0.0.1");    res = bind( res_socket, (struct sockaddr *) address, sizeof( address ) );  if(res) { printf( "port is used , not to repeat bindn" ); exit(); };   res = listen(res_socket,5); if(res) { printf( "listen port is error ;n" ); exit( );  };   return res_socket ;}/*@description:向客户端发送网页头文件的信息@parameterconn_socket:套接字描述符。status:/rentiansheng"Reage blog/a";   res_socket = socket_listen( ".0.0.1", ) ;  //当按ctrl+c结束程序时调用,使用app_exit函数处理退出过程    signal(SIGINT, app_exit);   while(1){       conn_socket = accept( res_socket, (struct sockaddr * )client_addr, len );     printf("reagen");     tmp = read (conn_socket, buf, MAX-1);       buf [MAX - 1] = 0;      send_http_head(conn_socket);        gzip_buffer (conn_socket, msg, strlen(msg));        close(conn_socket);     } }void app_exit(){ //回复ctrl+c组合键的默认行为  signal (SIGINT, SIG_DFL);   //关闭服务端链接、释放服务端ip和端口    close(res_socket);  printf("n");  exit(0);}