cop*logdir 函數用于復制目錄及其內容。 函數出錯時返回非零值,并設置全局變量 errno 指示具體錯誤。以下列出常見錯誤及其含義:
- EACCES: 權限不足,無法訪問源目錄或目標目錄。
- EEXIST: 目標目錄已存在。
- ENOENT: 源目錄不存在。
- ENOMEM: 內存不足,無法完成復制。
- EFAULT: 源目錄或目標目錄路徑無效。
- EINVAL: 參數無效,例如路徑名格式錯誤。
- ENOTDIR: 源或目標路徑并非目錄。
- ELOOP: 符號鏈接循環(huán)。
- ENAMETOOLONG: 路徑名過長。
- ENOSPC: 目標磁盤空間不足。
為了妥善處理這些錯誤,調用 cop*logdir 后務必檢查其返回值。非零返回值表示出錯,此時可使用 perror 或 strerror 函數打印錯誤信息。示例如下:
#include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <errno.h> #include <string.h> int main() { DIR *src_dir = opendir("source_directory"); if (src_dir == NULL) { perror("opendir (source)"); // 更清晰的錯誤信息 return EXIT_FAILURE; } DIR *dst_dir = opendir("destination_directory"); if (dst_dir == NULL) { perror("opendir (destination)"); // 更清晰的錯誤信息 closedir(src_dir); return EXIT_FAILURE; } if (cop*logdir(src_dir, dst_dir, COPY_ALL) != 0) { fprintf(stderr, "目錄復制失敗: %sn", strerror(errno)); closedir(src_dir); closedir(dst_dir); return EXIT_FAILURE; } closedir(src_dir); closedir(dst_dir); return EXIT_SUCCESS; }
此示例先檢查 opendir 函數返回值,確保源目錄和目標目錄已成功打開。然后調用 cop*logdir 并檢查返回值。非零返回值則使用 strerror 打印錯誤信息并關閉已打開的目錄。 改進后的代碼添加了更清晰的 perror 調用,指明是源目錄還是目標目錄打開失敗。