Chinaunix首页 | 论坛 | 博客
  • 博客访问: 116158
  • 博文数量: 29
  • 博客积分: 1215
  • 博客等级: 中尉
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-05 16:29
文章分类
文章存档

2010年(29)

我的朋友

分类: C/C++

2010-12-24 09:55:16

预备知识:
1.stat,fstat,lstat函数返回文件有关的信息结构;
2.lstat函数类似于stat,但是当命名的文件时一个符号链接时,lstat返回该符号链接有关的信息,而不是由该符号链接引用文件的信息;

程序清单:

#include <stdio.h> //for printf

#include <stdlib.h> //for exit

#include <sys/stat.h> //for S_ISREG()/S_ISDIR() and so on


int main(int argc,char *argv[])
{
    char *ptr;
    struct stat buf;
    int i;
    
    for(i=1; i<argc; i++)
    {
        printf("argv[%d]:%s: ",i,argv[i]);    

        if(lstat(argv[i],&buf) < 0)
        {
            perror("lstat error");
            continue;    
        }
        if(S_ISREG(buf.st_mode))
         ptr = "regular";
        else if(S_ISDIR(buf.st_mode))
         ptr = "directory";
        else if(S_ISCHR(buf.st_mode))
         ptr = "character special";
        else if(S_ISBLK(buf.st_mode))
         ptr = "block special";
        else if(S_ISFIFO(buf.st_mode))
         ptr = "fifo";
        else if(S_ISLNK(buf.st_mode))
         ptr = "symbolic link";
        else if(S_ISSOCK(buf.st_mode))
         ptr = "socket";
        else
            ptr = "***unknown mode***";
        
        printf("%s\n",ptr);
    }
    exit(0);
}

程序运行结果:
obe-240 test/linuxc> gcc -o stat_test stat_test4.c
obe-240 test/linuxc> ./stat_test /etc /etc/passwd /dev /dev/log /dev/tty \
? /dev/cdrom
argv[1]:/etc: directory
argv[2]:/etc/passwd: regular
argv[3]:/dev: directory
argv[4]:/dev/log: socket
argv[5]:/dev/tty: character special
argv[6]:/dev/cdrom: symbolic link
阅读(1233) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~