当前位置:   article > 正文

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

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

一  readlink 命令

前面知道,如果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为相应值

  1. int main() {
  2. char nowpath[128];
  3. getcwd(nowpath,sizeof(nowpath));
  4. cout << "nowpath = " <<nowpath << endl;
  5. int ret = chdir("/home/hunandede/projects/linuxcpp/aaa");// aaa 目录是真实存在的 ret =0
  6. //int ret = chdir("/home/hunandede/projects/linuxcpp/bbb");//bbb目录不存在, ret=-1
  7. //另一个问题是 chdir虽然成功了,但是意义在哪里,这个当前文件肯定是指的 可执行文件的路径了,改变目录也不会将 执行文件 拷贝到 aaa目录
  8. cout << "ret = " << ret << endl;
  9. getcwd(nowpath, sizeof(nowpath));
  10. cout << "nowpath = " << nowpath << endl;
  11. return 0;
  12. }

四。文件,目录权限

注意:目录文件也是“文件”。其文件内容是该目录下所有子文件的目录项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:统计目录及其子目录中的普通文件的个数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/141325
推荐阅读
相关标签
  

闽ICP备14008679号