做跳转链接到自己的网站,企业网站的优化和推广方法,叫人做网站多少钱,wordpress生成网站模版第一题#xff1a;预习 opendir 和 readdir函数
opendir 和 readdir 是两个在C语言#xff08;特别是使用POSIX标准的系统#xff0c;如Linux和UNIX#xff09;中用于目录遍历的函数。这两个函数属于标准的C库中的目录操作部分#xff0c;通常与dirent.h头文件一…
第一题预习 opendir 和 readdir函数
opendir 和 readdir 是两个在C语言特别是使用POSIX标准的系统如Linux和UNIX中用于目录遍历的函数。这两个函数属于标准的C库中的目录操作部分通常与dirent.h头文件一起使用。下面详细介绍这两个函数的作用和用法。
opendir 函数
opendir 函数用于打开一个目录流以便通过 readdir 函数读取目录内容。
函数原型
#include dirent.h
#include sys/types.h DIR *opendir(const char *name);
参数name指向以null结尾的字符串的指针该字符串指定了要打开的目录的路径。
返回值
成功时返回一个指向DIR类型的指针该指针代表打开的目录流。失败时返回NULL并设置errno以指示错误。
readdir 函数
readdir 函数用于读取目录流中的下一个目录项。
函数原型
#include dirent.h struct dirent *readdir(DIR *dirp);
参数dirp指向之前通过opendir函数打开的目录流的指针。
返回值
成功时返回一个指向dirent结构的指针该结构包含目录项的信息。读取到目录末尾或出错时返回NULL。要区分这两种情况可以检查errno或使用errno的包装函数如feof(dirfd(dirp))但注意feof并不直接适用于目录流这里只是提供一个类比。实际上当到达目录末尾时errno不会被设置。
第二题通过 opendir、readdir、write、read函数实现拷贝一个文件夹中的所有文件的功能(不考虑文件夹中还有文件夹的情况)
#include stdio.h
#include string.h
#include stdlib.h
#include unistd.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include pthread.h
#include semaphore.h
#include wait.h
#include signal.h
#include sys/socket.h
#include arpa/inet.h
#include sys/socket.h
#include sys/ipc.h
#include sys/sem.h
#include semaphore.h
#include sys/msg.h
#include sys/shm.h
#include sys/un.htypedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;int main(int argc, const char *argv[])
{if(access(argv[2],F_OK) -1)//判断目标文件夹是否存在{mkdir(argv[2],0777);//不存在则创建目标文件夹}else//如果存在则需要判断该文件是否为目录文件{struct stat buf{0};stat(argv[2],buf);mode_t modebuf.st_mode;if(S_ISDIR(mode) ! 1){fprintf(stderr,该文件不是一个目录文件!\n);return 1;}}DIR* dfopendir(argv[1]);if(dp NULL){perror(opendir);return 1;}while(1){struct dirent* dtreaddir(df);if(dt NULL){break;}if(strcmp(dt-d_name,.)0 || strcmp(dt-d_name,..)0){continue;}chdir(argv[1]);//把工作目录切换到argv[1]里面int rfdopen(dt-d_name,O_RDONLY);if(rfd -1){perror(ropen);}chdir(..);//把工作目录切换到上一级目录chdir(argv[2]);int wfdopen(dt-d_name,O_WRONLY | O_CREAT | O_TRUNC,0666);if(wfd -1){perror(wopen);}chdir(..);while(1){char s[16]{0};int resread(rfp,s,15);if(res 0){breaak;}write(wfp,s,strlen(buf));}}close(rfp);close(wfp);closedir(df);return 0;
}