當前位置:首頁 » 網路管理 » c語言如何刪除用戶組
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言如何刪除用戶組

發布時間: 2023-01-22 02:59:42

Ⅰ 最常用DOS命令

DOS命令全集

一)MD——建立子目錄
1.功能:創建新的子目錄
2.類型:內部命令
3.格式:MD[盤符:][路徑名]〈子目錄名〉
4.使用說明:

(1)「盤符」:指定要建立子目錄的磁碟驅動器字母,若省略,則為當前驅動器;
(2)「路徑名」:要建立的子目錄的上級目錄名,若預設則建在當前目錄下。

例:(1)在C盤的根目錄下創建名為FOX的子目錄;(2)在FOX子目錄下再創建USER子目錄。
C:、>MD FOX (在當前驅動器C盤下創建子目錄FOX)
C:、>MD FOX 、USER (在FOX 子目錄下再創建USER子目錄)
(二)CD——改變當前目錄
1.功能:顯示當前目錄
2.類型:內部命令
3.格式:CD[盤符:][路徑名][子目錄名]
4.使用說明:
(1)如果省略路徑和子目錄名則顯示當前目錄;
(2)如採用「CD、」格式,則退回到根目錄;
(3)如採用「CD.。」格式則退回到上一級目錄。
例:(1)進入到USER子目錄;(2)從USER子目錄退回到子目錄;(3)返回到根目錄。
C:、>CD FOX 、USER(進入FOX子目錄下的USER子目錄)
C:、FOX、USER>CD.。 (退回上一級根目錄)
C:、FOX>CD、 (返回到根目錄)
C:、>
(三)RD——刪除子目錄命令
1.功能:從指定的磁碟刪除了目錄。
2.類型:內部命令
3.格式:RD[盤符:][路徑名][子目錄名]
4.使用說明:
(1)子目錄在刪除前必須是空的,也就是說需要先進入該子目錄,使用DEL(刪除文件的命令)將其子目錄下的文件刪空,然後再退回到上一級目錄,用RD命令刪除該了目錄本身;
(2)不能刪除根目錄和當前目錄。
例:要求把C盤FOX子目錄下的USER子目錄刪除,操作如下:
第一步:先將USER子目錄下的文件刪空;
C、>DEL C:、FOX、USER、*。*
第二步,刪除USER子目錄。
C、>RD C:、FOX、USER
(四)DIR——顯示磁碟目錄命令
1.功能:顯示磁碟目錄的內容。
2.類型:內部命令
3.格式:DIR [盤符][路徑][/P][/W]
4. 使用說明:/P的使用;當欲查看的目錄太多,無法在一屏顯示完屏幕會一直往上卷,不容易看清,加上/P參數後,屏幕上會分面一次顯示23行的文件信息,然後暫停,並提示;Press any key to continue
/W的使用:加上/W只顯示文件名,至於文件大小及建立的日期和時間則都省略。加上參數後,每行可以顯示五個文件名。
PATH——路徑設置命令
1.功能:設備可執行文件的搜索路徑,只對文件有效。
2.類型:內部命令
3.格式:PATH[盤符1]目錄[路徑名1]{[;盤符2:],〈目錄路徑名2〉…}
4.使用說明:
(1)當運行一個可執行文件時,DOS會先在當前目錄中搜索該文件,若找到則運行之;若找不到該文件,則根據PATH命令所設置的路徑,順序逐條地到目錄中搜索該文件;
(2)PATH命令中的路徑,若有兩條以上,各路徑之間以一個分號「;」隔開;
(3)PATH命令有三種使用方法:
PATH[盤符1:][路徑1][盤符2:][路徑2]…(設定可執行文件的搜索路徑)
PATH:(取消所有路徑)
PATH:(顯示目前所設的路徑)
(六)TREE——顯示磁碟目錄結構命令
1.功能:顯示指定驅動器上所有目錄路徑和這些目錄下的所有文件名。
2.類型:外部命令
3.格式:TREE[盤符:][/F][》PRN]
4.使用說明:
(1)使用/F參數時顯示所有目錄及目錄下的所有文件,省略時,只顯示目錄,不顯示目錄下的文件;
(2)選用>PRN參數時,則把所列目錄及目錄中的文件名列印輸出。
(七)DELTREE——刪除整個目錄命令
1.功能:將整個目錄及其下屬子目錄和文件刪除。
2.類型:外部命令
3.格式:DELTREE[盤符:]〈路徑名〉
4.使用說明:該命令可以一步就將目錄及其下的所有文件、子目錄、更下層的子目錄一並刪除,而且不管文件的屬性為隱藏、系統或只讀,只要該文件位於刪除的目錄之下,DELTREE都一視同仁,照刪不誤。使用時務必小心!!!

五、磁碟操作類命令

(一)FORMAT——磁碟格式化命令
1.功能:對磁碟進行格式化,劃分磁軌和扇區;同時檢查出整個磁碟上有無帶缺陷的磁軌,對壞道加註標記;建立目錄區和文件分配表,使磁碟作好接收DOS的准備。
2.類型:外部命令
3.格式:FORMAT〈盤符:〉[/S][/4][/Q]
4.使用說明:
(1)命令後的盤符不可預設,若對硬碟進行格式化,則會如下列提示:WARNING:ALL DATA ON NON ——REMOVABLE DISK
DRIVE C:WILL BE LOST !
Proceed with Format (Y/N)?
(警告:所有數據在C盤上,將會丟失,確實要繼續格式化嗎?)
(2)若是對軟盤進行格式化,則會如下提示:Insert mew diskette for drive A;
and press ENTER when ready…
(在A驅中插入新盤,准備好後按回車鍵)。
(3)選用[/S]參數,將把DOS系統文件IO.SYS 、MSDOS.SYS及COMMAND.COM復制到磁碟上,使該磁碟可以做為DOS啟動盤。若不選用/S參數,則格式化後的磙盤只能讀寫信息,而不能做為啟動盤;
(4)選用[/4]參數,在1.2MB的高密度軟碟機中格式化360KB的低密度盤;
(5)選用[/Q]參數,快速格式化,這個參數並不會重新劃分磁碟的磁軌貌岸然和扇區,只能將磁碟根目錄、文件分配表以及引導扇區清成空白,因此,格式化的速度較快。
(6)選用[/U]參數,表示無條件格式化,即破壞原來磁碟上所有數據。不加/U,則為安全格式化,這時先建立一個鏡象文件保存原來的FAT表和根目錄,必要時可用UNFORRMAT恢復原來的數據。
(二)UNFORMAT恢復格式化命令
1.功能:對進行過格式化誤操作丟失數據的磁碟進行恢復。
2.類型:外部命令
3.格式:UNFORMAT〈盤符〉[/L][/U][/P][/TEST]
4.使用說明:用於將被「非破壞性」格式化的磁碟恢復。根目錄下被刪除的文件或子目錄及磁碟的系統扇區(包括FAT、根目錄、BOOT扇區及硬碟分區表)受損時,也可以用UNFORMAT來搶救。
(1)選用/L參數列出找到的子目錄名稱、文件名稱、大孝日期等信息,但不會真的做FORMAT工作。
(2)選用/P參數將顯示於屏幕的報告(包含/L參數所產生的信息)同時也送到列印機。運行時屏幕會顯示:「Print out will be sent to LPT1」
(3)選用/TEST參數只做模擬試驗(TEST)不做真正的寫入動作。使用此參數屏幕會顯示:「Simulation only」
(4)選用/U參數不使用MIRROR映像文件的數據,直接根據磁碟現狀進行UNFORMAT。
(5)選用/PSRTN;修復硬碟分區表。
若在盤符之後加上/P、/L、/TEST之一,都相當於使用了/U參數,UNFORMAT會「假設」此時磁碟沒有MIRROR映像文件。
注意:UNFORMAT對於剛FORMAT的磁碟,可以完全恢復,但FORMAT後若做了其它數據的寫入,則UNFORMAT就不能完整的救回數據了。UNFORMAT並非是萬能的,由於使用UNFORMAT會重建FAT與根目錄,所以它也具有較高的危險性,操作不當可能會擴大損失,如果僅誤刪了幾個文件或子目錄,只需要利用UNDELETE就夠了。
三) CHKDSK——檢查磁碟當前狀態命令
1.功能:顯示磁碟狀態、內存狀態和指定路徑下指定文件的不連續數目。
2.類型:外部命令
3.格式:CHKDSK [盤符:][路徑][文件名][/F][/V]
4.使用說明:
(1)選用[文件名]參數,則顯示該文件佔用磁碟的情況;
(2)選[/F]參數,糾正在指定磁碟上發現的邏輯錯誤;
(3)選用[/V]參數,顯示盤上的所有文件和路徑。
(四)DISKCOPY——整盤復制命令
1.功能:復制格式和內容完全相同的軟盤。
2.類型:外部命令
3.格式:DISKCOPY[盤符1:][盤符2:]
4.使用說明:
(1)如果目標軟盤沒有格式化,則復制時系統自動選進行格式化。
(2)如果目標軟盤上原有文件,則復制後將全部丟失。
(3)如果是單驅動器復制,系統會提示適時更換源盤和目標盤,請操作時注意分清源盤和目標盤。
(五)LABEL——建立磁碟卷標命令
1.功能:建立、更改、刪除磁碟卷標。
2.類型:外部命令
3.格式:LABEL[盤符:][卷標名]
4.使用說明:
(1)卷標名為要建立的卷標名,若預設此參數,則系統提示鍵入卷標名或詢問是否刪除原有的卷標名;
(2)卷標名由1至11個字元組成。
(六)VOL——顯示磁碟卷標命令
1.功能:查看磁碟卷標號。
2.類型:內部命令
3.格式:VOL[盤符:]
4.使用說明:省略盤符,顯示當前驅動器卷標。
(七)SCANDISK——檢測、修復磁碟命令
1.功能:檢測磁碟的FAT表、目錄結構、文件系統等是否有問題,並可將檢測出的問題加以修復。
2.類型:外部命令
3.格式:SCANDISK[盤符1:]{[盤符2:]…}[/ALL]
4.使用說明:
(1)CCANDISK適用於硬碟和軟盤,可以一次指定多個磁碟或選用[/ALL]參數指定所有的磁碟;
(2)可自動檢測出磁碟中所發生的交叉連接、丟失簇和目錄結構等邏輯上的錯誤,並加以修復。
(八)DEFRAG——重整磁碟命令
1.。功能:整理磁碟,消除磁碟碎塊。
2.類型:外部命令
3.格式:DEFRAG[盤符:][/F]
4.使用說明:選用/F參數,將文件中存在盤上的碎片消除,並調整磁碟文件的安排,確保文件之間毫無空隙。從而加快讀盤速度和節省磁碟空間。
(九)SYS——系統復制命令
1.功能:將當前驅動器上的DOS系統文件IO.SYS,MSDOS.SYS和COMMAND.COM 傳送到指定的驅動器上。
2.類型:外部命令
3.格式:SYS[盤符:]
*使用說明:如果磁碟剩餘空間不足以存放系統文件,則提示:No roomfor on destination disk.
文件操作類命令
(一) COPY文件復制命令
1.功能:拷貝一個或多個文件到指定盤上。
2.類型:內部命令
3.格式:COPY [源盤][路徑]〈源文件名〉[目標盤][路徑][目標文件名]
4.使用說明:
(1)COPY是文件對文件的方式復制數據,復制前目標盤必須已經格式化;
(2)復制過程中,目標盤上相同文件名稱的舊文件會被源文件取代;
(3)復制文件時,必須先確定目標般有足夠的空間,否則會出現;insufficient的錯誤信息,提示磁碟空間不夠;
(4)文件名中允許使用通配舉「*」「?」,可同時復制多個文件;
(5)COPY命令中源文件名必須指出,不可以省略。
(6)復制時,目標文件名可以與源文件名相同,稱作「同名拷貝」此時目標文件名可以省略;
(7)復制時,目標文件名也可以與源文件名不相同,稱作「異名拷貝」,此時,目標文件名不能省略;
(8)復制時,還可以將幾個文件合並為一個文件,稱為「合並拷貝」,格式如下:COPY;[源盤][路徑]〈源文件名1〉〈源文件名2〉…[目標盤][路徑]〈目標文件名〉;
(9)利用COPY命令,還可以從鍵盤上輸入數據建立文件,格式如下:COPY CON [盤符:][路徑]〈文件名〉;
(10)注意:COPY命令的使用格式,源文件名與目標文件名之間必須有空格!
(二)XCOPY——目錄復制命令
1.功能:復制指定的目錄和目錄下的所有文件連同目錄結構。
2.類型:外部命令
3.格式:XCOPY [源盤:]〈源路徑名〉[目標盤符:][目標路徑名][/S][/V][/E]
4.使用說明:
(1)XCOPY是COPY的擴展,可以把指定的目錄連文件和目錄結構一並拷貝,但不能拷貝隱藏文件和系統文件;
(2)使用時源盤符、源目標路徑名、源文件名至少指定一個;
(3)選用/S時對源目錄下及其子目錄下的所有文件進行COPY。除非指定/E參數,否則/S不會拷貝空目錄,若不指定/S參數,則XCOPY只拷貝源目錄本身的文件,而不涉及其下的子目錄;
(4)選用/V參數時,對的拷貝的扇區都進行較驗,但速度會降低。
(三)TYPE——顯示文件內容命令
1.功能:顯示ASCII碼文件的內容。
2.類型:內部命令。
3.格式:TYPE[盤符:][路徑]〈文件名〉
4.使用說明:
(1)顯示由ASCII碼組成的文本文件,對。EXE.COM等為擴展名的文件,其顯示的內容是無法閱讀的,沒有實際意義2;
(2)該命令一次只可以顯示一個文件的內容,不能使用通配符;
(3)如果文件有擴展名,則必須將擴展名寫上;
(4)當文件較長,一屏顯示不下時,可以按以下格式顯示;TYPE[盤符:][路徑]〈文件名〉|MORE,MORE為分屏顯示命令,使用些參數後當滿屏時會暫停,按任意鍵會繼續顯示。
(5)若需將文件內容列印出來,可用如下格式:
TYPE[盤符:][路徑]〈文件名〉,>PRN
此時,列印機應處於聯機狀態。
(四) REN——文件改名命令
1.功能:更改文件名稱
2.類型:內部命令
3.格式:REN[盤符:][路徑]〈舊文件名〉〈新文件名〉
4.使用說明:
(1)新文件名前不可以加上盤符和路徑,因為該命令只能對同一盤上的文件更換文件名;
(2)允許使用通配符更改一組文件名或擴展名。
(五)FC——文件比較命令
1.功能:比較文件的異同,並列出差異處。
2.類型:外部命令
3.格式:FC[盤符:][路徑名]〈文件名〉[盤符:][路徑名][文件名][/A][/B][/C][/N]
4.使用說明:
(1)選用/A參數,為ASCII碼比較模式;
(2)選用/B參數,為二進制比較模式;
(3)選用/C參數,將大小寫字元看成是相同的字元。
(4)選用/N參數,在ASCII碼比較方式下,顯示相異處的行號。
(六)ATTRIB——修改文件屬性命令
1.功能:修改指定文件的屬性。(文件屬性參見2.5.4(二)文件屬性一節)
2.類型:外部命令。
3.格式:ATTRIB[文件名][R][——R][A][——A][H][——H][——S]
4.使用說明:
(1)選用R參數,將指定文件設為只讀屬性,使得該文件只能讀取,無法寫入數據或刪除;選用——R參數,去除只讀屬性;
(2)選用A參數,將文件設置為檔案屬性;選用——A參數,去除檔案屬性;
(3)選用H參數,將文件調協為隱含屬性;選用——H參數,去隱含屬性;
(4)選用S參數,將文件設置為系統屬性;選用——S參數,去除系統屬性;
(5)選用/S參數,對當前目錄下的所有子目錄及作設置。
七) DEL——刪除文件命令
1.功能:刪除指定的文件。
2.類型:內部命令
3.格式:DEL[盤符:][路徑]〈文件名〉[/P]
4.使用說明:
(1)選用/P參數,系統在刪除前詢問是否真要刪除該文件,若不使用這個參數,則自動刪除;
(2)該命令不能刪除屬性為隱含或只讀的文件;
(3)在文件名稱中可以使用通配符;
(4)若要刪除磁碟上的所有文件(DEL*·*或DEL·),則會提示:(Arey ou sure?)(你確定嗎?)若回答Y,則進行刪除,回答N,則取消此次刪除作業。
(八) UNDELETE——恢復刪除命令
1.功能:恢復被誤刪除命令
2.類型:外部命令。
3.格式:UNDELETE[盤符:][路徑名]〈文件名〉[/DOS]/LIST][/ALL]
4.使用說明:使用UNDELETE可以使用「*」和「?」通配符。
(1)選用/DOS參數根據目錄里殘留的記錄來恢復文件。由於文件被刪除時,目錄所記載斬文件名第一個字元會被改為E5,DOS即依據文件開頭的E5和其後續的字元來找到欲恢復的文件,所以,UNDELETE會要求用戶輸入一個字元,以便將文件名字補齊。但此字元不必和原來的一樣,只需符合DOS的文件名規則即可。
(2)選用/LIST只「列出」符合指定條件的文件而不做恢復,所以對磁碟內容完全不會有影響。
(3)選用/ALL自動將可完全恢復的文件完全恢復,而不一一地詢問用戶,使用此參數時,若UNDELTE利用目錄里殘留的記錄來將文件恢復,則會自動選一個字元將文件名補齊,並且使其不與現存文件名相同,選用字元的優選順序為:#%——0000123456789A~Z。
UNDELETE還具有建立文件的防護措施的功能,已超出本課程授課范圍,請讀者在使用些功能時查閱有關DOS手冊。
七、其它命令
(一)CLS——清屏幕命令
1功能:清除屏幕上的所有顯示,游標置於屏幕左上角。
2類型:內部命令
3格式:CLS
(二) VER查看系統版本號命令
1功能:顯示當前系統版本號
2類型:內部命令
3格式:VER
(三) DATA日期設置命令
1功能:設置或顯示系統日期。
2類型:內部命令
3格式:DATE[mm——dd——yy]
4使用說明:
(1)省略[mm——dd——yy]顯示系統日期並提示輸入新的日期,不修改則可直接按回車鍵,[mm——dd——yy]為「月月——日日——年年」格式;
(2)當機器開始啟動時,有自動處理文件(AUTOEXEC.BAT)被執行,則系統不提示輸入系統日期。否則,提示輸入新日期和時間。
(四) TIME系統時鍾設置命令
1功能:設置或顯示系統時期。
2類型:內部命令
3格式:TIME[hh:mm:ss:xx]
4使用說明:
(1)省略[hh:mm:ss:xx],顯示系統時間並提示輸入新的時間,不修改則可直接按回車鍵,[hh:mm:ss:xx]為「小時:分鍾:秒:百分之幾秒」格式;
(2)當機器開始啟動時,有自動處理文件(AUTOEXEC.BAT)被執行,則系統不提示輸入系統日期。否則,提示輸入新日期和時間。
(五)MEM查看當前內存狀況命令
1功能:顯示當前內存使用的情況
2類型:外部命令
3格式:MEM[/C][/F][/M][/P]
4使用說明:
(1)選用/C參數列出裝入常規內存和CMB的各文件的長度,同時也顯示內存空間的使用狀況和最大的可用空間;
(2)選用/F參數分別列出當前常規內存剩餘的位元組大小和UMB可用的區域及大小;
(3)選用/M參數顯示該模塊使用內存地地址、大小及模塊性質;
(4)選用/P參數指定當輸出超過一屏時,暫停供用戶查看。
(六) MSD顯示系統信息命令
1功能:顯示系統的硬體和操作系統的狀況。
2類型:外部命令
3格式:MSD[/I][/B][/S]
4使用說明:
(1)選用/I參數時,不檢測硬體;
(2)選用/B參數時,以黑白方式啟動MSD;
(3)選用/S參數時,顯示出簡明的系統報告。

net命令全集

網路命令之:net命令

許多 Windows NT 網路命令以 net 開始。這些 net 命令有一些公共屬性:
通過鍵入 net /? 可查閱所有可用的 net 命令。
通過鍵入 net help 命令可在命令行中獲得 net 命令的語法幫助。例如,要得到 net acco
unts 命令的幫助,請鍵入 net help accounts。
所有 net 命令接受選項 / yes 和 /no(可縮寫為 / y 和 /n )。/ y 對命令產生的任何交
互提示自動回答「是」,/n 回答「否」。例如,net stop server 通常提示確認是否根據服
務器服務結束所有服務,net stop server /y 自動回答「是」並關閉伺服器服務。

Net Accounts

更新用戶帳號資料庫、更改密碼及所有帳號的登錄要求。必須要在更改帳號參數的計算機上
運行網路登錄服務。
net accounts [/forcelogoff:{minutes | no}] [/minpwlen:length] [/maxpwage:{days |
unlimited}] [/minpwage:days] [/uniquepw:number] [/domain]
net accounts [/sync] [/domain]
參數

鍵入不帶參數的 net accounts,將顯示當前密碼設置、登錄時限及域信息。
/forcelogoff:{minutes | no}
設置當用戶帳號或有效登錄時間過期時,結束用戶和伺服器會話前的等待時間。no 選項禁止
強行注銷。該參數的默認設置為 no。
指定 /forcelogoff:minutes 之後,Windows NT 在其強制用戶退出網路 minutes 分鍾之前
,將給用戶發出警報。如果還有打開的文件,Windows NT 將警告用戶。如果 minutes 小於
兩分鍾,Windows NT 警告用戶立即從網路注銷。
/minpwlen:length
設置用戶帳號密碼的最少字元數。允許范圍是 0-14,默認值為 6。
/maxpwage:{days | unlimited}
設置用戶帳號密碼有效的最大天數。unlimited 不設置最大天數。/maxpwage 選項的天數必
須大於 /minpwage。允許范圍是 1-49,710 天 (unlimited)。默認值為 90 天。
/minpwage:days
設置用戶必須保持原密碼的最小天數。 0 值不設置最小時間。允許范圍是 0-49,710 天,默
認值為 0 天。
/uniquepw:number
要求用戶更改密碼時,必須在經過 number 次後,才能重復使用與之相同的密碼。允許范圍
是 0-8。默認值為 5。
/domain
在當前域的主域控制器上執行該操作。否則只在本地計算機執行操作。
該參數僅用於 Windows NT Server 域中的 Windows NT Workstation 計算機,Windows NT
Server 計算機默認為在主域控制器執行操作。
/sync
當用於主域控制器時,該命令使域中所有備份域控制器同步;當用於備份域控制器時,該命
令僅使該備份域控制器與主域控制器同步。該命令僅適用於 Windows NT Server 域成員的計
算機。

Net Computer

從域資料庫中添加或刪除計算機。該命令僅在運行 Windows NT Server 的計算機上可用。
net computer \computername {/add | /del}
參數
\computername
指定要添加到域或從域中刪除的計算機。
/add
將指定計算機添加到域。
/del
將指定計算機從域中刪除。

Net Config

顯示當前運行的可配置服務,或顯示並更改某項服務的設置。
net config [service [options]]
參數

鍵入不帶參數的 net config 將顯示可配置服務的列表。
service
通過 net config 命令進行配置的服務(server 或 workstation)。
options
服務的特定選項。完整語法請參閱 net config server 或 net config workstation。

Net Config Server

運行服務時顯示或更改伺服器的服務設置。
net config server [/autodisconnect:time] [/srvcomment:"text "] [/hidden:{yes | n
o}]
參數

鍵入不帶參數的 net config server,將顯示伺服器服務的當前配置。
/autodisconnect:time
設置斷開前用戶會話閑置的最大時間值。可以指定 -1,表示永不斷開連接。允許范圍是 -1
-65535 分鍾,默認值是 15 分鍾。
/srvcomment:"text "
為伺服器添加註釋,可以通過 net view 命令在屏幕上顯示所加註釋。注釋最多可達 48 個
字元,文字要用引號引住。
/hidden:{yes | no}
指定伺服器的計算機名是否出現在伺服器列表中。請注意隱含某個伺服器並不改變該伺服器
的許可權。默認為 no。

Net Config Workstation

服務運行時,顯示或更改工作站各項服務的設置。
net config workstation [/charcount:bytes] [/chartime:msec] [/charwait:sec]
參數

鍵入不帶參數的 net config workstation 將顯示本地計算機的當前配置。
/charcount:bytes
指定 Windows NT 在將數據發送到通訊設備之前收集的數據量。如果同時設置 /chartime:m
sec 參數,Windows NT 按首先滿足條件的選項運行。允許范圍是 0-65535 位元組,默認值是
16 位元組。
/chartime:msec
指定 Windows NT 在將數據發送到通訊設備之前收集數據的時間。如果同時設置 /charcoun
t:bytes 參數,Windows NT 按首先滿足條件的選項運行。允許范圍是 0-65535000 毫秒,默
認值是 250 毫秒。
/charwait:sec
設置 Windows NT 等待通訊設備變為可用的時間。允許的范圍是 0-65535 秒,默認值是 36
00 秒。

Net Continue

重新激活掛起的服務。
net continue service
參數
service
能夠繼續運行的服務,包括: file server for macintosh(該服務僅限於 Windows NT Se
rver), ftp publishing service, lpdsvc, net logon, network dde,network dde dsdm
,nt lm security support provider,remoteboot(該服務僅限於 Windows NT Server),
remote access server, schele,server,simple tcp/ip services 及 workstation 。

Net File

顯示某伺服器上所有打開的共享文件名及鎖定文件數。該命令也可以關閉個別文件並取消文
件鎖定。
net file [id [/close]]
參數

鍵入不帶參數的 net file 可獲得伺服器上打開文件的列表。
id
文件標識號。
/close
關閉打開的文件並釋放鎖定記錄。請從共享文件的伺服器中鍵入該命令。

Net Group

在 Windows NT Server 域中添加、顯示或更改全局組。該命令僅在 Windows NT Server 域
中可用。
net group [groupname [/comment:"text "]] [/domain]
net group groupname {/add [/comment:"text "] | /delete} [/domain]
net group groupname username [ ...] {/add | /delete} [/domain]
參數

鍵入不帶參數的 net group 可以顯示伺服器名稱及伺服器的組名稱。
groupname
要添加、擴展或刪除的組。僅提供某個組名便可查看組中的用戶列表。
/comment:"text "
為新建組或現有組添加註釋。注釋最多可以是 48 個字元,並用引號將注釋文字引住。
/domain
在當前域的主域控制器中執行該操作,否則在本地計算機上執行操作。
該參數僅用於作為 Windows NT Server 域成員的 Windows NT Workstation 計算機。Windo
ws NT Server 計算機默認為在主域控制器中操作。
username[ ...]
列表顯示要添加到組或從組中刪除的一個或多個用戶。使用空格分隔多個用戶名稱項。
/add
添加組或在組中添加用戶名。必須使用該命令為添加到組中的用戶建立帳號。
/delete
刪除組或從組中刪除用戶名。

Net Help

提供網路命令列表及幫助主題,或提供指定命令或主題的幫助。可用網路命令列於 N 下面的
「命令參考」中「命令」窗口內。
net help [command]
net command {/help | /?}
參數

鍵入不帶參數的 net

Ⅱ 大一c語言編程題

車票根據題意兩兩站點連線生成,金額和數量分別用隨機數。

數據存儲:站點,車票,用戶分別為3個結構體,用於對應資料庫。

購買流程:檢查輸入數值有效性->檢查車票庫存->購買成功同步修改用戶購買流水及車票庫存。(這里題目需求不明確,沒有指明用戶購買方式),我的代碼允許一個用戶同時購買多種票,每種票可分批購買多張。購買流水記錄自動增加和更新。

退票流程:檢查輸入和用戶購買記錄,同步更新用戶及車票信息。

刪除流程:選擇刪除沒有被用戶購買的票(函數檢查所有用戶,雖然本題只要一個用戶,實際傳參用戶數組首地址)。

PS: 這個題目涉及到增刪改,用鏈表來寫更好,但考慮你學習范圍,沒有使用鏈表而是動態數組,動態數組刪除,考慮內存佔用,不僅要需循環移位還要釋放多餘地址。

另外整體程序,異常的處理我只是單純返回0或者1或者-1區分基本的成功與失敗。你如想對個別異常進行特殊處理,自行修改返回值,接收判斷。

下面是代碼:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

#include <windows.h>

#include <conio.h>

#define MS 5//最大站點數

typedef struct station

{

char sid[10];

char sName[20];

}STN;

typedef struct ticket

{

int tid;//票編號

STN *ssP;//起始站

STN *tsP;//終點站

int value;//票價

int number;//數量

}TKT;

typedef struct userInfo//用戶

{

char uid[20];//身份證號

int cnt;//購買的票種類數量

int *btids;//購買的所有票id數組

int *btNum;//購買的所有票數量數組

}UIFO;

int init(STN stns[MS],TKT **tkts);//初始化車站、票數據

int disAllTickets(TKT *tkts);

int buyTicket(UIFO *uifo,TKT *tkts);//異常返回0

int reTicket(UIFO *uifo,TKT *tkts);//異常返回0

int showMenu(UIFO *uifo,TKT *tkts);

int delIntByIndex(int *nums,int len,int index);//通過下標index刪除動態整型數組nums對應元素,並釋放多餘地址,返回刪除後的數組長度,異常返回-1

int delTkts(UIFO *uifos,int len,TKT *tkts);//刪除指定票(檢查用戶組,只要有一個用戶購買,無法刪除)

int cnt;//票種類數量

int main()

{


STN stns[MS];

TKT *tkts=NULL;

UIFO uifo={"321002199902050614",0,NULL,NULL};

srand(time(NULL));

cnt=init(stns,&tkts);

printf("共生成%d組票(每組往返兩種票,共%d種票) ",cnt/2,cnt);

printf("按任意鍵繼續。。。。 "),getch();

system("cls");

showMenu(&uifo,tkts);

return 0;

}

int showMenu(UIFO *uifo,TKT *tkts)

{

int n=5;

printf("(1) Buy ticket ");

printf("(2) Refund ticket ");

printf("(3) Remove ticket ");

printf("(4) Display all tickets ");

printf("(0) Exit ");

while(n<0 || n>4)

scanf("%d",&n);

switch(n)

{

case 0: return 0;

case 1: if(!buyTicket(uifo,tkts)) return 0;break;

case 2: if(!reTicket(uifo,tkts)) return 0;break;

case 3: if(!delTkts(uifo,1,tkts)) return 0;break;

//這里刪除功能,用戶多名,要傳數組首地址,由於演示只有一個用戶(len=對應用戶數),所以只傳該用戶地址(len=1)

case 4: disAllTickets(tkts);break;

}

showMenu(uifo,tkts);

return 1;

}

int disAllTickets(TKT *tkts)

{

int i;

for(i=0;i<cnt;i++)

printf("編號:%2d 路程:%s-%s 票價:%3d 剩餘票數:%d ",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);

printf("按任意鍵繼續。。。。 "),getch();

system("cls");

return 1;

}

int delIntByIndex(int *nums,int len,int index)

{

int i,*temp=NULL;

if(index>len-1) return -1;

for(i=index;i<len-1;i++)

nums[i]=nums[i+1];

len--;

if(len)

{

temp=(int *)realloc(nums,sizeof(int)*len);

if(!temp) return -1;

nums=temp;

}

else

free(nums);

return len;

}

int reTicket(UIFO *uifo,TKT *tkts)

{

int i,j,tid,n,index,len,flag=0;

printf("當前用戶購買記錄: ");

for(i=0;i<uifo->cnt;i++)

{

for(j=0;j<cnt;j++)

if(tkts[j].tid==uifo->btids[i]) index=j;

printf("--車票編號:%d,起末站:%s-%s,購買票數:%d ",uifo->btids[i],tkts[index].ssP->sName,tkts[index].tsP->sName,uifo->btNum[i]);

}

printf("請輸入要退票的車票id及票數:"),scanf("%d%d",&tid,&n);

for(i=0;i<uifo->cnt;i++)

if(uifo->btids[i]==tid && uifo->btNum[i]>=n)

{

for(j=0;j<cnt;j++)

if(tkts[j].tid==uifo->btids[i]) tkts[j].number+=n;//同步修改對應車票剩餘票數

uifo->btNum[i]-=n;//用戶購買記錄修改

if(uifo->btNum[i]==0)//某種車票全部退完,刪除該條記錄

{

len=delIntByIndex(uifo->btNum,uifo->cnt,i);

if(len==-1) return 0;

len=delIntByIndex(uifo->btids,uifo->cnt,i);

if(len==-1) return 0;

uifo->cnt=len;

}

flag=1;

break;

}

if(flag)

printf("退票成功! ");

else

printf("無此購買記錄或輸入數量不符合 ");

printf("按任意鍵繼續。。。。 "),getch();

system("cls");

return 1;

}

int buyTicket(UIFO *uifo,TKT *tkts)

{

char spn[20],tpn[20];

int i,n=-1,index=-1,*temp=NULL;

for(i=0;i<cnt;i++)

printf("編號:%2d 路程:%s-%s 票價:%3d 剩餘票數:%d ",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);

printf("請輸入始發站站名和終點站站名:"),scanf("%s%s",spn,tpn);

for(i=0;i<cnt;i++)

if(strcmp(tkts[i].ssP->sName,spn)==0 && strcmp(tkts[i].tsP->sName,tpn)==0)

{

printf("車票%s-%s 票價:%3d 剩餘票數:%d ",tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);

index=i;

break;

}

if(index==-1)

printf("購買失敗!無此路程的車票 ");

else

{

while(n<=0)

{

printf("請輸入要購買的數量(大於0):"),scanf("%d",&n);

if(tkts[index].number<n)

printf("錯誤:車票數量不足或者輸入數值超出范圍!請重新輸入! "),n=-1;

}

for(i=0;i<uifo->cnt;i++)//檢查用戶購買記錄,重復票累加購買數量,不同票新增記錄

{

if(uifo->btids[i]==tkts[index].tid)

{

printf("該票已購買了%d張,現再次購買%d張,累計購買了%d張 ",uifo->btNum[i],n,uifo->btNum[i]+n);

uifo->btNum[i]+=n;

tkts[index].number-=n;

break;

}

}

if(i==uifo->cnt)//未檢查到重復記錄,新增

{

if(!uifo->btids)

{

uifo->btids=(int *)malloc(sizeof(int));

if(!uifo->btids) return 0;

uifo->btNum=(int *)malloc(sizeof(int));

if(!uifo->btNum) return 0;

}

else

{

temp=(int *)realloc(uifo->btids,sizeof(int)*(uifo->cnt+1));

if(!temp) return 0;

uifo->btids=temp;

temp=(int *)realloc(uifo->btNum,sizeof(int)*(uifo->cnt+1));

if(!temp) return 0;

uifo->btNum=temp;

}

uifo->btids[uifo->cnt]=tkts[index].tid;

printf("該票購買了%d張 ",(uifo->btNum[uifo->cnt]=n));

tkts[index].number-=n;

uifo->cnt++;

printf("用戶購買記錄: ");

for(i=0;i<uifo->cnt;i++)

printf("--車票編號:%d,購買票數:%d ",uifo->btids[i],uifo->btNum[i]);

}

printf("本次成功購買了%s-%s的票%d張! ",tkts[index].ssP->sName,tkts[index].tsP->sName,n);

}

printf("按任意鍵繼續。。。。 "),getch();

system("cls");

return 1;

}

int delTkts(UIFO *uifos,int len,TKT *tkts)//len:所有購買的用戶數量

{

int i,j,k,tid,flag=0,index;

for(i=0;i<cnt;i++)

printf("編號:%2d 路程:%s-%s 票價:%3d 剩餘票數:%d ",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);

printf("請輸入要刪除的車票編號:"),scanf("%d",&tid);

for(i=0;i<cnt;i++)

if(tid==tkts[i].tid)

{

index=i;

flag=1;

for(j=0;j<len;j++)//檢查所有用戶購買記錄

{

for(k=0;k<uifos[j].cnt;k++)

if(uifos[j].btids[k]==tid)

{

flag=0;

printf("該票已被用戶購買,無法刪除,需先完成退票! ");

break;

}

if(!flag)

break;

}

break;

}

if(!flag) printf(" 刪除失敗,輸入數值超出范圍或不可刪除! ");

else

{

cnt--;

if(cnt==0)

{

free(tkts[index].ssP);

free(tkts[index].tsP);

free(&tkts[index]);

}

else

{

free(tkts[index].ssP);

free(tkts[index].tsP);

for(i=index;i<cnt;i++)

tkts[i]=tkts[i+1];

tkts[cnt].ssP=NULL;

tkts[cnt].tsP=NULL;

free(&tkts[cnt]);

}

printf(" 刪除成功! ");

}

printf("按任意鍵繼續。。。。 "),getch();

system("cls");

return 1;

}

int init(STN stns[MS],TKT **tkts)

{

TKT *tTemp=NULL;

int i,j,n,v,cnt=2;

static int id=1;

printf("生成站點: ");

for(i=0;i<MS;i++,id++)

{

sprintf(stns[i].sid,"車站%03d",id);

sprintf(stns[i].sName,"SN%03d",id);

printf("----站點名:%s。站點ID:%s ",stns[i].sid,stns[i].sName);

}

printf("計算所有站點連線,生成車票(票是往返,所以一次生成往返兩組票): ");

for(i=0;i<MS;i++)

for(j=i+1;j<MS;j++)

{

if(!(*tkts))

{

*tkts=(TKT *)malloc(sizeof(TKT)*2);

if(!(*tkts)) return -1;

}

else

{

tTemp=(TKT *)realloc((*tkts),sizeof(TKT)*cnt);

if(!tTemp) return -1;

*tkts=tTemp;

}

n=rand()%4+2;//每種票隨機2~5張(保證總數大於20)

v=rand()%201+50;//隨機生成票價50~250

(*tkts)[cnt-1].tid=cnt;

(*tkts)[cnt-1].ssP=&stns[i];

(*tkts)[cnt-1].tsP=&stns[j];

(*tkts)[cnt-1].value=v;

(*tkts)[cnt-1].number=n;

(*tkts)[cnt-2].tid=cnt-1;

(*tkts)[cnt-2].ssP=&stns[j];

(*tkts)[cnt-2].tsP=&stns[i];

(*tkts)[cnt-2].value=v;

(*tkts)[cnt-2].number=n;

printf("----%s和%s的之間往返票各生成%d張,票價為%d(隨機) ",stns[i].sName,stns[j].sName,n,v);

cnt+=2;

}

return cnt-2;

}

//答題不易,如採納的,請不要無故刪除問題。

Ⅲ c語言對數組進行插入,排序,刪除,替換操作.(求源代碼,謝謝)

刪除函數,刪除ptr中的ptr[in]元素,n是數組原來的長度。
void rmv(int *ptr,int in,const unsigned int n)
{
unsigned int i;
for (i=in; i<n-1; i++) {
*(ptr+i)=*(ptr+i+1);
}
realloc(ptr,sizeof(int)*(n-1));
}

插入函數,在整形數組ptr中的ptr[in]之前插入x,n是原數組的長度

#include <stdio.h>
#include <stdlib.h>

void rmv(int *ptr,int in,const unsigned int n)
{
unsigned int i;
for (i=in; i<n-1; i++) {
*(ptr+i)=*(ptr+i+1);
}
realloc(ptr,sizeof(int)*(n-1));
}
void rin(int *ptr,int in,int x,const unsigned int n)
{
unsigned int i;
realloc(ptr,sizeof(int)*(n+1));
for (i=n; i>in; i--) {
*(ptr+i)=*(ptr+i-1);
}
ptr[in]=x;
}
int main(int argc, char* argv[])
{
int *p,i;
p=calloc(6,sizeof(int));
for (i = 0; i<6; i++) {
p[i]=i;
}
*(p+2)=124;
for (i=0; i<6; i++) {
printf("%d ",p[i]);
}
putchar('\n');
rmv(p,2,6);

for (i=0; i<6; i++) {
printf("%d ",p[i]);
}
rin(p,2,258,5);
putchar('\n');
for (i=0; i<6; i++) {
printf("%d ",p[i]);
}
system("pause");
free(p);
return 0;
}

Ⅳ 怎麼對C語言中的文件進行內容添加,刪除,查找的操作

c語言文件操作

13.3 文件的打開與關閉
文件在進行讀寫操作之前要先打開,使用完畢要關閉。所謂打開文件,實際上是建立文件的各種有關信息,並使文件指針指向該文件,以便進行其它操作。關閉文件則斷開指針與文件之間的聯系,也就禁止再對該文件進行操作。

在C語言中,文件操作都是由庫函數來完成的。在本章內將介紹主要的文件操作函數。

13.3.1 文件的打開(fopen函數)
fopen函數用來打開一個文件,其調用的一般形式為:

文件指針名=fopen(文件名,使用文件方式);

其中,

「文件指針名」必須是被說明為FILE 類型的指針變數;

「文件名」是被打開文件的文件名;

「使用文件方式」是指文件的類型和操作要求。

「文件名」是字元串常量或字元串數組。

例如:

FILE *fp;

fp=("file a","r");

其意義是在當前目錄下打開文件file a,只允許進行「讀」操作,並使fp指向該文件。

又如:

FILE *fphzk

fphzk=("c:\\hzk16","rb")

其意義是打開C驅動器磁碟的根目錄下的文件hzk16,這是一個二進制文件,只允許按二進制方式進行讀操作。兩個反斜線「\\ 」中的第一個表示轉義字元,第二個表示根目錄。

使用文件的方式共有12種,下面給出了它們的符號和意義。

文件使用方式
意義

「rt」
只讀打開一個文本文件,只允許讀數據

「wt」
只寫打開或建立一個文本文件,只允許寫數據

「at」
追加打開一個文本文件,並在文件末尾寫數據

「rb」
只讀打開一個二進制文件,只允許讀數據

「wb」
只寫打開或建立一個二進制文件,只允許寫數據

「ab」
追加打開一個二進制文件,並在文件末尾寫數據

「rt+」
讀寫打開一個文本文件,允許讀和寫

「wt+」
讀寫打開或建立一個文本文件,允許讀寫

「at+」
讀寫打開一個文本文件,允許讀,或在文件末追加數據

「rb+」
讀寫打開一個二進制文件,允許讀和寫

「wb+」
讀寫打開或建立一個二進制文件,允許讀和寫

「ab+」
讀寫打開一個二進制文件,允許讀,或在文件末追加數據

對於文件使用方式有以下幾點說明:

1) 文件使用方式由r,w,a,t,b,+六個字元拼成,各字元的含義是:

r(read): 讀

w(write): 寫

a(append): 追加

t(text): 文本文件,可省略不寫

b(banary): 二進制文件

+: 讀和寫

2) 凡用「r」打開一個文件時,該文件必須已經存在,且只能從該文件讀出。

3) 用「w」打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經存在,則將該文件刪去,重建一個新文件。

4) 若要向一個已存在的文件追加新的信息,只能用「a」方式打開文件。但此時該文件必須是存在的,否則將會出錯。

5) 在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,並作相應的處理。因此常用以下程序段打開文件:

6) if((fp=fopen("c:\\hzk16","rb")==NULL)

{

printf("\nerror on open c:\\hzk16 file!");

getch();

exit(1);

}

這段程序的意義是,如果返回的指針為空,表示不能打開C盤根目錄下的hzk16文件,則給出提示信息「error on open c:\ hzk16 file!」,下一行getch()的功能是從鍵盤輸入一個字元,但不在屏幕上顯示。在這里,該行的作用是等待,只有當用戶從鍵盤敲任一鍵時,程序才繼續執行,因此用戶可利用這個等待時間閱讀出錯提示。敲鍵後執行exit(1)退出程序。

7) 把一個文本文件讀入內存時,要將ASCII碼轉換成二進制碼,而把文件以文本方式寫入磁碟時,也要把二進制碼轉換成ASCII碼,因此文本文件的讀寫要花費較多的轉換時間。對二進制文件的讀寫不存在這種轉換。

8) 標准輸入文件(鍵盤),標准輸出文件(顯示器),標准出錯輸出(出錯信息)是由系統打開的,可直接使用。

13.3.2 文件關閉函數(fclose函數)
文件一旦使用完畢,應用關閉文件函數把文件關閉,以避免文件的數據丟失等錯誤。

fclose函數調用的一般形式是:

fclose(文件指針);

例如:

fclose(fp);

正常完成關閉文件操作時,fclose函數返回值為0。如返回非零值則表示有錯誤發生。

13.4 文件的讀寫
對文件的讀和寫是最常用的文件操作。在C語言中提供了多種文件讀寫的函數:

·字元讀寫函數 :fgetc和fputc

·字元串讀寫函數:fgets和fputs

·數據塊讀寫函數:freed和fwrite

·格式化讀寫函數:fscanf和fprinf

下面分別予以介紹。使用以上函數都要求包含頭文件stdio.h。

13.4.1 字元讀寫函數fgetc和fputc
字元讀寫函數是以字元(位元組)為單位的讀寫函數。每次可從文件讀出或向文件寫入一個字元。

1. 讀字元函數fgetc

fgetc函數的功能是從指定的文件中讀一個字元,函數調用的形式為:

字元變數=fgetc(文件指針);

例如:

ch=fgetc(fp);

其意義是從打開的文件fp中讀取一個字元並送入ch中。

對於fgetc函數的使用有以下幾點說明:

1) 在fgetc函數調用中,讀取的文件必須是以讀或讀寫方式打開的。

2) 讀取字元的結果也可以不向字元變數賦值,

例如:

fgetc(fp);

但是讀出的字元不能保存。

3) 在文件內部有一個位置指針。用來指向文件的當前讀寫位元組。在文件打開時,該指針總是指向文件的第一個位元組。使用fgetc 函數後,該位置指針將向後移動一個位元組。 因此可連續多次使用fgetc函數,讀取多個字元。應注意文件指針和文件內部的位置指針不是一回事。文件指針是指向整個文件的,須在程序中定義說明,只要不重新賦值,文件指針的值是不變的。文件內部的位置指針用以指示文件內部的當前讀寫位置,每讀寫一次,該指針均向後移動,它不需在程序中定義說明,而是由系統自動設置的。

【例13.1】讀入文件c1.doc,在屏幕上輸出。

#include<stdio.h>

main()

{

FILE *fp;

char ch;

if((fp=fopen("d:\\jrzh\\example\\c1.txt","rt"))==NULL)

{

printf("\nCannot open file strike any key exit!");

getch();

exit(1);

}

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

fclose(fp);

}
本常式序的功能是從文件中逐個讀取字元,在屏幕上顯示。程序定義了文件指針fp,以讀文本文件方式打開文件「d:\\jrzh\\example\\ex1_1.c」,並使fp指向該文件。如打開文件出錯,給出提示並退出程序。程序第12行先讀出一個字元,然後進入循環,只要讀出的字元不是文件結束標志(每個文件末有一結束標志EOF)就把該字元顯示在屏幕上,再讀入下一字元。每讀一次,文件內部的位置指針向後移動一個字元,文件結束時,該指針指向EOF。執行本程序將顯示整個文件。

2. 寫字元函數fputc

fputc函數的功能是把一個字元寫入指定的文件中,函數調用的形式為:

fputc(字元量,文件指針);

其中,待寫入的字元量可以是字元常量或變數,例如:

fputc('a',fp);

其意義是把字元a寫入fp所指向的文件中。

對於fputc函數的使用也要說明幾點:

1) 被寫入的文件可以用寫、讀寫、追加方式打開,用寫或讀寫方式打開一個已存在的文件時將清除原有的文件內容,寫入字元從文件首開始。如需保留原有文件內容,希望寫入的字元以文件末開始存放,必須以追加方式打開文件。被寫入的文件若不存在,則創建該文件。

2) 每寫入一個字元,文件內部位置指針向後移動一個位元組。

3) fputc函數有一個返回值,如寫入成功則返回寫入的字元,否則返回一個EOF。可用此來判斷寫入是否成功。

【例13.2】從鍵盤輸入一行字元,寫入一個文件,再把該文件內容讀出顯示在屏幕上。

#include<stdio.h>

main()

{

FILE *fp;

char ch;

if((fp=fopen("d:\\jrzh\\example\\string","wt+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf("input a string:\n");

ch=getchar();

while (ch!='\n')

{

fputc(ch,fp);

ch=getchar();

}

rewind(fp);

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

printf("\n");

fclose(fp);

}

程序中第6行以讀寫文本文件方式打開文件string。程序第13行從鍵盤讀入一個字元後進入循環,當讀入字元不為回車符時,則把該字元寫入文件之中,然後繼續從鍵盤讀入下一字元。每輸入一個字元,文件內部位置指針向後移動一個位元組。寫入完畢,該指針已指向文件末。如要把文件從頭讀出,須把指針移向文件頭,程序第19行rewind函數用於把fp所指文件的內部位置指針移到文件頭。第20至25行用於讀出文件中的一行內容。

【例13.3】把命令行參數中的前一個文件名標識的文件,復制到後一個文件名標識的文件中,如命令行中只有一個文件名則把該文件寫到標准輸出文件(顯示器)中。

#include<stdio.h>

main(int argc,char *argv[])

{

FILE *fp1,*fp2;

char ch;

if(argc==1)

{

printf("have not enter file name strike any key exit");

getch();

exit(0);

}

if((fp1=fopen(argv[1],"rt"))==NULL)

{

printf("Cannot open %s\n",argv[1]);

getch();

exit(1);

}

if(argc==2) fp2=stdout;

else if((fp2=fopen(argv[2],"wt+"))==NULL)

{

printf("Cannot open %s\n",argv[1]);

getch();

exit(1);

}

while((ch=fgetc(fp1))!=EOF)

fputc(ch,fp2);

fclose(fp1);

fclose(fp2);

}

本程序為帶參的main函數。程序中定義了兩個文件指針fp1和fp2,分別指向命令行參數中給出的文件。如命令行參數中沒有給出文件名,則給出提示信息。程序第18行表示如果只給出一個文件名,則使fp2指向標准輸出文件(即顯示器)。程序第25行至28行用循環語句逐個讀出文件1中的字元再送到文件2中。再次運行時,給出了一個文件名,故輸出給標准輸出文件stdout,即在顯示器上顯示文件內容。第三次運行,給出了二個文件名,因此把string中的內容讀出,寫入到OK之中。可用DOS命令type顯示OK的內容。

13.4.2 字元串讀寫函數fgets和fputs
1. 讀字元串函數fgets

函數的功能是從指定的文件中讀一個字元串到字元數組中,函數調用的形式為:

fgets(字元數組名,n,文件指針);

其中的n是一個正整數。表示從文件中讀出的字元串不超過 n-1個字元。在讀入的最後一個字元後加上串結束標志'\0'。

例如:

fgets(str,n,fp);

的意義是從fp所指的文件中讀出n-1個字元送入字元數組str中。

【例13.4】從string文件中讀入一個含10個字元的字元串。

#include<stdio.h>

main()

{

FILE *fp;

char str[11];

if((fp=fopen("d:\\jrzh\\example\\string","rt"))==NULL)

{

printf("\nCannot open file strike any key exit!");

getch();

exit(1);

}

fgets(str,11,fp);

printf("\n%s\n",str);

fclose(fp);

}

本例定義了一個字元數組str共11個位元組,在以讀文本文件方式打開文件string後,從中讀出10個字元送入str數組,在數組最後一個單元內將加上'\0',然後在屏幕上顯示輸出str數組。輸出的十個字元正是例13.1程序的前十個字元。

對fgets函數有兩點說明:

1) 在讀出n-1個字元之前,如遇到了換行符或EOF,則讀出結束。

2) fgets函數也有返回值,其返回值是字元數組的首地址。

2. 寫字元串函數fputs

fputs函數的功能是向指定的文件寫入一個字元串,其調用形式為:

fputs(字元串,文件指針);

其中字元串可以是字元串常量,也可以是字元數組名,或指針變數,例如:

fputs(「abcd「,fp);

其意義是把字元串「abcd」寫入fp所指的文件之中。

【例13.5】在例13.2中建立的文件string中追加一個字元串。

#include<stdio.h>

main()

{

FILE *fp;

char ch,st[20];

if((fp=fopen("string","at+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf("input a string:\n");

scanf("%s",st);

fputs(st,fp);

rewind(fp);

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

printf("\n");

fclose(fp);

}

本例要求在string文件末加寫字元串,因此,在程序第6行以追加讀寫文本文件的方式打開文件string。然後輸入字元串,並用fputs函數把該串寫入文件string。在程序15行用rewind函數把文件內部位置指針移到文件首。再進入循環逐個顯示當前文件中的全部內容。

13.4.3 數據塊讀寫函數fread和fwtrite
C語言還提供了用於整塊數據的讀寫函數。可用來讀寫一組數據,如一個數組元素,一個結構變數的值等。

讀數據塊函數調用的一般形式為:

fread(buffer,size,count,fp);

寫數據塊函數調用的一般形式為:

fwrite(buffer,size,count,fp);

其中:

buffer 是一個指針,在fread函數中,它表示存放輸入數據的首地址。在fwrite函數中,它表示存放輸出數據的首地址。

size 表示數據塊的位元組數。

count 表示要讀寫的數據塊塊數。

fp 表示文件指針。

例如:

fread(fa,4,5,fp);

其意義是從fp所指的文件中,每次讀4個位元組(一個實數)送入實數組fa中,連續讀5次,即讀5個實數到fa中。

【例13.6】從鍵盤輸入兩個學生數據,寫入一個文件中,再讀出這兩個學生的數據顯示在屏幕上。

#include<stdio.h>

struct stu

{

char name[10];

int num;

int age;

char addr[15];

}boya[2],boyb[2],*pp,*qq;

main()

{

FILE *fp;

char ch;

int i;

pp=boya;

qq=boyb;

if((fp=fopen("d:\\jrzh\\example\\stu_list","wb+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf("\ninput data\n");

for(i=0;i<2;i++,pp++)

scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);

pp=boya;

fwrite(pp,sizeof(struct stu),2,fp);

rewind(fp);

fread(qq,sizeof(struct stu),2,fp);

printf("\n\nname\tnumber age addr\n");

for(i=0;i<2;i++,qq++)

printf("%s\t%5d%7d %s\n",qq->name,qq->num,qq->age,qq->addr);

fclose(fp);

}

本常式序定義了一個結構stu,說明了兩個結構數組boya和boyb以及兩個結構指針變數pp和qq。pp指向boya,qq指向boyb。程序第16行以讀寫方式打開二進制文件「stu_list」,輸入二個學生數據之後,寫入該文件中,然後把文件內部位置指針移到文件首,讀出兩塊學生數據後,在屏幕上顯示。

------

回復此文章 |
回復主題:Re:c語言文件操作 | 作者: haohao | 軍銜:六級軍士 | 發表時間:2004-07-28 11:08:47
下午應該把這個搞定了.
------

回復此文章 |
回復主題:Re:Re:c語言文件操作 | 作者: haohao | 軍銜:六級軍士 | 發表時間:2004-07-28 11:10:23
13.7 C庫文件
C系統提供了豐富的系統文件,稱為庫文件,C的庫文件分為兩類,一類是擴展名為".h"的文件,稱為頭文件,在前面的包含命令中我們已多次使用過。在".h"文件中包含了常量定義、類型定義、宏定義、函數原型以及各種編譯選擇設置等信息。另一類是函數庫,包括了各種函數的目標代碼,供用戶在程序中調用。 通常在程序中調用一個庫函數時,要在調用之前包含該函數原型所在的".h" 文件。

下面給出Turbo C的全部".h"文件。

Turbo C頭文件

n ALLOC.H 說明內存管理函數(分配、釋放等)。

n ASSERT.H 定義 assert調試宏。

n BIOS.H 說明調用IBM—PC ROM BIOS子程序的各個函數。

n CONIO.H 說明調用DOS控制台I/O子程序的各個函數。

n CTYPE.H 包含有關字元分類及轉換的名類信息(如 isalpha和toascii等)。

n DIR.H 包含有關目錄和路徑的結構、宏定義和函數。

n DOS.H 定義和說明MSDOS和8086調用的一些常量和函數。

n ERRON.H 定義錯誤代碼的助記符。

n FCNTL.H 定義在與open庫子程序連接時的符號常量。

n FLOAT.H 包含有關浮點運算的一些參數和函數。

n GRAPHICS.H 說明有關圖形功能的各個函數,圖形錯誤代碼的常量定義,正對不同驅動程序的各種顏色值,及函數用到的一些特殊結構。

n IO.H 包含低級I/O子程序的結構和說明。

n LIMIT.H 包含各環境參數、編譯時間限制、數的范圍等信息。

n MATH.H 說明數學運算函數,還定了 HUGE VAL 宏, 說明了matherr和matherr子程序用到的特殊結構。

n MEM.H 說明一些內存操作函數(其中大多數也在STRING.H中說明)。

n PROCESS.H 說明進程管理的各個函數,spawn…和EXEC …函數的結構說明。

n SETJMP.H 定義longjmp和setjmp函數用到的jmp buf類型,說明這兩個函數。

n SHARE.H 定義文件共享函數的參數。

n SIGNAL.H 定義SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量,說明rajse和signal兩個函數。

n STDARG.H 定義讀函數參數表的宏。(如vprintf,vscarf函數)。

n STDDEF.H 定義一些公共數據類型和宏。

n STDIO.H 定義Kernighan和Ritchie在Unix System V 中定義的標准和擴展的類型和宏。還定義標准I/O 預定義流:stdin,stdout和stderr,說明 I/O流子程序。

n STDLIB.H 說明一些常用的子程序:轉換子程序、搜索/ 排序子程序等。

n STRING.H 說明一些串操作和內存操作函數。

n SYS\STAT.H 定義在打開和創建文件時用到的一些符號常量。

n SYS\TYPES.H 說明ftime函數和timeb結構。

n SYS\TIME.H 定義時間的類型time[ZZ(Z] [ZZ)]t。

n TIME.H 定義時間轉換子程序asctime、localtime和gmtime的結構,ctime、 difftime、 gmtime、 localtime和stime用到的類型,並提供這些函數的原型。

n VALUE.H 定義一些重要常量,包括依賴於機器硬體的和為與Unix System V相兼容而說明的一些常量,包括浮點和雙精度值的范圍。

13.8 本章小結
1. C系統把文件當作一個「流」,按位元組進行處理。

2. C文件按編碼方式分為二進制文件和ASCII文件。

3. C語言中,用文件指針標識文件,當一個文件被打開時,可取得該文件指針。

4. 文件在讀寫之前必須打開,讀寫結束必須關閉。

5. 文件可按只讀、只寫、讀寫、追加四種操作方式打開,同時還必須指定文件的類型是二進制文件還是文本文件。

6. 文件可按位元組,字元串,數據塊為單位讀寫,文件也可按指定的格式進行讀寫。

7. 文件內部的位置指針可指示當前的讀寫位置,移動該指針可以對文件實現隨機讀寫。

Ⅳ C語言數組如何將12345 添加 和刪除具體怎麼寫 求大神們指導~~~~

我的思路是用用戶輸入的字元來查找需要替換的字元,用新值來替換舊值,輸出數組中的元素,這樣就達到了刪除和添加。

Ⅵ C語言-刪除字元串中指定的字元

一、問題描述:從鍵盤輸入一個字元串給str和一個字元給c,刪除str中的所有字元c並輸出刪除後的字元串str。

1、輸入:第一行是一個字元串; 第二行是一個字元。

2、輸出:刪除指定字元後的字元串。

二、設計思路:

1、 同插入問題,定義兩個字元數組a,b。以及標志刪除位置的int型pos。

2、用gets函數輸入數組a的值,並利用for循環將數組a 到 數組b。

3、利用for循環,令pos位的數組b元素賦值到a。

三、實現代碼如下:

具體執行結果同上。

Ⅶ 使用C語言實現雙向鏈表的建立、刪除和插入

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct list{
int data;
struct list *next;
struct list *pre;
};
typedef struct list node;
typedef node *link;
link front=NULL,rear,ptr,head=NULL;

link push(int item){
link newnode=(link)malloc(sizeof(node));
newnode->data=item;
if(head==NULL)
{
head=newnode;
head->next=NULL;
head->pre=NULL;
rear=head;
}
else
{
rear->next=newnode;
newnode->pre=rear;
newnode->next=NULL;
rear=newnode;
}
return head;
}

void makenull(){
front=NULL;
rear=NULL;
}

empty(){
if(front==NULL)
return 1;
else
return 0;
}

int tops(){
if(empty())
return NULL;
else
return rear->data;
}

void pop(){
if(empty())
printf("stack is empty!\n");
else
rear=rear->pre;
}

void display(link l){
link p;
p=l;
while(p!=NULL){
printf("%d->",p->data);
p=p->next;
}
}

void main(){
int n,i;
printf("input your first data!\n");
scanf("%d",&n);
front=push(n);
/*another data*/
for(i=0;i<3;i++)
{
printf("input:\n");
scanf("%d",&n);
push(n);
}
ptr=front;
display(ptr);
printf("\n Please enter any key to pop");
pop();
ptr=front;
display(ptr);

}

Ⅷ C語言刪除字元串中指定字元

一、問題描述:從鍵盤輸入一個字元串給str和一個字元給c,刪除str中的所有字元c並輸出刪除後的字元串str。

1、輸入:第一行是一個字元串; 第二行是一個字元。

2、輸出:刪除指定字元後的字元串。

二、設計思路:

1、 同插入問題,定義兩個字元數組a,b。以及標志刪除位置的int型pos。

2、用gets函數輸入數組a的值,並利用for循環將數組a 到 數組b。

3、利用for循環,令pos位的數組b元素賦值到a。

三、實現代碼如下:

具體執行結果同上。

Ⅸ 在dos下查詢文件

分類: 電腦/網路 >> 操作系統/系統故障
問題描述:

用什麼命令呀?就象windows搜索這個功能差不多 的命令,有嗎?

解析:

在運行中輸入cmd,進入dos,輸入cd\進入C盤的目錄,然後輸dir就是c盤文件的列表. 輸入cd windows進入windows文件夾,輸入tree就是目錄樹的意思. 輸入D;進入D盤

搜索的話就用find命令,和windows搜索這個功能差不多.

Dir c:*.exe/b/s就可以把C盤的所有.exe文件搜索出來

語法:find 起始目錄 尋找條件 操作

以下是摘抄的內容.

find命令

功能:在目錄結構中搜索文件,並執行指定的操作。此命令提供了相當多的查找條件,功能很強大。

語法:find 起始目錄 尋找條件 操作

說明:find命令從指定的起始目錄開始,遞歸地搜索其各個子目錄,查找滿足尋找條件的文件並對之採取相關的操作。

該命令提供的尋找條件可以是一個用邏輯運算符not、and、or組成的復合條件。邏輯運算符and、or、not的含義為:

(1)and:邏輯與,在命令中用「-a」表示,是系統預設的選項,表示只有當所給的條件都滿足時,尋找條件才算滿足。例如:

$ find –name 』tmp』 –xtype c -user 』inin』

該命令尋找三個給定條件都滿足的所有文件。

(2)or:邏輯或,在命令中用「-o」表示。該運算符表示只要所給的條件中有一個滿足時,尋找條件就算滿足。例如:

$ find –name 』tmp』 –o –name 』mina*』

該命令查詢文件名為』tmp』或是匹配』mina*』的所有文件。

(3)not:邏輯非,在命令中用「!」表示。該運算符表示查找不滿足所給條件的文件。例如:

$ find ! –name 』tmp』

該命令查詢文件名不是』tmp』的所有文件。

需要說明的是:當使用很多的邏輯選項時,可以用括弧把這些選項括起來。為了避免Shell本身對括弧引起誤解,在話號前需要加轉義字元「」來去除括弧的意義。

例:$ find (–name 』tmp』 –xtype c -user 』inin』 )

尋找條件有以下選項:

首先,下列各個選項中的n值可以有三種輸入方式,假設n為20,則:

+20 表示20以後(21,22,23等)

-20 表示20以前(19,18,17等)

20 表示正好是20

1. 以名稱和文件屬性查找。

- name 』字串』 查找文件名匹配所給字串的所有文件,字串內可用通配符*、?、〔 〕。

- lname 』字串』 查找文件名匹配所給字串的所有符號鏈接文件,字串內可用通配符*、?、〔 〕。

-gid n 查找屬於ID號為n的用戶組的所有文件。

-uid n 查找屬於ID號為n的用戶的所有文件。

-group 』字串』 查找屬於用戶組名為所給字串的所有的文件。

-user 』字串』 查找屬於用戶名為所給字串的所有的文件。

-nogroup 查找無有效所屬組的文件,即該文件所屬的組在/ e t c / g r o u p s中不存在。

-nouser 查找無有效屬主的文件,即該文件的屬主在/ e t c / p a s s w d中不存在。

-newer file1 ! file2 查找更改時間比文件f i l e 1新但比文件f i l e 2舊的文件。

-empty 查找大小為0的目錄或文件。

-path 』字串』 查找路徑名匹配所給字串的所有文件,字串內可用通配符*、?、〔 〕。

-perm 許可權 查找具有指定許可權的文件和目錄,許可權的表示可以如711,644。

-size n〔bckw〕 查找指定文件大小的文件,n後面的字元表示單位,預設為b,代表512位元組的塊。

-type x 查找類型為x的文件,x為下列字元之一:

b 塊設備文件

c 字元設備文件

d 目錄文件

p 命名管道(FIFO)

f 普通文件

l 符號鏈接文件(symbolic links)

s socket文件

-xtype x 與-type基本相同,但只查找符號鏈接文件。

2. 以時間為條件查找

- amin n 查找n分鍾以前被訪問過的所有文件。

- atime n 查找n天以前被訪問過的所有文件。

- cmin n 查找n分鍾以前文件狀態被修改過的所有文件。

- ctime n 查找n天以前文件狀態被修改過的所有文件。

- mmin n 查找n分鍾以前文件內容被修改過的所有文件。

- mtime n 查找n天以前文件內容被修改過的所有文件。

3. 可執行的操作

- exec 命令名稱 {} \; 對符合條件的文件執行所給的unix 命令,而不詢問用戶是否需要執行該命令。{}表示命令的參數即為所找到的文件,命令的末尾必須以「 \;」結束,"{}"和"\;"之間必須有一個空格。

- ok 命令名稱 {} \; 對符合條件的文件執行所給的Linux 命令,與exec不同的是,它會詢問用戶是否需要執行該命令。

- ls 詳細列出所找到的所有文件。

- fprintf 文件名 將找到的文件名寫入指定文件。

- print 在標准輸出設備上顯示查找出的文件名。

- printf 格式 格式的寫法請參考有關C語言的書。

使用name選項

文件名選項是f i n d命令最常用的選項,要麼單獨使用該選項,要麼和其他選項一起使用。

可以使用某種文件名模式來匹配文件,記住要用引號將文件名模式引起來。

不管當前路徑是什麼,如果想要在自己的根目錄$ H O M E中查找文件名符合* . t x t的文件,

使用~作為' p a t h n a m e參數,波浪號~代表了你的$ H O M E目錄。

$ find ~ -name "*.txt" -print

想要在當前目錄及子目錄中查找所有的' * . t x t'文件,可以用:

$ find . -name "*.txt" -print

想要的當前目錄及子目錄中查找文件名以一個大寫字母開頭的文件,可以用:

$ find . -name "[A-Z]*" -print

想要在/ e t c目錄中查找文件名以h o s t開頭的文件,可以用:

$ find /etc -name "host*" -print

想要查找$ H O M E目錄中的文件,可以用:

$ find ~ -name "*" -print 或find . -print

要想讓系統高負荷運行,就從根目錄開始查找所有的文件。如果希望在系統管理員那裡

保留一個好印象的話,最好在這么做之前考慮清楚!

$ find / -name "*" -print

如果想在當前目錄查找文件名以兩個小寫字母開頭,跟著是兩個數字,最後是* . t x t的文

件,下面的命令就能夠返回名為a x 3 7 . t x t的文件:

$ find . -name "[a-z][a-z][0--9][0--9].txt" -print

使用perm選項

如果希望按照文件許可權模式來查找文件的話,可以採用- p e r m選項。你可能需要找到所有

用戶都具有執行許可權的文件,或是希望查看某個用戶目錄下的文件許可權類型。在使用這一選

項的時候,最好使用八進制的許可權表示法。

為了在當前目錄下查找文件許可權位為7 5 5的文件,即文件屬主可以讀、寫、執行,其他用

戶可以讀、執行的文件,可以用:

$ find . -perm 755 -print

如果希望在當前目錄下查找所有用戶都可讀、寫、執行的文件(要小心這種情況),我們

可以使用f i n d命令的- p e r m選項。在八進制數字前面要加一個橫杠-。在下面的命令中- p e r m代

表按照文件許可權查找,而' 0 0 7'和你在c h m o d命令的絕對模式中所採用的表示法完全相同。

$ find . -perm -007 -print

忽略某個目錄

如果在查找文件時希望忽略某個目錄,因為你知道那個目錄中沒有你所要查找的文件,

那麼可以使用- p r u n e選項來指出需要忽略的目錄。在使用- p r u n e選項時要當心,因為如果你同

時使用了- d e p t h選項,那麼- p r u n e選項就會被f i n d命令忽略。

如果希望在/ a p p s目錄下查找文件,但不希望在/ a p p s / b i n目錄下查找,可以用:

$ find /apps -name "/apps/bin" -prune -o -print

使用user和nouser選項

如果希望按照文件屬主查找文件,可以給出相應的用戶名。例如,在$ H O M E目錄中查找

文件屬主為d a v e的文件,可以用:

$ find ~ -user dave -print

在/ e t c目錄下查找文件屬主為u u c p的文件:

$ find /etc -user uucp -print

為了查找屬主帳戶已經被刪除的文件,可以使用- n o u s e r選項。這樣就能夠找到那些屬主

在/ e t c / p a s s w d文件中沒有有效帳戶的文件。在使用- n o u s e r選項時,不必給出用戶名; f i n d命令

能夠為你完成相應的工作。例如,希望在/ h o m e目錄下查找所有的這類文件,可以用:

$ find /home -nouser -print

使用group和nogroup選項

就像u s e r和n o u s e r選項一樣,針對文件所屬於的用戶組, f i n d命令也具有同樣的選項,為

了在/ a p p s目錄下查找屬於a c c t s用戶組的文件,可以用:

$ find /apps -group accts -print

要查找沒有有效所屬用戶組的所有文件,可以使用n o g r o u p選項。下面的f i n d命令從文件

系統的根目錄處查找這樣的文件

$ fine/-nogroup-print

按照更改時間查找文件

如果希望按照更改時間來查找文件,可以使用m t i m e選項。如果系統突然沒有可用空間了,

很有可能某一個文件的長度在此期間增長迅速,這時就可以用m t i m e選項來查找這樣的文件。

用減號-來限定更改時間在距今n日以內的文件,而用加號+來限定更改時間在距今n日以前的

文件。

希望在系統根目錄下查找更改時間在5日以內的文件,可以用:

$ find / -mtime -5 -print

為了在/ v a r / a d m目錄下查找更改時間在3日以前的文件,可以用:

$ find /var/adm -mtime +3 -print

查找比某個文件新或舊的文件

如果希望查找更改時間比某個文件新但比另一個文件舊的所有文件,可以使用- n e w e r選

項。它的一般形式為:

newest_file_name ! oldest_file_name

其中,!是邏輯非符號。

這里有兩個文件,它們的更改時間大約相差兩天。

下面給出的f i n d命令能夠查找更改時間比文件a g e . a w k新但比文件b e l t s . a w k舊的文件:

如果想使用f i n d命令的這一選項來查找更改時間在兩個小時以內的文件,除非有一個現成

的文件其更改時間恰好在兩個小時以前,否則就沒有可用來比較更改時間的文件。為了解決

這一問題,可以首先創建一個文件並將其日期和時間戳設置為所需要的時間。這可以用t o u c h

命令來實現。

假設現在的時間是2 3 : 4 0,希望查找更改時間在兩個小時以內的文件,可以首先創建這樣

一個文件:

一個符合要求的文件已經被創建;這里我們假設今天是五月四日,而該文件的更改時間

是2 1 : 4 0,比現在剛好早兩個小時。

現在我們就可以使用f i n d命令的- n e w e r選項在當前目錄下查找所有更改時間在兩個小時以

內的文件:

$ find . -newer dstamp -print

使用type選項

U N I X或L I N U X系統中有若干種不同的文件類型,這部分內容我們在前面的章節已經做了

介紹,這里就不再贅述。如果要在/ e t c目錄下查找所有的目錄,可以用:

$ find /etc -type d -print

為了在當前目錄下查找除目錄以外的所有類型的文件,可以用:

$ find . ! -type d -print

為了在/ e t c目錄下查找所有的符號鏈接文件,可以用:

$ find /etc -type l -print

使用size選項

可以按照文件長度來查找文件,這里所指的文件長度既可以用塊( b l o c k)來計量,也可

以用位元組來計量。以位元組計量文件長度的表達形式為N c;以塊計量文件長度只用數字表示即

可。

就我個人而言,我總是使用以位元組計的方式,在按照文件長度查找文件時,大多數人都

喜歡使用這種以位元組表示的文件長度,而不用塊的數目來表示,除非是在查看文件系統的大

小,因為這時使用塊來計量更容易轉換。

為了在當前目錄下查找文件長度大於1 M位元組的文件,可以用:

$ find . -size +1000000c -print

為了在/ h o m e / a p a c h e目錄下查找文件長度恰好為1 0 0位元組的文件,可以用:

$ find /home/apache -size 100c -print

為了在當前目錄下查找長度超過1 0塊的文件(一塊等於5 1 2位元組),可以用:

$ find . -size +10 -print

使用depth選項

在使用f i n d命令時,可能希望先匹配所有的文件,再在子目錄中查找。使用d e p t h選項就

可以使f i n d命令這樣做。這樣做的一個原因就是,當在使用f i n d命令向磁帶上備份文件系統時,

希望首先備份所有的文件,其次再備份子目錄中的文件。

在下面的例子中, f i n d命令從文件系統的根目錄開始,查找一個名為C O N . F I L E的文件。

它將首先匹配所有的文件然後再進入子目錄中查找。

$ find / -name "CON.FILE" -depth -print

使用mount選項

在當前的文件系統中查找文件(不進入其他文件系統),可以使用f i n d命令的m o u n t選項。

在下面的例子中,我們從當前目錄開始查找位於本文件系統中文件名以X C結尾的文件:

$ find . -name "*.XC" -mount -print

使用cpio選項

c p i o命令可以用來向磁帶設備備份文件或從中恢復文件。可以使用f i n d命令在整個文件系

統中(更多的情況下是在部分文件系統中)查找文件,然後用c p i o命令將其備份到磁帶上。

如果希望使用c p i o命令備份/ e t c、/ h o m e和/ a p p s目錄中的文件,可以使用下面所給出的命令,不過要記住你是在文件系統的根目錄下:

(在上面的例子中,第一行末尾的\告訴s h e l l命令還未結束,忽略\後面的回車。)

在上面的例子中,應當注意到路徑中缺少/。這叫作相對路徑。之所以使用相對路徑,是

因為在從磁帶中恢復這些文件的時候,可以選擇恢復文件的路徑。例如,可以將這些文件先

恢復到另外一個目錄中,對它們進行某些操作後,再恢復到原始目錄中。如果在備份時使用

了絕對路徑,例如/ e t c,那麼在恢復時,就只能恢復到/ e t c目錄中去,別無其他選擇。在上面

的例子中,我告訴f i n d命令首先進入/ e t c目錄,然後是/ h o m e和/ a p p s目錄,先匹配這些目錄下的文件,然後再匹配其子目錄中的文件,所有這些結果將通過管道傳遞給c p i o命令進行備份。

順便說一下,在上面的例子中c p i o命令使用了C 6 5 5 3 6選項,我本可以使用B選項,不過這

樣每塊的大小隻有5 1 2 位元組,而使用了C 6 5 5 3 6 選項後,塊的大小變成了6 4 K 位元組

(6 5 5 3 6 / 1 0 2 4)。

使用exec或ok來執行shell命令

當匹配到一些文件以後,可能希望對其進行某些操作,這時就可以使用- e x e c選項。一旦

f i n d命令匹配到了相應的文件,就可以用- e x e c選項中的命令對其進行操作(在有些操作系統

中只允許- e x e c選項執行諸如l s或ls -l這樣的命令)。大多數用戶使用這一選項是為了查找舊文

件並刪除它們。這里我強烈地建議你在真正執行r m命令刪除文件之前,最好先用l s命令看一

下,確認它們是所要刪除的文件。

e x e c選項後面跟隨著所要執行的命令,然後是一對兒{ },一個空格和一個\,最後是一個

分號。

為了使用e x e c選項,必須要同時使用p r i n t選項。如果驗證一下f i n d命令,會發現該命令只

輸出從當前路徑起的相對路徑及文件名。

為了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在f i n d命令的- e x e c選項中,例如:

上面的例子中,f i n d命令匹配到了當前目錄下的所有普通文件,並在- e x e c選項中使用ls -l

命令將它們列出。

為了在/ l o g s目錄中查找更改時間在5日以前的文件並刪除它們,可以用:

$ find logs -type f -mtime +5 -exec rm {} \;

記住,在s h e l l中用任何方式刪除文件之前,應當先查看相應的文件,一定要小心!

當使用諸如m v或r m命令時,可以使用- e x e c選項的安全模式。它將在對每個匹配到的文件

進行操作之前提示你。在下面的例子中, f i n d命令在當前目錄中查找所有文件名以. L O G結尾、

更改時間在5日以上的文件,並刪除它們,只不過在刪除之前先給出提示。

按y鍵刪除文件,按n鍵不刪除。

任何形式的命令都可以在- e x e c選項中使用。在下面的例子中我們使用g r e p命令。f i n d命令

首先匹配所有文件名為" p a s s w d *"的文件,例如p a s s w d、p a s s w d . o l d、p a s s w d . b a k,然後執

行g r e p命令看看在這些文件中是否存在一個r o u n d e r用戶。

find命令的例子

我們已經介紹了f i n d命令的基本選項,下面給出f i n d命令的一些其他的例子。

為了匹配$ H O M E目錄下的所有文件,下面兩種方法都可以使用:

$ find $HOME -print

$ find ~ -print

為了在當前目錄中查找s u i d置位,文件屬主具有讀、寫、執行許可權,並且文件所屬組的用

戶和其他用戶具有讀和執行的許可權的文件,可以用:

$ find . -type f -perm 4755 -print

為了查找系統中所有文件長度為0的普通文件,並列出它們的完整路徑,可以用:

$ find / -type f -size 0 -exec ls -l {} \;

為了查找/ v a r / l o g s目錄中更改時間在7日以前的普通文件,並刪除它們,可以用:

$ find /var/logs -type f -mtime +7 -exec rm {} \;

為了查找系統中所有屬於a u d i t組的文件,可以用:

$find /-name -group audit -print

我們的一個審計系統每天創建一個審計日誌文件。日誌文件名的最後含有數字,這樣我

們一眼就可以看出哪個文件是最新的,哪個是最舊的。A d m i n . l o g 文件編上了序號:

a d m i n . l o g . 0 0 1、a d m i n . l o g . 0 0 2等等。下面的f i n d命令將刪除/ l o g s目錄中訪問時間在7日以前、

含有數字後綴的a d m i n . l o g文件。該命令只檢查三位數字,所以相應日誌文件的後綴不要超過

9 9 9。

$ find /logs -name 'admin.log[0-9][0-9][0-9] '-atime +7 -exec rm {} \;

為了查找當前文件系統中的所有目錄並排序,可以用:

$ find . -type d -print -local -mount |sort

為了查找系統中所有的r m t磁帶設備,可以用:

$ find /dev/rmt -print

xargs

在使用f i n d命令的- e x e c選項處理匹配到的文件時, f i n d命令將所有匹配到的文件一起傳遞

給e x e c執行。不幸的是,有些系統對能夠傳遞給e x e c的命令長度有限制,這樣在f i n d命令運行

幾分鍾之後,就會出現溢出錯誤。錯誤信息通常是"參數列太長"或"參數列溢出"。這就是

x a rg s命令的用處所在,特別是與f i n d命令一起使用。F i n d命令把匹配到的文件傳遞給x a rg s命

令,而x a rg s命令每次只獲取一部分文件而不是全部,不像- e x e c選項那樣。這樣它可以先處理

最先獲取的一部分文件,然後是下一批,並如此繼續下去。在有些系統中,使用- e x e c選項會

為處理每一個匹配到的文件而發起一個相應的進程,並非將匹配到的文件全部作為參數一次

執行;這樣在有些情況下就會出現進程過多,系統性能下降的問題,因而效率不高;而使用

x a rg s命令則只有一個進程。另外,在使用x a rg s命令時,究竟是一次獲取所有的參數,還是分

批取得參數,以及每一次獲取參數的數目都會根據該命令的選項及系統內核中相應的可調參

數來確定。

讓我們來看看x a rg s命令是如何同f i n d命令一起使用的,並給出一些例子。

下面的例子查找系統中的每一個普通文件,然後使用x a rg s命令來測試它們分別屬於哪類

文件:

下面的例子在整個系統中查找內存信息轉儲文件(core mp) ,然後把結果保存到

/tmp/core.log 文件中:

$ find . -name "core" -print | xargs echo "" >/tmp/core.log

下面的例子在/ a p p s / a u d i t目錄下查找所有用戶具有讀、寫和執行許可權的文件,並收回相應

的寫許可權:

$ find /apps/audit -perm -7 -print | xargs chmod o-w

在下面的例子中,我們用g r e p命令在所有的普通文件中搜索d e v i c e這個詞:

$ find / -type f -print | xargs grep "device"

在下面的例子中,我們用g r e p命令在當前目錄下的所有普通文件中搜索D B O這個詞:

$ find . -name \ *-type f -print | xargs grep "DBO"

注意,在上面的例子中, \用來取消f i n d命令中的*在s h e l l中的特殊含義。

小結

f i n d命令是一個非常優秀的工具,它可以按照用戶指定的准則來匹配文件。使用e x e c和

x a rg s可以使用戶對所匹配到的文件執行幾乎所有的命令。