首页 > 其他分享 >关于POSIX定义的宏S_ISLINK(),S_ISREG()的使用

关于POSIX定义的宏S_ISLINK(),S_ISREG()的使用

时间:2024-02-05 10:36:02浏览次数:30  
标签:include st ISREG POSIX mode printf else buf ISLINK

摘自:https://forum.ubuntu.org.cn/viewtopic.php?t=380854

我在学习linux C系统编程,书上有个源代码可以实现自己的ls命令,不过在查错的过程中这个问题卡了我很久

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
#include <limits.h>
#include <dirent.h>
#include <grp.h>
#include <pwd.h>
#include <errno.h>

#define    PARAM_NONE    0
#define    PARAM_A        1
#define    PARAM_L         2
#define    MAXROWLEN    80

int            g_leave_len=MAXROWLEN;
int            g_maxlen;

void my_error(const char* err_string,int line)
{
    fprintf(stderr,"line:%d",line);
    perror(err_string);
    exit(1);
}

void display_attribute(struct stat buf,char* name)
{
    char buf_time[32];
    struct passwd *psd;
    struct group *grp;

    if(S_ISLINK(buf.st_mode))//编译器报错,找不到S_ISLINK的定义
        printf("l");
    else if(S_ISREG(buf.st_mode))
        printf("-");
    else if(S_ISDIR(buf.st_mode))
        printf("d");
    else if(S_ISCHR(buf.st_mode))
        printf("c");
    else if(S_ISBLK(buf.st_mode))
        printf("b");
    else if(S_ISFIFO(buf.st_mode))
        printf("f");
    else if(S_ISSOCK(buf.st_mode))
        printf("s");

    if(buf.st_mode&S_IRUSR)
        printf("r");
    else
        printf("-");

    if(buf.st_mode&S_IWUSR)
        printf("w");
    else
        printf("-");

    if(buf.st_mode&S_IXUSR)
        printf("x");
    else
        printf("-");

    if(buf.st_mode&S_IRGRP)
        printf("r");
    else
        printf("-");

    if(buf.st_mode&S_IWGRP)
        printf("w");
    else
        printf("-");

    if(buf.st_mode&S_IXGRP)
        printf("x");
    else
        printf("-");

    if(buf.st_mode&S_IROTH)
        printf("r");
    else
        printf("-");

    if(buf.st_mode&S_IWOTH)
        printf("w");
    else
        printf("-");

    if(buf.st_mode&S_IXOTH)
        printf("x");
    else
        printf("-");

    printf("\t\t");

    psd=getpwuid(buf.st_uid);
    grp=getgrgid(buf.st_gid);
    printf("%4d",buf.st_nlink);
    printf("%-8s",psd->pw_name);
    printf("%-8s",grp->gr_name);

    printf("%6d",(int)buf.st_size);
    strcpy(buf_time,ctime(&buf.st_mtime));
    buf_time[strlen(buf_time)-1]='\0';
    printf("\t%s",buf_time);
}

 

标签:include,st,ISREG,POSIX,mode,printf,else,buf,ISLINK
From: https://www.cnblogs.com/LiuYanYGZ/p/18007483

相关文章

  • Linux进程通信-POSIX IPC
    前言LinuxPOSIXIPC的可移植性是不如SystemVIPC的,但是我们只用Linux,并且内核版本高于2.6.6的话就不存在该问题了。也因为POSIXIPC出现的比较晚,借鉴了systemVIPC的长处,规避其短处,使得POSIXIPC的接口更易用。进程间通信的手段很多,除了消息队列、信号量、共享内存,还有信号、so......
  • linux 进程间通信 --- 共享内存(POSIX 版本)
    POSIX进程间通信POSIX进程间通信(InterprocessCommunication,IPC)是SystemV进程间通信的变体。它是在Solaris7发行版中引入的。与SystemV对象类似,POSIXIPC对象的属主、属主的组以及其他用户具有读取和写入权限,但是没有执行权限。POSIXIPC对象的属主无法将对象......
  • Linux系统C++程序设计1-Linux系统和POSIX 标准入门
    1Linux系统和POSIX标准入门本书介绍了Linux以及我们如何在Linux环境中使用C++来管理关键资源。我们想花一些时间在本章中加深对操作系统(OS)的基本了解。您将更多地了解一些特定技术、系统调用接口和可移植操作系统接口(POSIXPortableOperatingSystemInterface)的起源。在Lin......
  • POSIX 真的不适合对象存储吗?
    最近,留意到MinIO官方博客的一篇题为“在对象存储上实现POSIX访问接口是坏主意”的文章,作者以S3FS-FUSE为例分享了通过POSIX方式访问MinIO中的数据时碰到了性能方面的困难,性能远不如直接访问MinIO。在对结果进行分析时,作者认为是POSIX本身存在的缺陷导致的性能问题。......
  • 多线程编程同步:Posix信号量
    信号量的定义IPC是进程间通信(interprocesscommunication)的简称。狭义上,IPC主要用于进程间;广义上,IPC可用于进程间或线程间。Posix消息队列、Posix信号量和Posix共享内存区合称为“PosixIPC”.信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段。......
  • POSIX信号量
    背景介绍多进程之间的同步机制:信号量。而在多线程编程中,通常更常见的是使用线程之间的同步机制,例如互斥锁、条件变量、信号量等,来实现线程之间的协调和通信。这些机制更适合用于线程级别的同步和通信需求。POSIX信号信号(signal)就是告知某一进程发生了某个事件的通知,有时也称为......
  • POSIX 详解
    目录编写跨平台应用需要考虑的问题POSIX是什么,为什么需要POSIXPOSIX线程常用API介绍1、POSIX线程库2、创建线程pthread_create3、pthread_self4、线程等待pthread_join(主线程等待新线程)线程终止的方案pthread_exit函数pthread_cancel函数线程分离pthread_detach函数pthread中的线......
  • pandoc: pdflatex: createProcess: posix_spawnp: illegal operation
    RuntimeError:Pandocdiedwithexitcode"1"duringconversion:pandoc:pdflatex:createProcess:posix_spawnp:illegaloperation(Inappropriateioctlfordevice)报错原因这个报错原因可能是由于Pandoc在进行转换时尝试调用pdflatex命令时出错。在某些PDF转换过......
  • 存储系统文件共享协议(POSIX、NFS、SMB/CIFS、FTP、HTTP)介绍
    当您使用云存储系统,需要将文件共享给客户端时,通常需要通过共享协议来实现。目前比较流行的文件共享协议包括:POSIX、NFS、SMB/CIFS、FTP、HTTP,本文为您介绍这几种协议的基本概念、应用场景、访问方式和优缺点,帮助您选择合适的协议进行文件共享。协议概述典型应用场景访问方......
  • posix
    转载:posix是什么都不知道,还好意思说你懂Linux?(qq.com)Linux开发者越来越多,但是仍然有很多人整不明白POSIX是什么。本文就带着大家来了解一下到底什么是POSIX,了解他的历史和重要性。一、什么是posix?1.概念POSIX:可移植操作系统接口(PortableOperatingSystemInterfaceofUNI......