当前位置:首页 » 编程语言 » c语言gzip压缩
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言gzip压缩

发布时间: 2022-01-23 10:22:18

‘壹’ 请问如何用c语言写一个输入路径,压缩和解压文件的代码 能分享一下源码吗 我想学习一下

这个如果是在linux下面的话可以调用系统自带的压缩工具

大致给你说一下步骤吧。具体还是靠你自己实现

  1. 输入路径。这个就不多说。scanf

  2. 分析输入的文件路径,或者后缀名。然后调用 tar gzip等压缩,解压缩命令。

压缩的算法如果有兴趣你也可以自己去实现一下。不过不容易实现。还是调用系统自带的压缩命令吧。

‘贰’ 为什么C语言用execl执行bash shell脚本会出现Exec format error

进行linux测试编写脚本必少Shell脚本名称随便定义要缀名例写abcsmartzip类名称运行要键入./smartzip能运行脚本每行命令处用空格行第1部.Linux脚本编写基础1.1语基本介绍1.1.1程序必须面行始(必须文件第行):#!/bin/sh符号#!用告诉系统面参数用执行该文件程序例我使用/bin/sh执行程序编辑脚本要执行该脚本必须使其执行要使脚本执行:编译chmod+xfilename才能用./filename运行1.1.2注释进行shell编程#句表示注释直行结束我真诚建议您程序使用注释您使用注释即使相间内没使用该脚本您能短间内明白该脚本作用及工作原理1.1.3变量其编程语言您必须使用变量shell编程所变量都由字符串组并且您需要变量进行声明要赋值给变量您写:#!/bin/sh#变量赋值:a="helloworld"#现打印变量a内容:echo"Ais:"echo$a候变量名容易与其文字混淆比:num=2echo"thisisthe$numnd"并打印"thisisthe2nd"仅仅打印"thisisthe"shell搜索变量numnd值变量没值使用花括号告诉shell我要打印num变量:num=2echo"thisisthe${num}nd"打印:thisisthe2nd1.1.4环境变量由export关键字处理变量叫做环境变量我环境变量进行讨论通情况仅仅登录脚本使用环境变量1.1.5Shell命令流程控制shell脚本使用三类命令:1)Unix命令:虽shell脚本使用任意unix命令由些相更用命令些命令通用进行文件文字操作用命令语及功能echo"sometext":文字内容打印屏幕ls:文件列表wc–lfile:计算文件行数wc-wfile:计算文件单词数wc-cfile:计算文件字符数cpsourcefiledestfile:文件拷贝mvoldnamenewname:重命名文件或移文件rmfile:删除文件grep'pattern'file:文件内搜索字符串比:grep'searchstring'file.txtcut-bcolnumfile:指定欲显示文件内容范围并输标准输设备比:输每行第5第9字符cut-b5-9file.txt千万要cat命令混淆两完全同命令catfile.txt:输文件内容标准输设备(屏幕)filesomefile:文件类型readvar:提示用户输入并输入赋值给变量sortfile.txt:file.txt文件行进行排序uniq:删除文本文件现行列比:sortfile.txt|uniqexpr:进行数运算Example:add2and3expr2"+"3find:搜索文件比:根据文件名搜索find.-namefilename-printtee:数据输标准输设备(屏幕)文件比:somecommand|teeoutfilebasenamefile:返包含路径文件名比:basename/bin/tux返tuxdirnamefile:返文件所路径比:dirname/bin/tux返/binheadfile:打印文本文件几行tailfile:打印文本文件末尾几行sed:Sed基本查找替换程序标准输入(比命令管道)读入文本并结输标准输(屏幕)该命令采用则表达式(见参考)进行搜索要shell通配符相混淆比:linuxfocus替换LinuxFocus:cattext.file|sed's/linuxfocus/LinuxFocus/'>newtext.fileawk:awk用文本文件提取字段缺省字段割符空格使用-F指定其割符catfile.txt|awk-F,'{print$1","$3}'我使用作字段割符同打印第第三字段该文件内容:AdamBor,34,IndiaKerryMiller,22,USA命令输结:AdamBor,IndiaKerryMiller,USA2)概念:管道,重定向backtick些系统命令真重要管道(|)命令输作另外命令输入grep"hello"file.txt|wc-lfile.txt搜索包含hello行并计算其行数grep命令输作wc命令输入您使用命令重定向:命令结输文件标准输(屏幕)>写入文件并覆盖旧文件>>加文件尾部保留旧文件内容反短斜线使用反短斜线命令输作另外命令命令行参数命令:find.-mtime-1-typef-print用查找24(-mtime–2则表示48)内修改文件您想所查找文件打包则使用脚本:#!/bin/sh#Theticksarebackticks(`)notnormalquotes('):tar-zcvflastmod.tar.gz`find.-mtime-1-typef-print`3)流程控制1.if"if"表达式条件真则执行then面部:if.;then.elif.;then.else.fi数情况使用测试命令条件进行测试比比较字符串、判断文件否存及否读等等…通用"[]"表示条件测试注意空格重要要确保括号空格[-f"somefile"]:判断否文件[-x"/bin/ls"]:判断/bin/ls否存并执行权限[-n"$var"]:判断$var变量否值["$a"="$b"]:判断$a$b否相等执行mantest查看所测试表达式比较判断类型直接执行脚本:#!/bin/shif["$SHELL"="/bin/bash"];thenecho"yourloginshellisthebash(bourneagainshell)"elseecho"yourloginshellisnotbashbut$SHELL"fi变量$SHELL包含登录shell名称我/bin/bash进行比较快捷操作符熟悉C语言朋友能喜欢面表达式:[-f"/etc/shadow"]&&echo""&&快捷操作符左边表达式真则执行右边语句您认逻辑运算与操作例表示/etc/shadow文件存则打印同或操作(||)shell编程用例:#!/bin/shmailfolder=/var/spool/mail/james[-r"$mailfolder"]''{echo"Cannotread$mailfolder";exit1;}echo"$mailfolderhasmailfrom:"grep"^From"$mailfolder该脚本首先判断mailfolder否读读则打印该文件"From"行读则或操作效打印错误信息脚本退问题我必须两命令:-打印错误信息-退程序我使用花括号匿名函数形式两命令放起作命令使用般函数文提及用与或操作符我用if表达式作任何事情使用与或操作符更便利2.casecase:表达式用匹配给定字符串数字casein)dosomethinghere;;esac让我看例file命令辨别给定文件文件类型比:filelf.gz返:lf.gz:gzipcompresseddata,deflated,originalfilename,lastmodified:MonAug2723:09:182001,os:Unix我利用点写叫做smartzip脚本该脚本自解压bzip2,gzipzip类型压缩文件:#!/bin/shftype=`file"$1"`case"$ftype"in"$1:Ziparchive"*)unzip"$1";;"$1:gzipcompressed"*)gunzip"$1";;"$1:bzip2compressed"*)bunzip2"$1";;*)echo"File$";;esac您能注意我使用特殊变量$1该变量包含传递给该程序第参数值说我运行:smartziparticles.zip$1字符串articles.zip3.selsectselect表达式种bash扩展应用尤其擅于交互式使用用户组同值进行选择selectvarin;dobreakdone.now$varcanbeused.面例:#!/bin/shecho"WhatisyourfavouriteOS?"selectvarin"Linux""GnuHurd""FreeBSD""Other";dobreakdoneecho"Youhaveselected$var"面该脚本运行结:WhatisyourfavouriteOS?1)Linux2)GnuHurd3)FreeBSD4)Other#?1YouhaveselectedLinux4.looploop表达式:while;do.donewhile-loop运行直表达式测试真.关键字"break"用跳循环关键字continue用执行余部直接跳循环for-loop表达式查看字符串行表(字符串用空格隔)其赋给变量:forvarin.;do.done面例别打印ABC屏幕:#!/bin/shforvarinABC;doecho"varis$var"done面更用脚本showrpm其功能打印些RPM包统计信息:#!/bin/sh##USAGE:showrpmrpmfile1rpmfile2#EXAMPLE:showrpm/cdrom/RedHat/RPMS/*.rpmforrpmpackagein$*;doif[-r"$rpmpackage"];thenecho"===============$rpmpackage=============="rpm-qi-p$rpmpackageelseecho"ERROR:cannotreadfile$rpmpackage"fidone现第二特殊变量$*该变量包含所输入命令行参数值您运行showrpmopenssh.rpmw3m.rpmwebgrep.rpm$*包含3字符串即openssh.rpm,w3m.rpmandwebgrep.rpm.5.引号向程序传递任何参数前程序扩展通配符变量所谓扩展意思程序通配符(比*)替换合适文件名变量替换变量值防止程序作种替换您使用引号:让我看例假设前目录些文件两jpg文件mail.jpgtux.jpg1.2编译SHELL脚本#ch#!/bin/shmod+xfilenamecho*.jpg∪缓螅梢酝ü淙耄?./filename执行您脚本打印"mail.jpgtux.jpg"结引号(单引号双引号)防止种通配符扩展:#!/bin/shecho"*.jpg"echo'*.jpg'打印"*.jpg"两单引号更严格些防止任何变量扩展双引号防止通配符扩展允许变量扩展#!/bin/shecho$SHELLecho"$SHELL"echo'$SHELL'运行结:/bin/bash/bin/bash$SHELL种防止种扩展使用转义字符——反斜杆:echo/*.jpgecho/$SHELL输:*.jpg$SHELL6.Heredocuments要几行文字传递给命令heredocuments(译者注:目前没见该词适合翻译)种错每脚本写段帮助性文字用我四heredocuments必用echo函数行行输"Heredocument"heredocument段特殊目代码块.使用I/O重定向形式命令序列传递交互程序或者命令,比ftp,cat,或者ex文本编辑器.1COMMANDlimitstring用划定命令序列范围(译者注:两相同limitstring间命令序列).特殊符号heredocument形式看:1#!/bin/bash2interactive-program选择名字非诡异limitstring避免命令列表limitstring重名问题.面例该例我文件进行重命名并且使用heredocuments打印帮助:#!/bin/sh#wehavelessthan3arguments.Printthehelptext:if[$#-lt3];thencat4)函数您写些稍微复杂些程序您发现程序能几使用相同代码并且您发现我使用函数便函数:functionname(){#insidethebody$#$2thesecondbody}您需要每程序始函数进行声明面叫做xtitlebar脚本使用脚本您改变终端窗口名称使用叫做help函数您看定义函数使用两#!/bin/sh#vim:setsw=4ts=4et:help(){catshiftby2--)shift;break;;#endofoptions-*)echo"error:nosuchoption$1.-hforhelp";exit1;;*)break;;esacdoneecho"opt_fis$opt_f"echo"opt_lis$opt_l"echo"firstargis$1"echo"2ndargis$2"您运行该脚本:cmdparser-lhello-f---somefile1somefile2返结:opt_fis1opt_lishellofirstargis-somefile12ndargissomefile2脚本何工作呢脚本首先所输入命令行参数进行循环输入参数与case表达式进行比较匹配则设置变量并且移除该参数根据unix系统惯例首先输入应该包含减号参数.第2部实例现我讨论编写脚本般步骤任何优秀脚本都应该具帮助输入参数并且写伪脚本(framework.sh)该脚本包含数脚本都需要框架结构非错主意候写新脚本我需要执行命令:cpframework.shmyscript再插入自函数让我再看两例:(1)二进制十进制转换脚本b2d二进制数(比1101)转换相应十进制数用expr命令进行数运算例:#!/bin/sh#vim:setsw=4ts=4et:help(){cat第3部:调试简单调试命令使用echo命令您使用echo任何怀疑错打印任何变量值绝数shell程序员要花费80%间调试程序原Shell程序处于需要重新编译插入echo命令需要少间shell真实调试模式脚本"strangescript"错误您进行调试:sh-xstrangescript执行该脚本并显示所变量值shell需要执行脚本检查语模式使用:sh-nyour_script返所语错误调试shell程序程用户刚编写完Shell程序避免错误我利用Bsh提供跟踪选项该选项显示刚刚执行命令及参数用户通set命令打-x选项或启Shell使用-x选项Shell设置跟踪模式例面代码ice_tx:if[$#-eq0]thenecho"usage:sumintsintegerlist"exit1fisum=0until[$#-eq0]dosum='expr$sum+$1'shiftdoneecho$sum我用跟踪模式运行:$sh-xice_tx234结显示:+[3-eq0]+sum=0+[3-eq0]+expr0+2+sum=2+shift+[2-eq0]+expr2+3+sum=5+shift+[1-eq0]+expr5+4+sum=9+[0-eq0]+echo99面看跟踪模式Shell显示执行每条命令及该命令使用变量替换参数值些控制字if、then、until等没显示

‘叁’ 如何用C语言实现数据压缩

首先选择一个压缩算法

然后按照算法实现压缩代码,调用接口就可以
常见的 可以使用哈夫曼编码压缩,或者使用开源的压缩代码,比如lzo, gzip, lzma等等。

‘肆’ 急求一道c语言编程的答案!!时间急迫!!快快!!

问问题的该不会是。。。。xgd的吧。。。
你够可以的~~~不想自己做还搜难度系数最大的。。。

自己做个数学型的就行了呗。。那些里有特简单的。

‘伍’ 求一个C语言写的运行在Linux上的bz2和gz格式的文本压缩代码。。。

在线等?几天了?

还是先回答问题吧,c语言运行时分配内存是用malloc()函数,它是向操作系统提出内存申请,然后由操作系统完成内存的分配,最后把分配的内存的首地址返回给程序。例如,我想申请一个4字节的内存,我就void *p=malloc(4);

释放不用的内存就用free,例如释放上面的那4字节,我就free(p);

就是这样子。
我可以帮助你,你先设置我最佳答案后,我网络Hii教你。

‘陆’ 想在linux上用C实现gzip压缩与解压缩,有没有相关库函数可以调用

linux下只支持tar.gz和tgz等格式.zip它是读取不出来的!请您先用u盘把linux系统下的文件拷贝到windows系统下进行压缩和解压处理,处理完成放到u盘里带到linux系统中,不过我不觉得linux系统会支持zip
bz2格式...
建议您用虚拟机加载linux系统

‘柒’ C语言有哪些优秀的开源库

太多了
由于Linux开源
所以 导致各种功能的C开源库无数
包括所有Linux常用功能,都是开源的
几个简单的例子, Linux本身, busybox, QT, gzip, png, jpeg, ffmpeg...

‘捌’ 用c语言写一个http头文件查找函数。

#include <stdio.h>

char * xxx(char *all, char *target){
int i,j,k;
static char t[80];
j = strlen(all);
k = strlen(target);
printf("j=%d k=%d\n",j,k);
for (i=0;i<j-k-1;i++){
if (strncmp(&all[i],target,k)==0) { sscanf( &all[i+k+1],"%s",t);
printf("t = %s\n",t);
break;}
}
return t;
}

main(){
char all[]="GET / HTTP/1.1 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Sec-WebSocket-Key: mHCYmHhGCn44x+g6quuzYg== Cache-Control: no-cache";
char txt[]="Sec-WebSocket-Key:";
char trs[80];
printf("%s",xxx(all,txt));
}
---------
注意 char all[]=" ...." ; 写在1行,或通过文件读入。
char txt[]="Sec-WebSocket-Key:"; 字符串里的冒号不要漏掉,
若不写冒号,计算sscanf位置 时要再加1。sscanf( &all[i+k+2],"%s",t);

‘玖’ 请教打tar包用c语言如何实现

分别是四个参数 x : 从 tar 包中把文件提取出来 z : 表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压 v : 显示详细信息 f xxx.tar.gz : 指定被处理的文件是 xxx.tar.gz

‘拾’ 怎么用c语言将.zip文件解压成文件夹

简单一点的 直接调用系统命令
比如system("unzip ___filename___ -d target_path");
这样做 实际就相当于在命令行下敲了这样的一个命令
不过 这个要求系统内 必须安装了unzip这个软件 即支持这个命令

复杂一些的 你可以再网上找一个开源的gzip 很多很好找的 然后看懂代码 调用对应的接口函数
这样做的好处不需要依赖系统环境