linux下文件和目录
(1)普通文件(regular file):这是最常用的文件类型,这种文件包含了某种形式的数据,文件内容的解释由处理该文件的应用程序进行。
(2)目录文件(directory file):这种文件包含了其他文件的 名字以及指向这些文件有关信息的指针。对一个目录文件具有读权限的进程,都可以读该目录的内容,但只有内核可以 直接写目录文件。
(3)块特殊文件(block special file):这种类型的文件提供对设备(如磁盘)带缓冲的访问,每次访问一固定长度为单位进行。
(4)字符特殊文件(character special file):这种类型的文件提供对设备不带缓冲的访问,每次访问长度可变。系统中的所有设备,要么是字符特殊文件,要么是块特殊文件。
(5)FIFO:这种文件用于进程间通信,也叫做有命名管道。
(6)套接字(socket):这种类型的文件用于进程间的网络通信。套接字也可用于一台宿主机上进程间的非网络通信。
(7)符号连接(symbolic link):这种类型的文件指向另一个文件。
函数描述:
1、头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
2、函数原型:
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);
3、参数:
a、path:文件名
b、buf:是一个(struct stat)的指针
下面是struct stat结构体的详细介绍:
- struct stat {
- dev_t st_dev; /* ID of device containing file */
- ino_t st_ino; /* inode number */
- mode_t st_mode; /* protection */
- nlink_t st_nlink; /* number of hard links */
- uid_t st_uid; /* user ID of owner */
- gid_t st_gid; /* group ID of owner */
- dev_t st_rdev; /* device ID (if special file) */
- off_t st_size; /* total size, in bytes */
- blksize_t st_blksize; /* blocksize for file system I/O */
- blkcnt_t st_blocks; /* number of 512B blocks allocated */
- time_t st_atime; /* time of last access */
- time_t st_mtime; /* time of last modification */
- time_t st_ctime; /* time of last status change */
- };
4、返回值:
成功:0
失败:-1
总结:这里stat和lstat有点区别的,lstat可以看到符号连接(symbokic link),而stat却不可以,下面我用代码具体给出来区别的地方。
文件类型包括在stat结构的st_mode成员中,下面是这7种文件类型的判断方法:
宏 文件类型
S_ISREG(m) 普通文件(is it a regular file?)
S_ISDIR(m) 目录文件(directory?)
S_ISCHR(m) 字符特殊文件(character device?)
S_ISBLK(m) 块特殊文件(block device?)
S_ISFIFO(m) 管道或FIFO [FIFO (named pipe)?]
S_ISLNK(m) 符号链接 [symbolic link? (Not in POSIX.1-1996.)]
S_ISSOCK(m) 套接字 [socket? (Not in POSIX.1-1996.)]
判断例子:
- struct stat fileinfo;
- stat("text.txt",&fileinfo); //text.txt为普通文件
- if(S_ISREG(fileinfo.st_mode))
- {
- printf("the file is regular file\n");
- }
好了,说了这么多,直接上代码看看具体是怎么判断文件的类型的:
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <errno.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main(int argc,char *argv[])
- {
- if(argc != )
- {
- printf("argc must equal to 5!\n");
- exit();
- }
- struct stat fileinfo;
- int i;
- for(i=;i<;i++)
- {
- bzero(&fileinfo,sizeof(fileinfo));
- //stat(argv[i],&fileinfo); //这里stat和lstat有点的区别,lstat可以产看到符号连接(symbokic link),而stat却不可以
- lstat(argv[i],&fileinfo);
- if(S_ISREG(fileinfo.st_mode)) //普通文件
- {
- printf("%s file is regular file\n",argv[i]);
- }
- else if(S_ISDIR(fileinfo.st_mode)) //目录
- {
- printf("%s file is directory file\n",argv[i]);
- }
- else if(S_ISCHR(fileinfo.st_mode)) //字符特殊文件
- {
- printf("%s file is character device file\n",argv[i]);
- }
- else if(S_ISBLK(fileinfo.st_mode)) //块特殊文件
- {
- printf("%s file is block device file\n",argv[i]);
- }
- else if(S_ISFIFO(fileinfo.st_mode)) //FIFO或管道
- {
- printf("%s file is FIFO\n",argv[i]);
- }
- else if(S_ISLNK(fileinfo.st_mode)) //符号连接
- {
- printf("%s file is symbokic link\n",argv[]);
- }
- else if(S_ISSOCK(fileinfo.st_mode)) //套接字
- {
- printf("%s file is socket\n",argv[i]);
- }
- else
- {
- printf(" %s not a file name\n",argv[i]);
- }
- }
- return ;
- }
lstat和stat的区别:
代码中注释掉://stat(argv[i],&fileinfo); 即是用到lstat函数时终端的输出如下
代码中注释掉:lstat(argv[i],&fileinfo);即是用到stat函数终端的输出如下
linux下文件和目录的更多相关文章
- [置顶] Linux下文件和目录权限说明
在Linux下使用ls -l或者ll命令可以查看文件和文件夹的权限.结果显示类似于: drwxrwxrwx,这里分为四组,分别为文件类型,文件所有者的权限(读写执行),文件所有者所在组用户的权限(读写 ...
- Linux下文件和目录的相关操作
文件和目录的操作命令,按以下思路进行整理,感觉更便于记忆和使用 1.创建一个二进制文件 touch f1 2.向文件中写入数据 echo "hello" >> f1 e ...
- Linux下文件及目录的一些操作(附递归遍历目录源码)
1.获取当前工作目录 #include <unistd.h> 1.char *getcwd(char *buf,size_t size); 2. 3.其中,buf为缓冲区地址,size为给 ...
- linux下文件和目录的颜色表示
蓝色表示目录: 绿色表示可执行文件: 红色表示压缩文件: 浅蓝色表示链接文件: 灰色表示其它文件: 红色闪烁表示链接的文件有问题了: 黄色是设备文件,包括block, char, fifo. (摘自: ...
- 怎么查这个文件在linux下的哪个目录
因为要装pl/sql所以要查找tnsnames.ora文件..看看怎么查这个文件在linux下的哪个目录 find / -name tnsnames.ora 查到: /opt/app/oracle/p ...
- [转]Linux中文件权限目录权限的意义及权限对文件目录的意义
转自:http://www.jb51.net/article/77458.htm linux中目录与文件权限的意义 一.文件权限的意义 r:可以读这个文件的具体内容: w:可以编辑这个文件的内容,包括 ...
- linux下文件的复制、移动与删除
linux下文件的复制.移动与删除命令为:cp,mv,rm 一.文件复制命令cp 命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination) ...
- Linux下文件的权限
一.Linux下查看文件属性 命令为: [root@localhost ~]# ls -al 结果: ls是『list』的意思,重点在显示文件的文件名与相关属性.而选项『-al』则表示列出所有的文件详 ...
- Windows与Linux下文件操作监控的实现
一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...
随机推荐
- jquery.imagezoom.js制作鼠标悬停图片放大镜特效、参数和最简教程
一.插件介绍 今天在用到放大镜效果的时候,突然发现网站里没有放大镜的插件.于是总结了一下,放到这里.为自己,也为他人提供方便.jquery.imagezoom.js这款插件用途很简单,就是鼠标移过去, ...
- 在webpack中使用Code Splitting--代码分割来实现vue中的懒加载
当Vue应用程序越来越大,使用Webpack的代码分割来懒加载组件,路由或者Vuex模块, 只有在需要时候才加载代码. 我们可以在Vue应用程序中在三个不同层级应用懒加载和代码分割: 组件,也称为异步 ...
- Aspose.Words关于域的应用
#region 通过word域去插入相应的数据 /// <summary> /// 通过word域去进行指定位置替换数据 /// </summary> public void ...
- log4j实时将数据写入到kafka,Demo和相关的配置详解
一:在项目中引入对应的JAR包,如下,注意对应的包与之前包的冲突 <dependencies> <dependency> <groupId>junit</gr ...
- IntelliJ IDEA(2017.2)安装和破解(转)
如果有一定的经济基础,请支持正版,这里提供破解方法. 一.下载并安装, IntelliJ IDEA的官网:https://www.jetbrains.com 二.破解. 百度下载一个 Jetbrain ...
- .net 设置webbrowser控件使用的IE版本
当我们在使用.net的Webbrowser控件时,发现webbrowser展示的内容和我们用浏览器展示的内容不一致,甚至出现:'JSON' is undefined. 原因是webbrowser使用的 ...
- 27. Remove Element【leetcode】
27. Remove Element[leetcode] Given an array and a value, remove all instances of that value in place ...
- [BZOJ 1058][ZJOI 2007]报表统计 平衡树+线段树
考试的时候看见这道题,感觉自己能AC掉,然后就冲着正解去了.然后想了想数据结构,应该是平衡树.然而蒟蒻的我忘了平衡树怎么打了..然后就根据自己的记忆和理解打了出来.然后我简单的以为相邻的用个链表就能解 ...
- 在实现从excel中读取数据作为接口参数遇到的问题
这个算我自己第一次使用python语言实现 一个功能 一.首先我们先要代码实现如何从excel上读取数据python实现还是比较简单的 1.我使用的是xlrd模块,我们先要安装这个包,这样我们才可以使 ...
- C/C++ 知识点---sizeof使用规则及陷阱分析(网摘)
C/C++ 知识点---sizeof使用规则及陷阱分析 原文出处:[胖奇的专栏] 1.什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gi ...