嵌入式学习——文件IO(目录文件)——day23

1. 目录文件IO

1.1 opendir——打开一个目录,获得目录流指针

1.2 closedir——关闭目录流指针

1.3 readdir——从目录流中读取一个目录项

4. mkdir——创建目录pathname

5. umask——修改目录当前的掩码值(掩码值对应是1的权限不允许被拥有)

6. rmdir——删除目录文件

7. getcwd——获得当前所在目录的绝对路径 

8. chdir——int chdir(const char *path);

2. 获取时间函数

2.1 time

        1. 定义

                time_t time(time_t *tloc); 

        2. 功能

                获得1970年到现在的秒数

        3. 参数

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

        4. 返回值

            成功返回1970年到现在的秒数
            失败返回-1

        5. 示例程序

#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t tm = time(&tm);

    printf("time: %lu\n", tm);

    return 0;
}

2.2 localtime

        1. 定义

                struct tm *localtime(const time_t *timep); 

        2. 功能

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

        3. 参数

                timep:保存秒数空间的地址

        4. 返回值

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

        5. 示例程序

#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t t = time(&t);
    struct tm *time_info = localtime(&t);
    
    printf("%04d-%02d-%02d ", time_info->tm_year+1900, time_info->tm_mon+1, time_info->tm_mday);
    printf("%02d:%02d:%02d\n", time_info->tm_hour, time_info->tm_min, time_info->tm_sec);

    return 0;
}

2.3 ctime

        1. 定义

                char *ctime(const time_t *timep); 

        2. 功能

               将时间秒数转化成字符串

        3. 参数

                timep:保存秒数空间的地址

        4. 返回值

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

        5. 示例程序

#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t t = time(&t);
    
    printf("%s", ctime(&t));

    return 0;
}

3.链接文件

3.1 symlink

        1. 定义

                int  symlink(const  char  *oldpath, const char *newpath);

        2. 功能

               创建一个链接向oldpath文件的新符号链接文件

        3. 参数

            oldpath:被链接向的文件的路径
            newpath:新符号链接文件

        4. 返回值

            成功返回0
            失败返回-1

        5. 示例程序

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    // ln -s 01ls.c softlink
    int ret = symlink("./01ls.c", "softlink");

    if(-1 == ret)
    {
        printf("symlink error\n");
        return 1;
    }
    
    return 0;
}

3.2 remove

        1. 定义

                int remove(const char *pathname);

        2. 功能

              删除一个文件

        3. 参数

                pathname:删除文件的路径

        4. 返回值

            成功返回0
            失败返回-1

        5. 示例程序

#include <stdio.h>

int main(void)
{
    int ret= remove("./softlink");

    if(-1 == ret)
    {
        printf("remove error\n");
        return -1;
    }

    return 0;
}

3.3 rename

        1. 定义

                int  rename(const  char  *oldpath,  const char *newpath);

        2. 功能

              将一个老的路径名改为新的路径

        3. 参数

            oldpath:老路径名
            newpath:新路径名

        4. 返回值

            成功返回0
            失败返回-1

        5. 示例程序

#include <stdio.h>

int main(void)
{
    int ret = rename("./123", "aaa");

    if(-1 == ret)
    {
        printf("rename error\n");
        return -1;
    }

    return 0;
}

3.4 link

        1. 定义

                int  link(const char *oldpath, const char *newpath);

        2. 功能

              创建一个硬链接文件

        3. 参数

            oldpath:要链接向的文件
            newpath:创建的新硬链接文件

        4. 返回值

            成功返回0
            失败返回-1

        5. 示例程序

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    
    int ret = link("./01ls.c", "hardlink");

    if(-1 == ret)
    {
        printf("link error\n");
        return -1;
    }

    return 0;
}

3.5 truncate

        1. 定义

                int truncate(const char *path, off_t length);

        2. 功能

              将文件截断到指定长度

        3. 参数

            oldpath:要链接向的文件
            newpath:创建的新硬链接文件

        4. 返回值

            成功返回0
            失败返回-1

        5. 示例程序

#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>

int main(void)
{
    int ret = truncate("./aaa",10); 

    if(-1 == ret)
    {
        printf("trunc error\n");
        return -1;
    }

    return 0;
}

3.6 perror

        1. 定义

                void perror(const char *s);

        2. 功能

               打印s字符串和errno对应的错误信息

        3. 参数

            s:要打印在终端上的出错信息

        4. 返回值

              缺省

        5. 示例程序

#include <stdio.h>

int main(void)
{
    FILE* fp = fopen("456", "r");//456不存在

    if(NULL == fp)
    {
        perror("fopen error!\n");
        return -1;
    }

    return 0;
}

3.7 strerror

       1. 定义

                char *strerror(int errnum);

        2. 功能

               打印errnum出错码对应的出错信息

        3. 参数

                    errnum:出错errno号

        4. 返回值

            成功返回对应的错误信息
            ruturn 1;

        5. 示例程序

#include <stdio.h>
#include <string.h>

int main(void)
{
    int i = 0 ;

    for(i = 0; i < 256; i++)
    {
        printf("%d %s\n", i, strerror(i));
    }

    return 0;
}

3.7 strerror

       1. 定义

                void error(int status, int errnum, const char *format, ...);

        2. 功能

               程序出错打印对应出错原因和用户输入字符串并退出

        3. 参数

             status:程序退出的状态
             EXIT_FAILURE    1  
             EXIT_SUCCESS    0   
             errnum:错误码
             format: 类似printf打印

        4. 返回值

            缺省
            __FILE__ 表示是那个文件
            __LINE__表示第几行
            __func__表示在那个函数
            __DATE__
            __TIME__

            c 内置宏

        5. 示例程序

#include <stdio.h>
#include <error.h>
#include <errno.h>   //extern int errno 

int main(void)
{
    FILE* fp = fopen("456","r");

    if(NULL == fp)
    {
        error(1,errno,"fopen,file:%s fun:%s line:%d\n",__FILE__,__func__,__LINE__); 
        return 1;   
    }

    return 0;
}

3.8 工程管理工具

    1.在文件夹下编写一个名为makefile的脚本文件
        makefile
        Makefile

2.语法规则:
        要生成的文件:所有依赖的文件(中间以空格隔开)
        生成方式
    3.执行步骤:
        1.终端输入make
        2.make执行对应目录下的makefile文件
        3.生成makefile文件中第一个目标
        4.查找所有依赖的文件是否都存在
        5.如果存在则利用生成方式生成目标文件
            makefile内部维护一个时间戳


    4.makefile变量:
        $@:要生成的文件 
        $^:所有依赖的文件 
        $<:第一个依赖的文件
    
        =        直接赋值
        :=        覆盖赋值
        +=        原来的基础上新加
        ?=        前面没有给变量赋值,则给变量赋等号后的值
                变量已经有值,不会给变量赋新值

        示例脚本

OBJ= a.out 
SRC = add.c 
SRC +=mul.c main.c 


$(OBJ):$(SRC)
	gcc $(SRC)-o $(OBJ)

clean:
	rm $(OBJ) 


          

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值