apue实验之lstat

/*! \file file.cpp
 *  \brief 使用lstat函数打印文件属性
 *  \date 05  6 2006 14:43:22
 *  \author "cyper - sun" <me@sunchangming.com>
 */

#if HAVE_CONFIG_H
# include <config.h>
#endif

#include <sys/types.h>
#include <sys/stat.h>
#include <iostream>
#include <ace/OS.h>
#include <ace/Log_Msg.h>


int main(int argc,char* argv[]){
  ///struct关键字不能省略
  ///C下必须,C++下可选,但是由于某个函数与struct同名
  ///所以C++下也必须加上
  struct stat sb;
  //memset(&sb,0,sizeof(sb));
  const char* name; ///属性名
  for(int i(1);i!=argc;i++){
    std::cout<<argv[i]<<": ";
    if (ACE_OS::lstat(argv[i],&sb)!=0){
      ACE_ERROR((LM_ERROR,ACE_TEXT("%p\n"),
                 ACE_TEXT("获取文件属性失败")));
    }
    else{
      if(S_ISBLK(sb.st_mode)) name="block special file.";
      else if (S_ISCHR(sb.st_mode)) name="character special file.";
      else if (S_ISDIR(sb.st_mode)) name="directory";
      else if (S_ISFIFO(sb.st_mode)) name="pipe or FIFO special file";
      else if (S_ISLNK(sb.st_mode)) name="symbolic link";
      else if (S_ISREG(sb.st_mode)) name="regular file";
      else if (S_ISSOCK(sb.st_mode)) name="socket";
      else if (S_ISWHT(sb.st_mode)) name="whiteout";
      std::cout<<name<<std::endl;
    }

  }
  return 0;
}

后记:
C和C++毕竟还是有些不兼容。
C++中,函数名和变量名可以同名,例如clog,但是C中似乎不可以。
C中,函数名和类型名(struct)可以同名,但是如果在C++中使用,就必须
加struct关键字来声明,否则无法解析。(gcc 3.4下测试失败)

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥