使用套接字复制目录

时间:2015-03-17 13:23:38

标签: c sockets

我正在用C语言编写一个程序,它使用套接字通过网络发送文件。这适用于文件 - 它们被读入缓冲区然后写入套接字。通过扭转这一过程,他们在另一端被接收。

但是,这如何适用于目录?我也想复制目录,保持权限相同(所以我不认为mkdir会工作)。当我尝试在目录上运行它时,它表示大小为-1。如何表示目录?

要清楚,例如,如果我希望我的程序通过网络复制/ tmp,它将执行此操作:

/tmp/1.txt - OK
/tmp/2.txt - OK
/tmp/dir/  - Skip
/tmp/dir/3.txt - Can't write to path

2 个答案:

答案 0 :(得分:1)

有几种可能性。它将与你已经传输的目录tar完全相符,通过网络发送生成的存档,另一方面取消tar

或者,您可以递归地遍历目录树。对于每个目录,您只需要传输名称和要保留的属性,但是必须列出目录内容(可能通过readdir())并传输每个成员。

顺便说一下,不要忽视思考你将如何处理链接,包括符号链接和硬连接链接。如果您希望您的程序非常强大,那么还要考虑如何处理特殊文件,例如设备文件和FIFO。

答案 1 :(得分:0)

我想这是家庭作业,否则为什么不使用FTP,scprsyncunison等。

测试文件路径是普通文件,设备,目录等等......使用 stat(2)

要阅读目录,请使用opendir(3)然后循环readdir(3)(当然是closedir)。您不需要知道目录的表示方式。

您可能应该对nftw(3)感兴趣以递归遍历文件树。

要制作一个目录,请使用mkdir(2)

您应该阅读Advanced Linux Programming

BTW,this answer也包含有用信息......