微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UNIX系统编程中的S_IFMT是什么?

我正在学习系统调用,因此编写了一个代码来实现使用C语言的ls。 代码工作,但我不明白的工作

val=(mystat.st_mode & ~S_IFMT)

在下面给出的代码? 我了解其余的代码

#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <time.h> int main(int argc,char* argv[]) { DIR *mydir; struct dirent *myfile; struct stat mystat; mydir = opendir(argv[1]); char buf[512]; while((myfile = readdir(mydir)) != NULL) { struct tm *time_stamp=localtime(&mystat.st_mtime); sprintf(buf,"%s/%s",argv[1],myfile->d_name); stat(buf,&mystat); //stat(myfile->d_name,&mystat); mode_t val; val=(mystat.st_mode & ~S_IFMT); (val & S_IRUSR) ? printf("r") : printf("-"); (val & S_IWUSR) ? printf("w") : printf("-"); (val & S_IXUSR) ? printf("x") : printf("-"); (val & S_IRGRP) ? printf("r") : printf("-"); (val & S_IWGRP) ? printf("w") : printf("-"); (val & S_IXGRP) ? printf("x") : printf("-"); (val & S_IROTH) ? printf("r") : printf("-"); (val & S_IWOTH) ? printf("w") : printf("-"); (val & S_IXOTH) ? printf("x") : printf("-"); printf("t%d",mystat.st_nlink); printf("t%d",mystat.st_uid); printf("t%d",mystat.st_gid); printf("t%d",mystat.st_size); char buffer[80]; strftime(buffer,10,"%b",time_stamp); printf("t%4d %s %2d ",time_stamp->tm_year+1900,buffer,time_stamp->tm_mday); printf(" %sn",myfile->d_name); } closedir(mydir); }

tty在Linux内核中的作用

如何在Go中检测操作系统版本?

自定义预取

是否有可能在任务pipe理器(Windows)的“进程”选项卡中获取有关项目的信息?

python:math和os模块的函数被EINTR中断

MEMORY_BASIC_@R_925_4045@ION结构中的BaseAddress和AllocationBase有什么区别?

部署Python Qt应用程序跨平台:Win,OSX,Linux

你如何保持机器清醒?

Windows和Mac的窗口pipe理器

共享内存中的Shared_dirty vs Private_dirty

S_IFMT是文件类型的位掩码(参见man stat )

按位AND直接与mystat.st_mode( mystat.st_mode & ~S_IFMT )意味着只考虑确定文件类型的位(常规文件套接字,块或字符设备等)

用逐位S_IFMT反的位掩码S_IFMT ( ~S_IFMT )进行位操作,意味着忽略上述位,只保留那些需要确定文件权限的位(该命令下面的9行)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐