论坛风格切换切换到宽版
  • 848阅读
  • 9回复

[问题求助][Ubuntu] 文件类型判断 [复制链接]

上一主题 下一主题
 
发帖
1976
C币
-132244
威望
352
贡献值
1
银元
-3
铜钱
4443
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
我.刚开始学习linu.x编程,来到这里请教各位大虾们的指点 电脑


#inclu.de <stdio.h>学习
#include <sys/stat.h.>              乙肝
#include <unistd.h.>.
int main.(int argc, char **a.rgv)<性病>
{
 &nbs.p;&nbs.p; int i ; 外贸
    struc.t stat. buf;服务器
    c.har *.ptr;.

    for(i = 1; i < a.rgc .; ++i).
 &n.bsp;  {.
     &nbs.p;&n.bsp; printf("%d\n", .buf.st_mode);           鲜花
 &n.bsp;      printf("%s: ", argv).;(        游戏          )
        if..( lstat(argv, &b.uf) < 0).
&.nbsp;  &nb.sp;    {    美容
    .     &nb.sp; &.nbsp;printf("lstat error");(        游戏          )
        &nbsp.; &nbs.p;. continue;健康
&.nbsp;      &.nbsp;}投资
  .      if(S_ISR.EG(buf.st_mode) ).
 &.nbs.p;      { ptr = "regular"; }    外汇
   &n.bsp; &nbs.p;  if(S_ISDIR(buf.st_mode) ).
  &nbsp.;    &nbsp.;{ ptr = "directory"; }外贸
    .    if(S_ISCHR(buf.st._mode) )    外汇
&nbs.p; .     &nbs.p;{ ptr = "charactor special"; }.
   .    . if(S_ISBLK(buf.st_mode) )            杀毒
   &n.bsp;  &nb.sp; { ptr = "block special"; }.
 &nb.sp;    &nbsp.; if( S_ISFIFO(buf.st_mode) )--------------彩票
      &n.bsp; .{ ptr = "fifo"; }--- 印刷
  &nbsp.;     if(S_IS.LNK(buf.st_mode) )域名
      &nbs.p; { ptr =. "symbolic link"; }.
    &nbsp.;   if(S_ISS.OCK(buf.st_mode) )外贸
&nb.sp;       { ptr =. "socket";}.
  .   &nbs.p;  else           鲜花
      &nbs.p; { ptr = "** unknown mod.e **";.}.

 .       pr.intf("%s\n", ptr);(广告)
  &n.bsp; }            杀毒
   &nbs.p;re.turn 0;           女人
}




这是unix环境高.级编程里.的一段程序,为什么在我的机器上执行时,只能判断出socket的文件类型,而其他的文件类型,都判断不出来呢?域名
我的系统是Ubuntu. 8.04  内核版本2.6.2.4-24-generic.


另外还有一个小问题就是,在我的用户的文件目录下,有很多文件夹是.以 ‘.’开头.的,我是想知道这些文件夹有什么作用?为什么要这么做域名

谢谢各位大虾!

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线jackdong.
发帖
1985
C币
-139520
威望
372
贡献值
1
银元
-2
铜钱
4407
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
Re:[Ubuntu]
这个.的意思是当前目录节点
..是上一级目录节点

离线heartevil.
发帖
1971
C币
-61102
威望
333
贡献值
1
银元
-5
铜钱
4333
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
Re:[Ubuntu]
怎么判断不出来我不知道
但那些.开头的文件,是unix系统里的隐藏文件,windows里面文件有隐藏这么个属性,unix的只要文件名是以.开头的文件就是隐藏文件,用户目录下的那些隐藏文件都是一些软件的配置和系统的配置文件,为了免除被你直接ls出来删掉的命运,所以隐藏了

离线tanweihai.
发帖
2003
C币
-193495
威望
363
贡献值
1
银元
-3
铜钱
4592
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
Re:[Ubuntu]
#include <stdio.h>

#include <sys/stat.h>

#include <unistd.h>

int main(int argc, char **argv)

{

            int i ;

            struct stat buf;

            char *ptr;



                for(i = 1; i < argc ; ++i)

                {

                                printf("%d\n", buf.st_mode);

                                printf("%s: ", argv);

                                if( lstat(argv, &buf) < 0)

                                {

                                                printf("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 = "charactor 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);

                }

                return 0;

}
复制代码
逻辑错误
文件前面家.是隐藏文件

离线ppkart.
发帖
2118
C币
-131893
威望
410
贡献值
1
银元
-1
铜钱
4693
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13
Re:[Ubuntu]
谢谢3楼的解答

离线xunleifilm.
发帖
2062
C币
-152450
威望
382
贡献值
1
银元
-1
铜钱
4740
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-13
Re:[Ubuntu]
帮顶,顺便学习学习!

发帖
2081
C币
-60611
威望
377
贡献值
1
银元
-3
铜钱
4767
人人网人气币
0
只看该作者 6楼 发表于: 2010-04-13
Re:[Ubuntu]
贴一下你的程序运行的例子
看看给出的是什么信息

离线qidu2000.
发帖
2108
C币
-193192
威望
398
贡献值
1
银元
-4
铜钱
4860
人人网人气币
0
只看该作者 7楼 发表于: 2010-04-13
Re:[Ubuntu]


QUOTE:原帖由 openspace 于 2009-11-30 14:24 发表
贴一下你的程序运行的例子
看看给出的是什么信息


他的程序是
if(S_ISSOCK(buf.st_mode) )
        { ptr = "socket";}
        else
        { ptr = "** unknown mode **";}

这句的错误
之前的判断都给取消了

发帖
2073
C币
-139650
威望
368
贡献值
1
银元
-4
铜钱
4512
人人网人气币
0
只看该作者 8楼 发表于: 2010-04-13
Re:[Ubuntu]


QUOTE:原帖由 T-Bagwell 于 2009-11-30 14:26 发表


他的程序是
if(S_ISSOCK(buf.st_mode) )
        { ptr = "socket";}
        else
        { ptr = "** unknown mode **";}

这句的错误
之前的判断都给取消了

汗。。。老了。。这个if/else 我居然一下没看出来 。。。

可以把 ptr = "** unknown mode **";
这一段赋值加在最前面,然后后面再跟N个if语句,这样不修改代码量~

但最好如上面说的 用if/else if 这样可以减少运行时间。

发帖
2180
C币
-235163
威望
406
贡献值
1
银元
-1
铜钱
4811
人人网人气币
0
只看该作者 9楼 发表于: 2010-04-13
Re:[Ubuntu]
谢谢,我疏忽了
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个