IO进程线程,文件与目录,实现linux任意目录下ls -la

这篇具有很好参考价值的文章主要介绍了IO进程线程,文件与目录,实现linux任意目录下ls -la。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注意文件的名字、路径是如何输入的。

函数opendir打开目录,struct dirent,struct stat这些结构体的含义。 

        readdir()函数是一个用于读取目录内容的系统调用或库函数,在类Unix操作系统中(如Linux)广泛使用。它用于遍历目录,并逐个获取目录中的条目(文件和子目录)。

        lstat和stat是用于获取文件信息的系统调用,主要在处理符号链接时存在差异。以下是它们之间的主要区别:

1. 处理符号链接:
  lstat:当使用lstat函数获取一个符号链接的信息时,它返回的是符号链接本身的信息,而不是链接所指向文件的信息。这使得你能够查看链接本身的属性,而不用跟随链接指向的文件。
   stat:当使用stat函数获取一个符号链接的信息时,它会自动跟随链接,返回链接指向的文件的信息,而不是链接本身的信息。

2. 跟随链接:
   lstat:对于符号链接,lstat不会自动跟随链接,它会返回链接本身的属性,包括链接指向的路径。
   stat:对于符号链接,stat会自动跟随链接,返回链接指向的文件的属性。

        对于符号链接,`lstat`返回了链接本身的信息,而`stat`返回了链接指向的文件的信息。文章来源地址https://www.toymoban.com/news/detail-683540.html

/*===============================================
*   文件名称:stat.c
*   创 建 者:WM
*   创建日期:2023年08月24日
*   描    述:文件目录下除了隐藏文件查看
================================================*/
#include <stdio.h>
#include <sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<string.h>
#include<pwd.h>
#include<grp.h>
#include<time.h>
#include<dirent.h>
int main(int argc, char *argv[])
{ 
    char path[100]={0};
    if(2!=argc)
    {
        printf("error\n");
        return -1;
    }
 
    DIR * dirp=opendir(argv[1]);//获取所有的目录下的文件名
    struct dirent *a;//接收
     strcpy(path,argv[1]);
    while (NULL!=(a=readdir(dirp)))//从第一个文件名开始遍历到最后。
    {
       struct stat st;
           strcpy(path,argv[1]);
           strcat(path,"/");
           strcat(path,a->d_name);
        if(a->d_name[0]=='.')//去除隐藏文件
           continue;
    lstat(path,&st);//链接文件读取

    if(S_ISREG(st.st_mode))//判断文件类型
        printf("-");
    else if (S_ISDIR(st.st_mode))
        printf("d");
    else if(S_ISLNK(st.st_mode))
        printf("l");

    for (  int i=8; i >= 0; i-=3)//查看文件的权限
    {
        if(st.st_mode & 1<<i)
            printf("r");
        else
            printf("-");
        if(st.st_mode&1<<(i-1))
            printf("w");
        else
            printf("-");
        if(st.st_mode&1<<(i-2))
            printf("x");
        else
            printf("-");
    }
    //链接数
    printf(" %ld",st.st_nlink);
    //用户名
    struct passwd *pw=getpwuid(st.st_uid);
    printf(" %s ",pw->pw_name);
    //用户组名
    struct group *gr =getgrgid(st.st_gid);
    printf( "%s",gr->gr_name);
    //大小
    printf(" %ld",st.st_size);
    //去除换行
    char arr[100]={0};
    strcpy(arr,ctime(&st.st_mtime));
    if(arr[strlen(arr)-1]=='\n')
      arr[strlen(arr)-1]='\0';
    printf(" %s ",arr);

    printf(" %s ",a->d_name);
    puts("");
    }
    return 0;
} 

到了这里,关于IO进程线程,文件与目录,实现linux任意目录下ls -la的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Shell 命令集合 磁盘管理 】Linux 列出目录中的文件和子目录 ls命令使用教程

    Shell 命令专栏:Linux Shell 命令全解析 ls命令是Linux系统中常用的一个命令,用于列出目录中的文件和子目录。它的作用是显示当前工作目录中的文件和目录列表。 当我们在终端输入ls命令时,系统会将当前目录中的文件和子目录的名称以及相关信息显示出来。这些信息包括文

    2024年02月08日
    浏览(109)
  • Linux ls命令教程:如何有效地列出文件和目录(附案例详解和注意事项)

    ls 是Linux中的基本命令之一,任何Linux用户都应该知道。 ls 命令列出文件系统中的文件和目录,并显示有关它们的详细信息。它是所有Linux发行版都安装的GNU核心实用程序包的一部分。 ls 命令在所有Linux发行版中都是可用的,包括但不限于Ubuntu, Debian, Fedora, CentOS等。如果你发现

    2024年02月04日
    浏览(53)
  • 【文件IO】Linux 文件操作(一) —— 遍历指定目录下的所有文件

    目录 一、访问目录相关函数 1、打开/访问目录 (opendir / fdopendir) 2、读取目录内容 (readdir) 3、关闭目录 (closedir) 二、遍历指定目录下的所有文件 opendir / fdopendir 函数的作用是访问指定路径的目录,函数声明如下: (1) opendir opendir 函数是通过用户提供的目录路径来访问目录, 参

    2024年02月04日
    浏览(57)
  • Linux中查看端口被哪个进程占用、进程调用的配置文件、目录等

    1.查看被占用的端口的进程, netstat/ss -antulp | grep :端口号 2.通过上面的命令就可以列出,这个端口被哪些应用程序所占用,然后找到对应的进程PID 3.根据PID查询进程。如果想详细查看这个进程,PID具体是哪一个进程,可以通过命令的方式进行查看进程的详细信息, ps -ef | gr

    2024年02月16日
    浏览(47)
  • IO 与进程线程

    2023年05月28日
    浏览(43)
  • linux系统报错:ls: 正在读取目录‘.‘: 输入/输出错误

    在linux系统的“/mnt”目录下挂载了一个硬盘,然后拷贝服务器上的数据到该硬盘,在拷贝数据过程中报错:“本地文件为只读文件,无法拷贝到所挂载的硬盘下面”。于是我打开挂载硬盘的所在目录查看目录是否存在,\\\"ls\\\"看了下文件,发现“ls”命令无法使用,报错“ls: 正在

    2024年02月12日
    浏览(45)
  • IO进程线程Day8

    使用信号灯集完成三个进程的同步,A进程输出字符A,B进程输出字符B,C进程输出字符C,要求输出结果为ABCABCABCABCABC...

    2024年01月25日
    浏览(59)
  • IO进程线程day4作业

    代码: 运行结果:  

    2024年02月21日
    浏览(57)
  • IO进程线程作业day2

    使用fread和fwrite完成两个图片文件的拷贝 现象展示:  使用read、write完成两个图片文件的拷贝 效果图   3 将时间在文件中跑起来 1、17:30:41 2、17:30:42 3、17:30:43 键入ctrl+c,结束进程后 ... 4、17:35:28 5、17:35:29 效果图:  思维导图

    2024年02月19日
    浏览(39)
  • Linux下基本指令 -> ls指令 查看目录结构和文件信息

    ​  博主: 星尘不会落  博主主页:https://blog.csdn.net/zhanghgh  如果编写的博客中有任何错误,请指出,我会第一时间核实并更改。  该博客可能会随着博主的技术增进而改进。  Linux ls(英文全拼: list directory contents )命令用于显示指定工作目录下之内容(列出目前工作

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包