C语言编写获取Linux本地目录及本机信息的小程序实例

所属分类: 软件编程 / C 语言 阅读数: 68
收藏 0 赞 0 分享

展示目录的小程序
展示指定目录的小程序:

#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
 
void printdir(char *dir,int depth){
  DIR *dp;
  struct dirent *entry;
  struct stat statbuf;
 
  if((dp = opendir(dir)) == NULL){
    fprintf(stderr, "cannot open directory: %s\n", dir);
    return;
  }
 
  chdir(dir);
  while((entry = readdir(dp)) != NULL){
    lstat(entry->d_name,&statbuf);
    if(S_ISDIR(statbuf.st_mode)){
      /*Found a directory,but ignore . and ..*/
      if(strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0){
        continue;
      }
      printf("%*s%s/ \n",depth,"",entry->d_name);
      /*Recurse at a new indent level*/
      printdir(entry->d_name,depth+4);
    }else{
      printf("%*s%s \n",depth,"",entry->d_name);
    }
 
  }
}
int main(){
  /*
  show directory
  */
  printf("Directory scan of /home:\n");
  printdir("/home",0);
  printf("done. \n");
   
  exit(0);
}

根据参数输出目录的结构

#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
 
void printdir(char *dir,int depth){
  DIR *dp;
  struct dirent *entry;
  struct stat statbuf;
 
  if((dp = opendir(dir)) == NULL){
    fprintf(stderr, "cannot open directory: %s\n", dir);
    return;
  }
 
  chdir(dir);
  while((entry = readdir(dp)) != NULL){
    lstat(entry->d_name,&statbuf);
    if(S_ISDIR(statbuf.st_mode)){
      /*Found a directory,but ignore . and ..*/
      if(strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0){
        continue;
      }
      printf("%*s%s/ \n",depth,"",entry->d_name);
      /*Recurse at a new indent level*/
      printdir(entry->d_name,depth+4);
    }else{
      printf("%*s%s \n",depth,"",entry->d_name);
    }
 
  }
}
int main(int argc, char* argv[]){
  /*
  show directory
  */
  char *topdir = ".";
  if(argc >= 2){
    topdir = argv[1];
  }
  printf("Directory scan of %s:\n",topdir);
  printdir(topdir,0);
  printf("done. \n");
   
  exit(0);
}

获取主机基本信息
获取主机用户信息:

#include <sys/types.h>
#include <pwd.h>
#include <stdio.h>
#include <unistd.h>
 
int main(){
  uid_t uid;
  gid_t gid;
 
  struct passwd *pw;
  uid = getuid();
  gid = getgid();
 
  printf("User is %s\n",getlogin());
 
  printf("User IDs: uid=%d, gid=%d \n", uid, gid);
 
  pw = getpwuid(uid);
  printf("UID passwd entry: \n name=%s, uid=%d, gid=%d, home=%s, shell=%s\n",pw->pw_name, pw->pw_uid, pw->pw_gid, pw->pw_dir, pw->pw_shell);
 
  pw = getpwnam("root");
  printf("root passwd entry: \n");
  printf("name=%s, uid=%d, gid=%d, home=%s, shell=%s \n",pw->pw_name, pw->pw_uid, pw->pw_gid, pw->pw_dir, pw->pw_shell);
  exit(0);
}

获取主机自身信息:

#include <sys/utsname.h>
#include <unistd.h>
#include <stdio.h>
 
 
int main(){
  char computer[256];
  struct utsname uts;
  if(gethostname(computer, 255) != 0 || uname(&uts) < 0){
    fprintf(stderr, "Could not get host information \n");
    exit(1);
  }
 
  printf("Computer host name is %s \n",computer);
  printf("System is %s on %s hardware \n",uts.sysname, uts.machine);
  printf("Nodename is %s \n",uts.nodename);
  printf("Version is %s , %s \n",uts.release, uts.version);
 
  exit(0);
}

更多精彩内容其他人还在看

C++中四种对象生存期和作用域以及static的用法总结分析

以下是对C++中四种对象生存期和作用域以及static的用法进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++嵌套类与局部类详细解析

从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类之外的作用域使用该类名时,需要加名字限定
收藏 0 赞 0 分享

C++空类详解

以下是对C++中的空类进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++之友元:友元函数和友元类详解

友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元
收藏 0 赞 0 分享

C++中返回指向函数的指针示例

int (*ff(int)) (int *,int);表示:ff(int)是一个函数,带有一个int型的形参,该函数返回int (*) (int *,int),它是一个指向函数的指针,所指向的函数返回int型并带有两个分别是Int*和int型的形参
收藏 0 赞 0 分享

C数据结构之单链表详细示例分析

以下是对C语言中的单链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C数据结构之双链表详细示例分析

以下是对c语言中的双链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅析如何在c语言中调用Linux脚本

如何在c语言中调用Linux脚本呢?下面小编就为大家详细的介绍一下吧!需要的朋友可以过来参考下
收藏 0 赞 0 分享

深入解析unsigned int 和 int

以下是对unsigned int和int进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅谈C++中的string 类型占几个字节

本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节
收藏 0 赞 0 分享
查看更多