access()

//检查是否调用进程有Access这个文件的权限,如果文件是一个符号链接,会将它解引用,成功返回0,失败返回-1设errno
#include <unistd.h>
int access(const char *pathname, int mode);
/*mode(Bitwise Or) :
F_OK //文件是否存在
R_OK //文件是否存在且授予了该进程读权限
W_OK //文件是否存在且授予了该进程写权限
X_OK //文件是否存在且授予了该进程执行权限
*/
if(0==access("./a.txt",F_OK))
printf("file exists\n");
if(0==access("./a.txt",R_OK))
printf("file exists and grants read permission\n");

fstat()、stat()、lstat()

//读取文件状态,fstat()从fd读取,stat () i从pathname读取,lstat()从pathname读取,如果文件是符号链接,则返回符号链接本身的信息,而其他的函数会对链接解引用,ls的底层实现就使用了lstat(),ls出的条目如果是符号链接会直接输出符号链接文件本身的信息
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
int fstat(int fd, struct stat *buf);
int stat (const char *pathname, struct stat *buf);
int lstat(const char *pathname, struct stat *buf);
/*
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */ //八进制usigned int o%
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 */ //ld%
blksize_t st_blksize; /* blocksize for filesystem 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 */ //ld%,秒
time_t st_ctime; /* time of last status change */
}; 一些POSIX宏可以用来检查文件类型,这些宏参数都是stat类型的st_mode成员
S_ISREG(m) //is it a regular file? //if yes, return 1
S_ISDIR(m) //is it directory?
S_ISCHR(m) //is it character device?
S_ISBLK(m) //is it block device?
S_ISFIFO(m) //is it FIFO (named pipe)?
S_ISLNK(m) //is it symbolic link? (Not in POSIX.1-1996.)
S_ISSOCK(m) //is it socket? (Not in POSIX.1-1996.) IPC对象也可以当做文件进而确定其类型,但他们的测试宏的参数是指向stat的指针,而不是st_mode成员
S_TYPEISMQ() //消息队列
S_TYPEISSEM() //信号量
S_TYPEISSHM() //共享内存对象 //这几个函数还提供了另外的方法读取文件的类型以及获取文件的权限 */

获取文件大小

  1. fseek()把offset移到SEEK_END, 再用ftell()返回文件的大小
  2. lseek() , 返回文件的大小
  3. stat(), struct stat st; st.st_size的数值就是文件大小
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
struct stat st={};
int res=stat("./a.txt",&st);
if(-1==res)
printf("stat"),exit(-1);
printf("st_mode=%o,st_size=%ld,st_mtime=%ld\n",st.st_mode,st.st_size,st.st_mtime);
if(S_ISREG(st.st_mode))
printf("Regular file\n");
if(S_ISDIR(st.st_mode))
printf("Dir file\n");
printf("file prot:%o\n",st.st_mode&0777);
printf("file size:%ld\n",st.st_size);
printf("latest modify:%s",ctime(&st.st_mtime));
struct tm* pt=localtime(&st.st_mtime);
printf("latest modify:%d-%d-%d-%02d:%02d:%02d\n",
1900+pt->tm_year,1+pt->tm_mon,pt->tm_mday,pt->tm_hour,pt->tm_min,pt->tm_sec);
//%02输出2个字符宽度,不足两位输出0站位
return 0;
}

chmod()、fchmod():

//更改文件的权限,这两个函数的唯一区别就是指定文件的方式不一样,成功返回0,失败返回-1,设errno
#include <sys/stat.h>
int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);

truncate()、ftruncate():

//截断文件为指定大小,成功返回0,失败返回-1设errno
#include <unistd.h>
#include <sys/types.h>
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
/*
如果原大小 > 指定大小,多余的文件数据被丢弃
如果原大小e < 指定大小,文件被扩展,扩展的部分被填充为'\0'
*/
/*-----------------------
* chmod(),truncate();
* -------------------*/
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
int res=chmod("a.txt",0600);
if(-1==res)
perror("chmod"),exit(-1); int res=truncate("a.txt",100);
if(-1==res)
perror("truncate"),exit(-1);
/*------------------------------------------------------
ftruncate();mmap();结构体指针初始化
----------------------------------------------------*/
#include<unistd.h>
#include<sys/types.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/mman.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
int id;
char name[20];
double salary;
}Emp;
int main(){
int fd=open("./emp.dat",O_RDWR|O_TRUNC|O_CREAT,0664);
if(-1==fd)
perror("open"),exit(-1);
printf("open success\n");
int res=ftruncate(fd,3*sizeof(Emp)); //要用sizeof,且是Emp(类型)不是emp(对象)
if(-1==res)
perror("ftruncate"),exit(-1); void* pv=mmap(NULL,3*sizeof(Emp),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
if((void*)-1==pv)
perror("mmap"),exit(-1); Emp *pe=pv;
pe[0].id=1001;strcpy(pe[0].name,"zhangfei");pe[0].salary=3000;
pe[1].id=1002;strcpy(pe[1].name,"guanyu");pe[1].salary=3500;
pe[2].id=1003;strcpy(pe[2].name,"liubei");pe[2].salary=4000;
// *(pe+2)={1003,"liubei",4000};
// pe+2->salary=4000; //ATTENTION: ->优先级比+高, 所以一定要加()
printf("map success\n");
res=munmap(pv,3*sizeof(Emp));
if(-1==res)
perror("munmap"),exit(-1);
printf("unmap success\n");
res=close(fd);
if(-1==res)
perror("close"),exit(-1);
printf("close success\n");
return 0;
}

Linux文件和目录的更多相关文章

  1. Linux文件和目录权限详细讲解

    转载请标明出处: http://www.cnblogs.com/why168888/p/5965180.html 本文出自:[Edwin博客园] Linux文件和目录权限解读 如何设置Linxu文件和 ...

  2. Linux 文件与目录管理

    Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什么是绝对 ...

  3. CentOS(十)--与Linux文件和目录管理相关的一些重要命令②

    在结束了第二期的广交会实习之后,又迎来了几天休闲的日子,继续学习Linux.在上一篇随笔 Linux学习之CentOS(十七)--与Linux文件和目录管理相关的一些重要命令① 中,详细记录了与Lin ...

  4. CentOS(九)--与Linux文件和目录管理相关的一些重要命令①

       接上一篇文章,实际生产过程中的目录管理一定要注意用户是root 还是其他用户. 一.目录与路径 1.相对路径与绝对路径 因为我们在Linux系统中,常常要涉及到目录的切换,所以我们必须要了解 & ...

  5. Linux - 文件和目录常用命令

    文件和目录常用命令 目标 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 ...

  6. linux文件与目录管理笔记

    ### Linux文件与目录管理 ---------- 绝对路径: / 相对路径:不以/开头的 当前目录 . 上一个工作目录 - 用户主目录 ~ root账户的主目录是/root 其他用户是/home ...

  7. linux文件权限目录配置笔记

    ###linux 文件权限目录配置笔记 ---------- 多人多任务环境 linux 一般将文件可存取的身份分为三个类别:owner group others Permission deny ls ...

  8. Linux文件与目录管理(一)

    一.Linux文件与目录管理 1.Linux的目录结构是树状结构,最顶级的目录是根目录/(用"/"表示) 2.Linux目录结构图: /bin:bin是Binary的缩写,这个目录 ...

  9. 【转】第七章、Linux 文件与目录管理

    原文网址:http://vbird.dic.ksu.edu.tw/linux_basic/0220filemanager.php 第七章.Linux 文件与目录管理 最近升级日期:2009/08/26 ...

  10. 第七章、Linux 文件与目录管理

    第七章.Linux 文件与目录管理   1. 目录与路径 1.1 相对路径与绝对路径 1.2 目录的相关操作: cd, pwd, mkdir, rmdir 1.3 关於运行档路径的变量: $PATH ...

随机推荐

  1. Scalaz(32)- Free :lift - Monad生产线

    在前面的讨论里我们提到自由数据结构就是产生某种类型的最简化结构,比如:free monoid, free monad, free category等等.我们也证明了List[A]是个free mono ...

  2. scala泛函编程是怎样被选中的

    现在计算机技术发展现象是:无论硬件技术如何发展都满足不了软件需求:无论处理器变得能跑多快,都无法满足软件对计算能力的需要.按照摩尔定律(Moore's Law)处理器(CPU)每平方面积上包含的半导体 ...

  3. 快速熟悉Velocity

    果然公司用的东西跟平时学的东西不太一样,我们公司前台页面并不是我们熟悉的.html或者.jsp文件,而是很多人不知道的 .vm文件,其实只要我们理解了jsp文件,vm文件也就是一些基本语法不同而已. ...

  4. Java一步一步构建web系统 在IDEA下用Maven搭建多模块项目

    1.需求 做一个项目会有很多模块,主要是方便复用,通过各个模块之间聚合.模块也可以独立出来,如公用类库,也可以在做其它项目中使用.该文的实例会有两个模块:分别为dallin-web模块,dallin- ...

  5. Java经典实例:正则表达式,找到匹配的文本

    import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by Frank */ public cla ...

  6. SQL Server 的通用分页显示存储过程

    建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适 ...

  7. CSV.js – 用于 CSV 解析和编码的 JS 工具库

    逗号分隔值(CSV )文件用于以以纯文本的形式存储表格化数据(数字和文本). CSV 文件包含任意数量的记录,通过某种换行符分隔,每条记录由字段,其他一些字符或字符串分隔,最常用的是文字逗号或制表符. ...

  8. tmtTable设计说明文档

    文件链接:tmt-table.js BOSS后台项目用到最多的就是列表页,所以把列表页做成通用组件,可以大大提高开发效率. 因为列表可能有不同的样式,所以在实例化组件时可以传值控制样式,用这种方式: ...

  9. SharePoint 2013 日历根据Category显示不同颜色

    最近有一个小需求,就是SharePoint的日历类型列表,用户希望根据Event里面的Category不同,在前台视图显示成不同的颜色,绞尽脑汁,想到这么个办法,分享给大家,希望有更好方法的也能留言推 ...

  10. JavaScript滚动条插件源码

    这是过年的时候自己写的js滚动条插件的源码,做出的效果自己并不满意,正因为做的并不满意所以回头重新巩固和深入学习js,这个插件有如下几个不太满意的地方: 内容的过度效果,可以参阅QQ客户端最近会话列表 ...