系统编程中的目录操作
思维导图
示例代码
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
if(argc < 2)
{
printf("a.out dir\n");
exit(1);
}
int ret = chdir(argv[1]);
if(ret == -1)
{
perror("chdir");
exit(1);
}
int fd = open("chdir.txt", O_CREAT | O_RDWR, 0777);
if(fd == -1)
{
perror("open");
exit(1);
}
close(fd);
char buf[128];
getcwd(buf, sizeof(buf));
printf("current dir: %s\n", buf);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char* argv[])
{
if(argc < 3)
{
printf("a.out newDir mode\n");
exit(1);
}
int mode = strtol(argv[2], NULL, 8);
int ret = mkdir(argv[1], mode);
if(ret == -1)
{
perror("mkdir");
exit(1);
}
return 0;
}
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <dirent.h>
int main(int argc, char* argv[])
{
if(argc < 2)
{
printf("a.out path\n");
exit(1);
}
DIR* dir = opendir(argv[1]);
if(dir == NULL)
{
perror("opendir");
exit(1);
}
char buf[512];
getcwd(buf, sizeof(buf));
printf("current dir: %s\n", buf);
closedir(dir);
return 0;
}
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int getFileNum(char* root)
{
DIR* dir = opendir(root);
if(dir == NULL)
{
perror("opendir");
exit(0);
}
int total = 0;
char path[1024] = {0};
struct dirent* ptr = NULL;
while((ptr = readdir(dir)) != NULL)
{
if(strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0)
{
continue;
}
if(ptr->d_type == DT_REG)
{
total ++;
}
if(ptr->d_type == DT_DIR)
{
sprintf(path, "%s/%s", root, ptr->d_name);
total += getFileNum(path);
}
}
closedir(dir);
return total;
}
int main(int argc, char* argv[])
{
int total = getFileNum(argv[1]);
printf("%s has file number: %d\n", argv[1], total);
return 0;
}