2013-04-11 124 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

相关问题