首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

程序出错的有关问题

2012-02-07 
程序出错的问题最近在看UNIX环境下的高级编程,在书的56页有这样一个程序#includeunistd.h#includestdio

程序出错的问题
最近在看UNIX环境下的   高级编程,在书的56页有这样一个程序
#include   <unistd.h>
#include   <stdio.h>
#include   <stdlib.h>
#include   <sys/types.h>
#include   <sys/stat.h>

int   main(int   argc,char**   argv)
{
                int   i;
                struct   stat   buf;
                char*   ptr;
                for   (i=1;i   <   argc   ;++i)
                {
                                printf( "%s:   ",argv[i]);
                                if   (   lstat(argv[i],&buf)   <   0   )
                                {
                                                printf( "lstat   error.\n ");
                                                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 ";
#ifdef     S_ISLNK
                                else   if   (S_ISLNK(buf.st_mode))   ptr= "symbolic   link ";
#endif
#ifdef   S_ISSOCK
                                else   if   (S_ISSOCK(buf.st_mode))   ptr= "socket ";
#endif
                                else         ptr= "**   unknown   mode   ** ";
                                printf( "%s\n ",ptr);
                }
                exit(0);


}
~
本人改些了一   下   ,程序如下  
#include   <stdio.h>
#include   <unistd.h>
#include   <stdlib.h>
#include   <sys/types.h>
#include   <sys/stat.h>

int   main(int   argc,char**   argv)
{
                int   i;
                struct   stat   buf;
                char*   ptr;
                for(   i=1;   i   <   argc;++i)
                {
                                printf( "%s:   ",argv[i]);
                                if   (   lstat(argv[i],&buf)   ==   -1     )
                                {
                                                printf( "lstat   error.\n ");
                                                continue;
                                }
                                switch(buf.st_mode)
                                {
                                                case   'S_ISREG ':   ptr= "regular ";   break;
                                                case   'S_ISDIR ':   ptr= "directory ";   break;
                                                case   'S_ISCHR ':   ptr= "character   special ";   break;
                                                case   'S_ISBLK ':   ptr= "block   special ";   break;
                                                case   'S_ISFIFO ':   ptr= "fifo ";   break;
                                                case   'S_ISLNK ':   ptr= "symbolic ";   break;
                                                case   'S_ISSOCK ':   ptr= "socket ";   break;


                                                default:   ptr= "**   unknown   mode   ** ";
                                }
                                printf( "%s\n ",ptr);
                }
                exit(0);
}

发现运行结果就不一样了,不知道我的程序错在哪儿,请高手指点一下,谢谢.

[解决办法]
你好象弄错了概念,你看看《UNIX环境下的 高级编程》第55页最后

S_ISREG、S_ISDIR……等不是一般函数返回的信息代码,它们是 <sys/stat.h> 文件里定义的宏,可以说是需要buf.st_mode做参数的函数。

人家书上的一串IF语句是在的对S_ISREG()、S_ISDIR()……函数的返回值做判断,不能转换成你的这个switch语句吧
[解决办法]
if (S_ISREG(buf.st_mode)) ptr= "regular ";

if (buf.st_mode == 'S_ISREG ') ptr= "regular ";

两个完全不同的结果

热点排行