偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Linux命令行開發(fā)實(shí)戰(zhàn)

系統(tǒng) Linux
本文將指導(dǎo)您學(xué)習(xí)如何編寫即使對(duì)最終用戶而言也足夠簡(jiǎn)單的 Linux 命令行實(shí)用程序。本文以概述可靠的命令行最佳實(shí)踐開始,并以詳細(xì)地研究一個(gè)有效的選頁(yè)工具結(jié)束,為您提供動(dòng)手編寫自己的實(shí)用程序所需要的背景知識(shí)。

本文將指導(dǎo)您學(xué)習(xí)如何編寫即使對(duì)最終用戶而言也足夠簡(jiǎn)單的 Linux 命令行實(shí)用程序。本文以概述可靠的命令行最佳實(shí)踐開始,并以詳細(xì)地研究一個(gè)有效的選頁(yè)工具結(jié)束,為您提供動(dòng)手編寫自己的實(shí)用程序所需要的背景知識(shí)。 

本文演示如何編寫與 cat、ls、pr 和 mv 等標(biāo)準(zhǔn)命令類似的 Linux 命令行實(shí)用程序。我選擇了一個(gè)名為 selpg 的實(shí)用程序,這個(gè)名稱代表 SELect PaGes。selpg 允許用戶指定從輸入文本抽取的頁(yè)的范圍,這些輸入文本可以來(lái)自文件或另一個(gè)進(jìn)程。selpg 是以在 Linux 中創(chuàng)建命令的事實(shí)上的約定為模型創(chuàng)建的,這些約定包括:

獨(dú)立工作

在命令管道中作為組件工作(通過(guò)讀取標(biāo)準(zhǔn)輸入或文件名參數(shù),以及寫至標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤)接受修改其行為的命令行選項(xiàng)。不久前我為一位客戶開發(fā)了 selpg。隨后我將它公布在一個(gè) UNIX 郵件列表上,結(jié)果有許多成員告訴我他們發(fā)現(xiàn)這是一個(gè)有用的工具。

該實(shí)用程序從標(biāo)準(zhǔn)輸入或從作為命令行參數(shù)給出的文件名讀取文本輸入。它允許用戶指定來(lái)自該輸入并隨后將被輸出的頁(yè)面范圍。例如,如果輸入含有 100 頁(yè),則用戶可指定只打印第 35 至 65 頁(yè)。這種特性有實(shí)際價(jià)值,因?yàn)樵诖蛴C(jī)上打印選定的頁(yè)面避免了浪費(fèi)紙張。另一個(gè)示例是,原始文件很大而且以前已打印過(guò),但某些頁(yè)面由于打印機(jī)卡住或其它原因而沒有被正確打印。在這樣的情況下,則可用該工具來(lái)只打印需要打印的頁(yè)面。

除了包含 Linux 實(shí)用程序現(xiàn)實(shí)的示例外,本文還有以下特性:

它用實(shí)例說(shuō)明了 Linux 軟件開發(fā)環(huán)境的能力。
它演示了對(duì)一些系統(tǒng)調(diào)用和 C 庫(kù)函數(shù)的適當(dāng)使用,其中包括 fopen、fclose、access、setvbuf、perror、strerror 和 popen。
它實(shí)現(xiàn)了打算用于通用目的的實(shí)用程序(而不是一次性程序)所應(yīng)有的那種徹底的錯(cuò)誤檢查。
它對(duì)潛在的問(wèn)題提出警告,如在 C 中編程時(shí)可能出現(xiàn)的緩沖區(qū)溢出,并就如何預(yù)防這些問(wèn)題提供了建議。
它演示了如何進(jìn)行手工編碼的命令行參數(shù)解析。
它演示了如何在管道中以及在輸入、輸出和錯(cuò)誤流重定向的情況下使用該工具。 

Linux 命令行準(zhǔn)則

通用 Linux 實(shí)用程序的編寫者應(yīng)該在代碼中遵守某些準(zhǔn)則。這些準(zhǔn)則經(jīng)過(guò)了長(zhǎng)期發(fā)展,它們有助于確保用戶以更靈活的方式使用實(shí)用程序,特別是在與其它命令(內(nèi)置的或用戶編寫的)以及 shell 的協(xié)作方面 ― 這種協(xié)作是利用 Linux 作為開發(fā)環(huán)境的能力的手段之一。selpg 實(shí)用程序用實(shí)例說(shuō)明了下面列出的所有準(zhǔn)則和特性。(注:在接下來(lái)的那些示例中,“$”符號(hào)代表 shell 提示符,不必輸入它。)

Linux 命令行準(zhǔn)則 1. 輸入

應(yīng)該允許輸入來(lái)自以下兩種方式:

在命令行上指定的文件名。例如:

$ command input_file 

在這個(gè)例子中,command 應(yīng)該讀取文件 input_file。

標(biāo)準(zhǔn)輸入(stdin),缺省情況下為終端(也就是用戶的鍵盤)。例如:

$ command

這里,用戶輸入 Control-D(文件結(jié)束指示符)前輸入的所有內(nèi)容都成為 command 的輸入。

但是,使用 shell 操作符“<”(重定向標(biāo)準(zhǔn)輸入),也可將標(biāo)準(zhǔn)輸入重定向?yàn)閬?lái)自文件,如下所示:

$ command < input_file

這里,command 會(huì)讀它的標(biāo)準(zhǔn)輸入,不過(guò) shell/內(nèi)核已將其重定向,所以標(biāo)準(zhǔn)輸入來(lái)自 input_file。

使用 shell 操作符“|”(pipe)也可以使標(biāo)準(zhǔn)輸入來(lái)自另一個(gè)程序的標(biāo)準(zhǔn)輸出,如下所示:

$ other_command | command

這里,other_command 的標(biāo)準(zhǔn)輸出(stdout)被 shell/內(nèi)核透明地傳遞至 command 的標(biāo)準(zhǔn)輸入。

Linux 命令行準(zhǔn)則 2. 輸出

輸出應(yīng)該被寫至標(biāo)準(zhǔn)輸出,缺省情況下標(biāo)準(zhǔn)輸出同樣也是終端(也就是用戶的屏幕):

$ command

在這個(gè)例子中,command 的輸出出現(xiàn)在屏幕上。

同樣,使用 shell 操作符“>”(重定向標(biāo)準(zhǔn)輸出)可以將標(biāo)準(zhǔn)輸出重定向至文件。

$ command > output_file

這里,command 仍然寫至它的標(biāo)準(zhǔn)輸出,不過(guò) shell/內(nèi)核將其重定向,所以輸出寫至 output_file。

或者,還是使用“|”操作符,command 的輸出可以成為另一個(gè)程序的標(biāo)準(zhǔn)輸入,如下所示:

$ command | other_command

在這個(gè)例子中,shell/內(nèi)核安排 command 的輸出成為 other_command 的輸入。#p#

Linux 命令行準(zhǔn)則 3. 錯(cuò)誤輸出

錯(cuò)誤輸出應(yīng)該被寫至標(biāo)準(zhǔn)錯(cuò)誤(stderr),缺省情況下標(biāo)準(zhǔn)錯(cuò)誤同樣也是終端(也就是用戶的屏幕):

$ command

這里,運(yùn)行 command 時(shí)出現(xiàn)的任何錯(cuò)誤消息都將被寫至屏幕。

但是使用標(biāo)準(zhǔn)錯(cuò)誤重定向,也可以將錯(cuò)誤重定向至文件。例如:

$ command 2>error_file

在這個(gè)例子中,command 的正常輸出在屏幕顯示,而任何錯(cuò)誤消息都被寫至 error_file。

可以將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都重定向至不同的文件,如下所示:

$ command >output_file 2>error_file

這里,將標(biāo)準(zhǔn)輸出寫至 output_file,而將所有寫至標(biāo)準(zhǔn)錯(cuò)誤的內(nèi)容都寫至 error_file。

如果已將標(biāo)準(zhǔn)輸出重定向至某一位置,也可以將標(biāo)準(zhǔn)錯(cuò)誤重定向至同一位置。例如:

$ command 2>&1

在這個(gè)例子中,符號(hào)“2>&1”表示“將標(biāo)準(zhǔn)錯(cuò)誤發(fā)送至標(biāo)準(zhǔn)輸出被重定向的任何位置”,因此錯(cuò)誤和正常的消息都將在屏幕上顯示。當(dāng)然,這是多余的,因?yàn)橄旅婧?jiǎn)單的調(diào)用

$ command

將做同樣的事。在標(biāo)準(zhǔn)輸出已被重定向至其它源,而您希望在同一命令行上將標(biāo)準(zhǔn)錯(cuò)誤也寫至同一目的地時(shí),該特性就非常有用。例如:

$ command >output_file 2>&1

在這個(gè)例子中,已首先將標(biāo)準(zhǔn)輸出重定向至 output_file;因此“2>&1”將使標(biāo)準(zhǔn)錯(cuò)誤也被重定向至 output_file。

Linux 命令行準(zhǔn)則 4. 執(zhí)行

程序應(yīng)該有可能既獨(dú)立運(yùn)行,也可以作為管道的一部分運(yùn)行,如上面的示例所示。該特性可以重新敘述如下:不管程序的輸入源(文件、管道或終端)和輸出目的地是什么,程序都應(yīng)該以同樣的方式工作。這使得在如何使用它方面有最大的靈活性。

Linux 命令行準(zhǔn)則 5. 命令行參數(shù)

如果程序可以根據(jù)其輸入或用戶的首選參數(shù)有不同的行為,則應(yīng)將它編寫為接受名為 選項(xiàng)的命令行參數(shù),這些參數(shù)允許用戶指定什么行為將用于這個(gè)調(diào)用。

作為選項(xiàng)的命令行參數(shù)由前綴“-”(連字符)標(biāo)識(shí)。另一類參數(shù)是那些不是選項(xiàng)的參數(shù),也就是說(shuō),它們并不真正更改程序的行為,而更象是數(shù)據(jù)名稱。通常,這類參數(shù)代表程序要處理的文件名,但也并非一定如此;參數(shù)也可以代表其它東西,如打印目的地或作業(yè)標(biāo)識(shí)(有關(guān)的示例,請(qǐng)參閱“man cancel”)。

可能代表文件名或其它任何東西的非選項(xiàng)參數(shù)(那些沒有連字符作為前綴的)如果出現(xiàn)的話,應(yīng)該在命令的最后出現(xiàn)。

通常,如果指定了文件名參數(shù),則程序把它作為輸入。否則程序從標(biāo)準(zhǔn)輸入進(jìn)行讀取。

所有選項(xiàng)都應(yīng)以“-”(連字符)開頭。選項(xiàng)可以附加參數(shù)。

Linux 實(shí)用程序語(yǔ)法圖看起來(lái)如下:

$ command mandatory_opts [ optional_opts ] [ other_args ]

其中:

command 是命令本身的名稱。
mandatory_opts 是為使命令正常工作必須出現(xiàn)的選項(xiàng)列表。
optional_opts 是可指定也可不指定的選項(xiàng)列表,這由用戶來(lái)選擇;
但是,其中一些參數(shù)可能是互斥的,如同 selpg 的“-f”和“-l”選項(xiàng)的情況(詳情見下文)。 other_args 是命令要處理的其它參數(shù)的列表;這可以是任何東西,而不僅僅是文件名。

在以上定義中,術(shù)語(yǔ)“選項(xiàng)列表”是指由空格、跳格或二者的結(jié)合所分隔的一系列選項(xiàng)。

以上在方括號(hào)中顯示的語(yǔ)法部分可以省去(在此情況下,必須將括號(hào)也省去)。

各個(gè)選項(xiàng)看起來(lái)可能與下面相似:

-f (單個(gè)選項(xiàng))
-s20 (帶附加參數(shù)的選項(xiàng))
-e30 (帶附加參數(shù)的選項(xiàng))
-l66 (帶附加參數(shù)的選項(xiàng)) 

有些實(shí)用程序?qū)?shù)的選項(xiàng)采取略微不同的格式,其中參數(shù)與選項(xiàng)由空格分隔 ― 例如,“-s 20” ― 但我沒有選擇這么做,因?yàn)樗鼤?huì)使編碼復(fù)雜化;這樣做的唯一好處是使命令易讀一些。

【編輯推薦】

  1. 三個(gè)實(shí)用的Linux命令行工具
  2. Linux筆記:三大網(wǎng)站之Linux命令行
  3. Linux命令行下常用svn命令
  4. 如何使用linux命令行登陸
  5. Linux系統(tǒng)下圖形界面與Linux命令行模式的切換
責(zé)任編輯:張浩 來(lái)源: IBMDW
相關(guān)推薦

2020-12-10 16:16:08

工具代碼開發(fā)

2020-12-11 06:44:16

命令行工具開發(fā)

2009-12-24 14:51:39

Linux命令行

2009-12-09 09:25:52

Linux命令行svn命令

2025-08-05 07:52:41

man 命令Linux命令行

2009-12-23 14:14:09

Linux高級(jí)命令行

2010-09-03 09:18:23

LinuxUNIX命令行

2014-01-24 09:09:32

Linux命令行網(wǎng)速

2018-04-23 08:45:05

Linux命令行

2010-06-01 19:14:53

SVN命令行

2011-08-22 11:51:13

Linuxconfigure

2018-07-10 14:29:05

Linux命令行

2018-02-10 17:30:41

Linux命令

2017-08-29 15:15:40

Linux命令公網(wǎng)IP

2011-07-11 13:20:13

linuxuniq

2009-08-11 09:58:22

Linux命令行Linux命令svn命令

2018-05-04 09:15:35

PythonPlumbum命令行

2023-03-31 08:44:55

Go開發(fā)命令

2013-07-26 14:10:06

Linux命令行

2009-12-25 17:05:09

LINUX Bash
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)