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:统计目录及其子目录中的普通文件的个数

相关推荐
海的透彻11 小时前
nginx启动进程对文件的权限掌控
运维·chrome·nginx
黄昏晓x11 小时前
Linux ---- UDP和TCP
linux·tcp/ip·udp
路溪非溪11 小时前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
此刻觐神11 小时前
IMX6ULL开发板学习-01(Linux文件目录和目录相关命令)
linux·服务器·学习
2401_8920709811 小时前
【Linux C++ 日志系统实战】高性能文件写入 AppendFile 核心方法解析
linux·c++·日志系统·文件写对象
航Hang*11 小时前
第3章:Linux系统安全管理——第2节:部署代理服务
linux·运维·服务器·开发语言·笔记·系统安全
-ONLY-¥12 小时前
PostgreSQL运维全攻略:从基础操作到远程配置
linux
fengfuyao98512 小时前
VC++基于服务器的点对点文件传输实例
服务器·开发语言·c++
favour_you___12 小时前
epoll惊群问题与解决
服务器·网络·tcp/ip·epoll
北方的流星12 小时前
华三网络设备的路由重定向配置
运维·网络·华三