linux系统编程,目录(20)


重点

1.opendir

DIR *opendir(const char *name);

DIR *目录流指针

功能:

打开一个目录获得一个目录流指针

参数:

name:目录名

返回值:

成功返回目录流指针

失败返回NULL

2.readdir

struct dirent *readdir(DIR *dirp);

功能:

从目录流中读取文件信息并将保存信息的结构体

地址返回

参数:

dirp:目录流指针

返回值:

包含文件信息的结构体

出错或者读到目录流末尾返回NULL

linux中以.开头的都是隐藏文件

3、关闭目录

int closedir(DIR *dirp);

功能:关闭之前已经打开的目录流对象

参数:opendir的返回结果中目录流对象

返回值:成功 0

失败 -1;

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
       #include <dirent.h>
int main(int argc, char *argv[])
{
    DIR * dir = opendir("./");
    if(NULL == dir)
    {
        fprintf(stderr,"opendir errpr\n");
        return 1;
    }
    while(1)
    {
        struct dirent * info = readdir(dir);
        if(NULL == info)
        {
            break;
        }
        switch(info->d_type)
        {
            case DT_DIR:
                printf("目录文件 ");
                break;
            case DT_REG:
                printf("普通文件 ");
                break;
            case DT_UNKNOWN:
                printf("其他文件 ");
                break;
            default:
                printf("未知文件 ");
        }
        printf("%s\n",info->d_name);
    }

    closedir(dir);
    return 0;
}


3.chdir cd

chdir ("/home/linux"); "../../"

fopen("1.mp4")

int chdir(const char *path);// /home/linux

功能:

改变当前程序的工作路径

参数:

path:改变到的路径

返回值:

成功返回0

失败返回-1

#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
    int ret = chdir("..");
    if(-1 == ret)
    {
        fprintf(stderr,"chdir error\n");
        return 1;
    }

    fopen("aaa","w");
    return 0;
}

4.getcwd //pwd

char *getcwd(char *buf, size_t size);

功能:

获得当前的工作路径

参数:

buf:保存工作路径空间的首地址

size:保存路径空间的长度

返回值:

成功返回包含路径空间的字符串首地址

失败返回NULL

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
    char buf[256]={0};
    getcwd(buf,sizeof(buf));
    printf("current path is %s\n",buf);
    chdir("../");
    getcwd(buf,sizeof(buf));
    printf("change path is %s\n",buf);


    return 0;
}

5.mkdir

int a =200;

int mkdir(const char *pathname, mode_t mode);//777 666 --x--x--x

(新建文件和目录时系统自动把权限减umask 0002)

功能:

创建一个目录

666-

参数:

pathname:路径

mode:

mode & ~umask 0002

返回值:

成功返回0

失败返回-1

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
    int ret = mkdir("aaa",0777);
    if(-1 == ret)
    {
        fprintf(stderr,"mkdir error\n");
        return 1;
    }

    return 0;
}

6.rmdir rm -fr rmdir

int rmdir(const char *pathname);

功能:

删除一个空目录文件

参数:

pathname:目录文件的名字

返回值:

成功返回0

失败返回-1

#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
    int ret = rmdir("./aaa");
    if(-1 == ret)
    {
        fprintf(stderr,"rmdir error\n");
        return 1;
    }
    return 0;
}

重点:

1.stat

int stat(const char *path, struct stat *buf);

功能:

获得文件的属性

参数:

path: 文件的路径

buf: 属性存放空间的首地址

返回值:

成功返回0

失败返回-1

man 7 inode(查关于mode的计算,文件类型,文件权限)

实现ll命令功能


1.获取秒数

2.转换为需要个格式

系统时间的获取:

1.time

time_t time(time_t *t);

time_t tm;

time(&tm)

tm = time(NULL);

功能:

获得1970年到现在的秒数

参数:

t:存放秒数的空间首地址

返回值:

成功返回1970年到现在的秒数

失败返回-1

2.localtime

struct tm *localtime(const time_t *timep);

年+1900,月+1;

功能:

将一个秒数转化成日历时间

参数:

timep:保存秒数空间的地址

返回值:

成功返回保存日历时间结构体的指针

失败返回NULL

3.ctime

char *ctime(const time_t *timep);//date

功能:

将时间秒数转化成字符串

参数:

timep:保存时间空间的地址

返回值:

成功返回获得时间字符串的首地址

失败返回NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值