2013-04-11 163 views
0

我給出了使用FTP寫入C程序的任務,其中客戶端請求服務器指定文件名的文件,然後服務器將在所有目錄中檢查該文件如果該文件存在,那麼它會發送它,否則會發出一條錯誤消息,比如說「找不到文件!」將被髮送。客戶端請求服務器上的文件的FTP程序

我很難使用find/whereis命令,然後利用這些函數在我的程序中返回的結果。 我想知道如何使用linux系統命令在我的程序中使用。

現在,我只在服務器的當前目錄由

int fd = open(file,O_RDONLY,0); 
printf("opening file %s in current directory\n", filename); 
if(fd == -1) { 
    printf("error: file not found!\n"); 
    send_string(newfd, "file not found!"); 
} 

檢查如果你能幫助我如何檢查所有目錄中的特定文件,那麼這將是偉大的!

+1

這裏是如何[走一個目錄](http://rosettacode.org/wiki/Walk_a_directory/Recursively#Library:_POSIX)。它會幫助你:) – Bechir 2013-04-11 17:11:37

+0

哇,這是一個很大的幫助。謝謝@Bechir – Sunny 2013-04-11 17:14:47

+0

你的assigmemt也是寫服務器嗎? – alk 2013-04-11 19:11:31

回答

0

有一堆方法。一種方法是遞歸地遍歷從/開始的整個目錄樹 - 您可以使用DFS或任何類似的圖遍歷算法來執行此操作。 另一種方式是使用find程序內置的Linux來爲你做搜索。

+0

我會喜歡它使用DFS來做它,因爲我喜歡算法。但我應該使用find命令,那就是問題所在。如何在C程序中使用它並利用其結果? – Sunny 2013-04-11 17:13:45

+0

那麼,一種方法是開始新的過程。將描述符重定向到某個管道或文件,並用路徑調用'execve'來找到想要傳遞它的參數。然後,您可以從管道或文件中讀取其輸出,具體取決於您選擇的選項,並解析其輸出。在這裏,您可以看到如何將描述符傳遞給execve:http://stackoverflow.com/questions/7383142/pass-file-descriptor-execve-typecast – Adrian 2013-04-11 17:18:58

+0

聽起來不錯。讓我執行,然後我會回來。 – Sunny 2013-04-11 17:20:32

相關問題