目录操作

 

在linux中,目录也是一种文件,对目录的操作可以像对文件操作一样简单。

获得当前的目录
    #include <unistd.h>
    char * getcwd(char *buf, size_t size);
    getcwd函数将当前目录存放到size大小的buf中,如果buf的大小不够放下当前的目录字符串,就会返回NULL,并设置errno为ERANGE,若buf为NULL,而且size的大小为0,那么,getcwd函数会申请空间,并将该空间的的首地址返回,在使用这种方式的时候,要注意及时的释放内存,以避免出现内存泄露的问题。

改变当前目录
    #include <unistd.h>
    int chdir(const char *path);
    int fchdir(int fd);
    他们都是用来改变当前的目录的函数,fchdir的参数是一个文件描述符。
   
创建和删除目录
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    int mkdir(const char * pathname, mode_t mode);
    int rmdir(const char * pathname);
    成功返回0,失败返回-1,并设置errno变量,注意rmdir只可以删除空目录。
        #include <unistd.h>
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <stdio.h>
        #include <stdlib.h>

        int main(void)
        {
        printf("In (%s)\n", getcwd(NULL, 0));
        if (0 > mkdir("test123", 0764)) /*建立文件夹*/
                {
                perror("mkdir error");
                exit(EXIT_FAILURE);
                }
        system("ls -l");
        if (0 > chdir("./test123"))  /*进入刚建立的文件夹*/
                {
                perror("chdir:");
                exit(EXIT_FAILURE);
                }
        printf("In (%s)\n", getcwd(NULL, 0));
        system("touch test && ls -l");
        chdir("../"); /*返回上层文件夹*/
        printf("In (%s)",getcwd(NULL, 0));
        if (0 > rmdir("test123")) /*此时因为文件夹能有test文件,会删除失败*/
                {
                perror("You can't delete the test\n");
                }
        remove("./test123/test"); /*删除test文件*/
        if (0 > rmdir("test123")) /*重新删除文件夹*/
                {
                perror("You can't delete the test\n");
                      exit(EXIT_FAILURE);
                }
        system("ls");
        return 0;
        }
        当在适当的地方加入getchar()的时候,就可以打开文件夹观察变化。
    读出目录的内容
         #include <sys/types.h>
       #include <dirent.h>
       DIR *opendir(const char *name);   /*打开一个目录文件,如果出错返回NULL。并设置errno*/
       struct dirent *readdir(DIR *dir);  /*从文件中读出一条目录项,注意,该函数会产生覆盖,读到末尾时返回NULL*/
         int rewinddir(DIR*dir);            /*返回到目录文件头*/
         int closedir(DIR* dir);             /*关闭目录文件*/
            struct dirent {
              ino_t          d_ino;       /* inode number */
              off_t          d_off;       /* offset to the next dirent */
              unsigned short d_reclen;    /* length of this record */
              unsigned char  d_type;      /* type of file */
              char           d_name[256]; /* filename */
                    };
        例如一个简单的ls:
            #include <dirent.h>
            #include <sys/types.h>
            #include <stdio.h>
            #include <stdlib.h>

            int main(int argc, char * argv[])
            {
                DIR *dir;
   
                struct dirent * dirmsg;
   
                if (NULL == (dir = opendir(argv[1])))
                {
                    perror("open firection error:");
                    exit(EXIT_FAILURE);
                }
   
                while (NULL != (dirmsg = readdir(dir)))
                {
                    puts(dirmsg->d_name);
                }
   
                closedir(dir);
                return 0;
            }
        运行一下:./a.out .
        test.c
        .
        ..
        a.out
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值