1.gz是解压解压什么文件
2.å¦ä½å¨linuxä¸ä½¿ç¨å®è£
ç软件
3.实现web服务器中的gzip
gz是什么文件
gz文件是一种压缩文件。 详细解释如下: 1. gz文件的源码基本含义 gz文件是GNU zip的缩写,也被称为gzip文件。工具它是解压解压一种常用的文件压缩格式,用于数据压缩和存档。源码gz文件的工具u盘 工具源码特点是压缩率高,能够显著减小文件大小,解压解压方便存储和传输。源码 2. gz文件的工具特点 这种压缩文件格式采用了LZ算法,并采用了霍夫曼编码的解压解压压缩算法进行编码。gzip压缩软件能够很好地压缩大部分文本文件,源码如文档、工具源代码等。解压解压同时,源码它能够很好地支持网络传输和离线存储。工具c语言源码计划当处理大量数据时,使用gzip进行压缩能够显著节省存储空间和网络带宽。 3. gz文件的使用场景 在实际应用中,gz文件广泛应用于操作系统的安装、软件的安装以及大型软件的压缩包中。用户在下载这些大型软件时,经常可以遇到以gz为后缀的光模块指标源码文件。此外,在Linux操作系统中,系统管理员经常使用gzip工具来压缩和解压文件,以方便系统管理和维护。同时,在进行软件开发时,开发者也经常使用gzip来压缩源代码和其他文档,底部火眼指标源码以便更轻松地与其他团队成员共享或进行版本控制。此外,当需要进行网络通信或电子邮件附件发送大量数据时,使用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);}