嵌入式学习——Linux高级编程复习(目录IO、软硬连接、makefile)——day38

  1. 目录IO

目录IO是指在计算机程序中对文件目录进行操作的一系列输入输出功能。这些操作允许程序创建、读取、修改和删除目录结构。在Unix/Linux系统和类似系统中,目录被视为特殊的文件,可以对其进行打开、读取、写入(修改)和关闭等操作。

  1. 目录IO相关函数接口

2.1 opendir

  1. 定义

  2. 功能

  3. 参数

  4. 返回值

  5. 示例程序

6.注意

2.2 closedir

  1. 定义

  2. 功能

  3. 参数

  4. 返回值

  5. 示例程序

6.注意

2.3 readdir

  1. 定义

  2. 功能

  3. 参数

struct dirent {

ino_t d_ino; /* Inode number */

off_t d_off; /* Not an offset; see below */

unsigned short d_reclen; /* Length of this record */

unsigned char d_type; /* Type of file; not supported

by all filesystem types */

char d_name[256]; /* Null-terminated filename */

};

  1. 返回值

  2. 示例程序

6.注意

2.4 mkdir

  1. 定义

  2. 功能

  3. 参数

  4. 返回值

  5. 示例程序

6.注意

2.5 umaks

  1. 定义

  2. 功能

  3. 参数

  4. 返回值

  5. 示例程序

6.注意

2.6 rmdir

  1. 定义

  2. 功能

  3. 参数

  4. 返回值

  5. 示例程序

6.注意

2.7 getcwd

  1. 定义

  2. 功能

  3. 参数

  4. 返回值

  5. 示例程序

6.注意

2.8 chdir

  1. 定义

  2. 功能

  3. 参数

  4. 返回值

  5. 示例程序

6.注意

2.9 stat

  1. 定义

  2. 功能

  3. 参数

struct stat {

dev_t st_dev; /* ID of device containing file */

ino_t st_ino; /* Inode number */

mode_t st_mode; /* File type and mode */

nlink_t st_nlink; /* Number of hard links */

uid_t st_uid; /* User ID of owner */

gid_t st_gid; /* Group ID of owner */

dev_t st_rdev; /* Device ID (if special file) */

off_t st_size; /* Total size, in bytes */

blksize_t st_blksize; /* Block size for filesystem I/O */

blkcnt_t st_blocks; /* Number of 512B blocks allocated */

/* Since Linux 2.6, the kernel supports nanosecond

precision for the following timestamp fields.

For the details before Linux 2.6, see NOTES. */

struct timespec st_atim; /* Time of last access */

struct timespec st_mtim; /* Time of last modification */

struct timespec st_ctim; /* Time of last status change */

#define st_atime st_atim.tv_sec /* Backward compatibility */

#define st_mtime st_mtim.tv_sec

#define st_ctime st_ctim.tv_sec

};

  1. 返回值

  2. 示例程序

6.注意

2.10 getpwuid

  1. 定义

  2. 功能

  3. 参数

struct passwd {

char *pw_name; /* username */

char *pw_passwd; /* user password */

uid_t pw_uid; /* user ID */

gid_t pw_gid; /* group ID */

char *pw_gecos; /* user information */

char *pw_dir; /* home directory */

char *pw_shell; /* shell program */

};

  1. 返回值

  2. 示例程序

6.注意

2.11 getgrgid

  1. 定义

  2. 功能

  3. 参数

struct group {

char *gr_name; /* group name */

char *gr_passwd; /* group password */

gid_t gr_gid; /* group ID */

char **gr_mem; /* NULL-terminated array of pointers

to names of group members */

};

  1. 返回值

  2. 示例程序

6.注意

  1. 链接文件

3.1 软链接文件(符号链接)

ln -s 被链接文件 链接文件名

通过文件名链接

3.2 硬链接文件

ln 被链接文件 链接文件名

通过文件在虚拟文件系统(VFS)中的inode节点链接

  1. 链接文件函数接口

4.1 symlink(创建软链接)

  1. 定义

  2. 功能

  3. 参数

  4. 返回值

  5. 示例程序

  6. 注意

4.2 link(创建硬链接)

  1. 定义

  2. 功能

  3. 参数

  4. 返回值

  5. 示例程序

  6. 注意

4.3 lreadink

  1. 定义

  2. 功能

  3. 参数

  4. 返回值

  5. 示例程序

  6. 注意

  7. 工程管理工具

5.1 在文件夹下编写一个名为makefile的脚本文件

makefile

Makefile

5.2 语法规则

要生成的文件:所有依赖的文件(中间以空格隔开)

生成方式

5.3 执行步骤

1.终端输入make

2.make执行对应目录下的makefile文件

3.生成makefile文件中第一个目标

4.查找所有依赖的文件是否都存在

5.如果存在则利用生成方式生成目标文件

makefile内部维护一个时间戳

5.4 makefile变量

$@:要生成的文件

$^:所有依赖的文件

$<:第一个依赖的文件

= 直接赋值

:= 覆盖赋值

+= 原来的基础上新加

?= 前面没有给变量赋值,则给变量赋等号后的值

变量已经有值,不会给变量赋新值

相关推荐
程序员小白条7 分钟前
你面试时吹过最大的牛是什么?
java·开发语言·数据库·阿里云·面试·职场和发展·毕设
charlie11451419110 分钟前
勇闯前后端Week2:后端基础——Flask API速览
笔记·后端·python·学习·flask·教程
yuuki23323318 分钟前
【C++】初识C++基础
c语言·c++·后端
小年糕是糕手18 分钟前
【C++】类和对象(二) -- 构造函数、析构函数
java·c语言·开发语言·数据结构·c++·算法·leetcode
豐儀麟阁贵21 分钟前
8.2异常的抛出与捕捉
java·开发语言·python
权泽谦23 分钟前
PHP 版羊了个羊完整开发实战:逻辑解析 + 三消算法 + 全套接口(附源码)
开发语言·php
程序员西西26 分钟前
SpringBoot无感刷新Token实战指南
java·开发语言·前端·后端·计算机·程序员
深蓝海拓27 分钟前
OpenCV学习笔记之:调整ORB算法的参数以适应不同的图像
笔记·opencv·学习
d111111111d28 分钟前
STM32外设--SPI读取W25Q64(学习笔记)硬件SPI
笔记·stm32·单片机·嵌入式硬件·学习
q***563829 分钟前
Springboot3学习(5、Druid使用及配置)
android·学习