134 Linux 系统编程11 ,readlink命令,文件目录rwx权限差异,目录操作函数

前面知道,如果a.soft是一个软链接,我们使用 cat a.soft,会直接查看这个软链接指向的文件

那么我们就是想看这个软链接是啥,可以使用 readlink a.soft

二 获取工作目录 getcwd函数

获取进程当前工作目录 (卷3,标库函数)

size 为buf 的大小。

char *getcwd(char *buf, size_t size); 成功:buf中保存当前进程工作目录位置。失败返回NULL。

成功则 将buf中的数据 作为返回值返回;也就是说,在成功的情况下,返回值和buf中的值是一样的。

失败,则返回 NULL,一般当size 不够大,放不下的时候,就会返回null

三 改变当前进程的工作目录

改变当前进程的工作目录

int chdir(const char *path); 成功:0;失败:-1设置errno为相应值

int main() {
	char nowpath[128];
	getcwd(nowpath,sizeof(nowpath));
	cout << "nowpath = " <<nowpath <<  endl;

	int ret  = chdir("/home/hunandede/projects/linuxcpp/aaa");// aaa 目录是真实存在的 ret =0
	//int ret = chdir("/home/hunandede/projects/linuxcpp/bbb");//bbb目录不存在, ret=-1
	//另一个问题是 chdir虽然成功了,但是意义在哪里,这个当前文件肯定是指的 可执行文件的路径了,改变目录也不会将 执行文件 拷贝到 aaa目录

	cout << "ret = " << ret << endl;

	getcwd(nowpath, sizeof(nowpath));
	cout << "nowpath = " << nowpath << endl;


	return 0;
}

四。文件,目录权限

注意:目录文件也是"文件"。其文件内容是该目录下所有子文件的目录项dentry。 可以尝试用vim打开一个目录。

文件 和 目录 的 RWX的权限 ,对应的操作也不同

|----|------------------|-------------------|------------|
| | r | w | x |
| 文件 | 文件的内容可以被查看 | 内容可以被修改 | 可以运行产生一个进程 |
| | cat、more、less... | vi、> ... | ./文件名 |
| | | | |
| 目录 | 目录可以被浏览 | 创建、删除、修改文件 | 可以被打开、进入 |
| | ls、tree... | mv、touch、mkdir... | cd |

目录设置黏住位:若有w权限,创建不变,删除、修改只能由root、目录所有者、文件所有者操作。

opendir函数

根据传入的目录名打开一个目录 (库函数) DIR * 类似于 FILE *

DIR *opendir(const char *name); 成功返回指向该目录结构体指针,失败返回NULL

参数支持相对路径、绝对路径两种方式:例如:打开当前目录:① getcwd() , opendir() ② opendir(".");

closedir函数

关闭打开的目录

int closedir(DIR *dirp); 成功:0;失败:-1设置errno为相应值

readdir函数

读取目录 (库函数)

struct dirent *readdir(DIR *dirp); 成功返回目录项结构体指针;失败返回NULL设置errno为相应值

需注意返回值,读取数据结束时也返回NULL值,所以应借助errno进一步加以区分。

struct 结构体:

struct dirent {

ino_t d_ino; inode编号

off_t d_off;

unsigned short d_reclen; 文件名有效长度

unsigned char d_type; 类型(vim打开看到的类似@*/等)

**char d_name[256];**文件名

};

其成员变量重点记忆两个:d_ino、d_name。实际应用中只使用到d_name。

练习1:实现简单的ls功能。 【imp_ls.c】

练习2:实现ls不打印隐藏文件。每5个文件换一个行显示。 【imp_ls2.c】

拓展1:实现ls -a -l 功能。

拓展2:统计目录及其子目录中的普通文件的个数

相关推荐
小安运维日记15 分钟前
CKA认证 | Day3 K8s管理应用生命周期(上)
运维·云原生·容器·kubernetes·云计算·k8s
小han的日常41 分钟前
接口自动化环境搭建
运维·自动化
小扳44 分钟前
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
运维·spring boot·后端·mysql·spring cloud·docker·容器
运维小文1 小时前
服务器硬件介绍
运维·服务器·计算机网络·缓存·硬件架构
小周不摆烂1 小时前
丹摩征文活动 | 丹摩智算平台:服务器虚拟化的璀璨明珠与实战秘籍
大数据·服务器
中云DDoS CC防护蔡蔡1 小时前
为什么海外服务器IP会被封
服务器·经验分享
是安迪吖1 小时前
nfs服务器
运维·服务器
鱼骨不是鱼翅1 小时前
模拟回显服务器
运维·服务器
运维佬1 小时前
CentOS 9 配置网卡
linux·centos
轩轩曲觞阁1 小时前
Linux网络——网络初识
linux·网络