我有一個嵌入式Linux套件AM335x(運行angstrom 3.2.0,電腦運行Ubuntu 12.0.4),我可以插入一個USB閃存盤。嵌入式linux C代碼執行cp從USB驅動器到主機上的目錄保持目錄結構的方式
USB閃存盤有多個文件夾,子文件夾和文件。
我想創建一些C代碼將這些文件夾和文件從大容量存儲設備複製到我的套件上的文件系統。
我想在多個副本中這樣做,所以我可以檢查是否還有空間在我正在複製的文件系統中。
我發現了以下內容(請參閱下面的代碼)並試圖使用它。不幸的是,它不能保持複製時USB驅動器上的目錄結構完好無損。例如,如果我嘗試以下操作:複製(/media/sda1/foo/foo.txt,「/ home/Usb_Files」);複製(/media/sda1/foo/foo.txt,「/ home/Usb_Files」);
我看到foo.txt的在/home/Usb_Files/foo.txt而不是/home/Usb_Files/foo/foo.txt
另外,如果我嘗試複製(/media/sda1/foo/foo.txt ,「/ home/Usb_Files/foo」);
報告說,CP無法統計沒有這樣的文件或目錄
如何做到這一點任何想法?
我真的被卡住了。
int Copy(char *source, char *dest)
{
int childExitStatus;
pid_t pid;
int status;
if (!source || !dest) {
/* handle as you wish */
}
pid = fork();
if (pid == 0) { /* child */
execl("/bin/cp", "/bin/cp", "-R", source, dest, (char *)0);
}
else if (pid < 0) {
/* error - couldn't start process - you decide how to handle */
}
else {
/* parent - wait for child - this has all error handling, you
* could just call wait() as long as you are only expecting to
* have one child process at a time.
*/
pid_t ws = waitpid(pid, &childExitStatus, WNOHANG);
if (ws == -1)
{ /* error - handle as you wish */
}
if(WIFEXITED(childExitStatus)) /* exit code in childExitStatus */
{
status = WEXITSTATUS(childExitStatus); /* zero is normal exit */
/* handle non-zero as you wish */
}
else if (WIFSIGNALED(childExitStatus)) /* killed */
{
}
else if (WIFSTOPPED(childExitStatus)) /* stopped */
{
}
}
}
謝謝,這是我最終做的 – brent 2014-09-05 21:58:33