『壹』 請問如何用c語言寫一個輸入路徑,壓縮和解壓文件的代碼 能分享一下源碼嗎 我想學習一下
這個如果是在linux下面的話可以調用系統自帶的壓縮工具
大致給你說一下步驟吧。具體還是靠你自己實現
輸入路徑。這個就不多說。scanf
分析輸入的文件路徑,或者後綴名。然後調用 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 很多很好找的 然後看懂代碼 調用對應的介面函數
這樣做的好處不需要依賴系統環境