我正在用C语言编写一个程序,它使用套接字通过网络发送文件。这适用于文件 - 它们被读入缓冲区然后写入套接字。通过扭转这一过程,他们在另一端被接收。
但是,这如何适用于目录?我也想复制目录,保持权限相同(所以我不认为mkdir会工作)。当我尝试在目录上运行它时,它表示大小为-1。如何表示目录?
要清楚,例如,如果我希望我的程序通过网络复制/ tmp,它将执行此操作:
/tmp/1.txt - OK
/tmp/2.txt - OK
/tmp/dir/ - Skip
/tmp/dir/3.txt - Can't write to path
答案 0 :(得分:1)
有几种可能性。它将与你已经传输的目录tar
完全相符,通过网络发送生成的存档,另一方面取消tar
。
或者,您可以递归地遍历目录树。对于每个目录,您只需要传输名称和要保留的属性,但是必须列出目录内容(可能通过readdir()
)并传输每个成员。
顺便说一下,不要忽视思考你将如何处理链接,包括符号链接和硬连接链接。如果您希望您的程序非常强大,那么还要考虑如何处理特殊文件,例如设备文件和FIFO。
答案 1 :(得分:0)
我想这是家庭作业,否则为什么不使用FTP,scp
,rsync
,unison
等。
测试文件路径是普通文件,设备,目录等等......使用 stat(2)
要阅读目录,请使用opendir(3)然后循环readdir(3)(当然是closedir
)。您不需要知道目录的表示方式。
您可能应该对nftw(3)感兴趣以递归遍历文件树。
要制作一个目录,请使用mkdir(2)
您应该阅读Advanced Linux Programming
BTW,this answer也包含有用信息......