这节主要学习系统调用stat、lstat、fstat。

格式如下:

int fstat(int filedes, struct stat *buf);

int stat(const char *path, struct stat *buf);

int lstat(const char *path, struct stat *buf);

聪明人一眼就能看出来fstat的第一个参数是和另外两个不一样的,
对!fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是 一个“文件描述符”,
而另外两个则直接接受“文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,
而文件全路经直接写就可以了。
stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;
而stat返回的是该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat比stat多了一个l,
因此它是有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。
而 stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)

这里我们先不纠结这些的用法之类的问题,在工作中我比较常用的就是利用lstat判断目录的存在与否,这里把这个用法写一下:

int CreateDir(const char *pPathName)
{
char szPath[256] = {0}, *pPath, *p;
int nLen;
assert(NULL != pPathName);
strncpy(szPath, pPathName, sizeof(szPath) - 2);
nLen = strlen(szPath);
// 保证目录以'/'结尾
if('/' != szPath[nLen - 1])
{
szPath[nLen] = '/';
}
pPath = szPath + 1;
while((p = strchr(pPath, '/')) != NULL)
{
*p = '\0';
if(access(szPath, W_OK) != 0)
{
if(mkdir(szPath, 0755) == -1)
{
return -1;
}
}
*p = '/';
pPath = p + 1;
}
return 0;
}
    //检查目录是否存在不存在创建
struct stat sfile;
if(lstat("/apps/hotel/paibo", &sfile) == -1 && m_oComm->CreateDir("/apps/hotel/paibo") != 0)
{
POST_INFO("创建目录出错[%s]", "/apps/hotel/paibo");
exit(-1);
}

  

06文件与IO的更多相关文章

  1. 【Go】使用压缩文件优化io (二)

    原文链接: https://blog.thinkeridea.com/201907/go/compress_file_io_optimization2.html 上一篇文章<使用压缩文件优化io ...

  2. node源码详解(七) —— 文件异步io、线程池【互斥锁、条件变量、管道、事件对象】

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource7 本博客同步在https://cnodejs.o ...

  3. 文件和IO流

    摘要:本文主要介绍了Java的文件处理以及常用的IO流操作. 文件操作 概念 File是数据源(保存数据的地方)的一种,可以表示一个文件,也可以表示一个文件目录. File类只能对文件和文件夹进行创建 ...

  4. Atitit.跨语言  文件夹与文件的io操作集合  草案

    Atitit.跨语言  文件夹与文件的io操作集合  草案 1. Jdk原生的太难用了..1 2. PS: apache commons-io包,FileUtils有相关的方法,IOUtils一般是拷 ...

  5. PythonCookBook笔记——文件与IO

    文件与IO 所有的程序都要处理输入与输出,涉及到文本.二进制文件.文件编码和对文件名.目录的操作. 读写文本数据 需要读写各种不同编码的文本数据,使用rt模式的open()函数. 该读写操作使用系统默 ...

  6. 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)

    复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能.        幸运的是,Apache Commons IO等开源组件已经帮我们实现了.        我们可以不用重复 ...

  7. linux系统编程之文件与io(四)

    今天继续学习文件与io,主要是学习文件共享及文件.复制文件描述符,有点抽象,主要是概念上的理解,但是很重要,下面一一来分解: 文件共享: 回顾一下,在linux系统调用中,是通过文件描述符来访问文件的 ...

  8. linux系统编程之文件与io(二)

    今天继续学习文件与io,话不多说,开始进入正题: 文件的read和write系统调用: 说明:函数中出现在size_t和ssize_t是针对系统定制的数据类型:     下面以一个实现文件简单拷贝的示 ...

  9. linux系统编程之文件与io(一)

    经过了漫长的学习,C语言相关的的基础知识算是告一段落了,这也是尝试用写博客的形式来学习c语言,回过头来看,虽说可能写的内容有些比较简单,但是个人感觉是有史起来学习最踏实的一次,因为里面的每个实验都是自 ...

随机推荐

  1. 《JS高程》事件类型学习笔记

    事件类型: UI事件&焦点事件: 鼠标滚轮事件: 键盘与文本事件: 复合事件&变动事件: HTML5事件: 设备事件&触摸与手势事件:

  2. Core Java Volume I — 3.3. Data Types

    3.3. Data TypesJava is a strongly typed language(强类型语音). This means that every variable must have a ...

  3. node实现http上传文件进度条 -我们到底能走多远系列(37)

    我们到底能走多远系列(37) 扯淡: 又到了一年一度的跳槽季,相信你一定准备好了,每每跳槽,总有好多的路让你选,我们的未来也正是这一个个选择机会组合起来的结果,所以尽可能的找出自己想要的是什么再做决定 ...

  4. platanus

    nohup  platanus assemble -o Larrrea -f ../unknown_NoIndex_L000_R1.fastq ../unknown_NoIndex_L000_R2.f ...

  5. Sqlserver 笔记 持续更新

    1.sp_spaceused : sp_spaceused table_name ----------------------------------------------------------- ...

  6. css cursor属性详解

    cursor                       // 鼠标移上去的鼠标状态 属性值有以下: (可以将鼠标移上以下属性值看看效果) auto crosshair default pointer ...

  7. Map-API及详解

    常用API 类别 方法 增加 put.putAll 删除 remove.removeAll.clear 查询 get 取值 entrySet.keySet.values 长度 size 判断 cont ...

  8. 滚动条滚动事件 js

    <div class="xiangxix">                <ul>                    <li class=&qu ...

  9. leetcode 41 First Missing Positive ---java

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  10. Apache使用mod_deflate模块压缩页面优化传输速度

    可以写为一行,也可以写多行,默认为gzip SetOutputFilter DEFLATE # Restrict compression to these MIME types AddOutputFi ...