2012-09-06 34 views
1

我對c很新,對其他語言的經驗較少:/ 對於uni的任務,我有點卡在這個小部分。從本質上講,我需要寫一個有4個可選參數「ls」的功能,例如:區分可選參數,路徑名或文件? c語言

list [-l] [-f] [pathname] [localfile] 

現在,前兩個是直線前進。爲了使事情變得更加困難,'localfile'不一定存在,並且'pathname'(如果給出的話)將位於我通過套接字連接的服務器上(所以檢查它是否是文件並檢查路徑名被刪除)。我在想,檢查字符串中的最後4個字符是否爲'.txt'或類似的東西。如果我找不到解決方案,我實際上已經完全陷入困境,並將在明天向我的課程傳送帶呈現此問題。

這是我真正必須做的一小部分,但任何推動正確的方向將不勝感激。

+9

你*絕對*想學習,愛和學習愛'getopt'。 –

+0

這是在Windows還是Linux? – Scooter

+0

Linux肯定有它,我也不知道Windows的任何基本限制。有arg_parse函數http://www.gnu.org/software/libc/manual/html_node/Parsing-Program-Arguments.html#Parsing-Program-Arguments – aisbaa

回答

0

您將需要處理argc和argv以獲取命令行參數。這是第一個要做的工作,獲得參數 - 確保它們是正確的,並確定要求的內容。

int main(int argc, char *argv[]) 

假設你是在Linux/Unix,你將需要使用目錄函數執行opendir()/ readdir的()/ closedir() - dirent.h。將需要功能stat()以滿足-l要求。 訪問()將確定文件是否存在,然後stat()會告訴您文件是常規文件還是目錄。

我會做一個結構來保存四個可選參數,並從一個名爲「process_arguments」的函數中返回它,它將argc和argv作爲參數。

struct args { 
    bool valid; 
    bool l_option; 
    bool f_option 
    char directory[200]; 
    char filename[200]; 
} 

隨着套接字連接的要求,你必須寫一個「服務器程序」,將不斷地在服務器和「客戶端程序」,它會fork來處理來自本地程序的請求上運行。嘗試找到套接字程序的例子。

另一個檢查是否有路徑字符串或文件名是爲了查找路徑分隔符 - 如果服務器是Unix/Linux,則爲'/'。這個方案在文件名中不應該有任何路徑分隔符,所以存在一個告訴你它是一個路徑。

+0

這是Linux(cygwin),但我最終必須使它與Windows兼容。但現在Linux首先。 我已經編寫了代碼來確定'命令'並獲取了參數的* argsList []。只是想知道如何確定我是否有路徑名或文件。 我將使用stat()作爲'-l'參數。 – RileyVanZeeland

+0

@RileyVanZeeland它允許給文件名,但不是路徑?如果是這樣,我會做套接字的東西,並嘗試和CD的價值,就像它是一個目錄,看看是否成功。成功=目錄,失敗=文件。 – Scooter

+0

@RileyVanZeeland您需要在服務器計算機上運行「套接字服務器程序」。服務器程序(以及它分叉的任何客戶端)將要處理的一個請求是「這是一個目錄」還是「CD到這個目錄」,並且成功了?所以發送未知的字符串到服務器,並確定它是否是一個目錄。 – Scooter