2 anjingwunai anjingwunai 于 2015.06.28 17:48 提问

为什么在ubuntu下调用stat函数,执行路径不同,结果也会不同?

在ubuntu下编写判断一个文件是否目录得程序,调用了sys/stat.h头文件中得stat函数,生成可执行文件后,在不同路径下执行结果是不一样得,烦请各位大神帮忙看一下是什么情况,多谢多谢(没分额)。


说明:
在我得电脑上,程序存放得绝对路径是/home/xiaoming/Desktop/linuxStudy/filesystem/,执行程序时,分别在/home/xiaoming/Desktop/linuxStudy路径下执行和在程序存放路径下执行,得出得结果是不一样得。


代码:

#include <unistd.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>

int main()
{
    DIR *dir = opendir("/home/xiaoming/Desktop/linuxStudy");
    struct dirent *ptr;
    mode_t modes = 0;
    struct stat statbuf;
    while ((ptr = readdir(dir)) != NULL)
    {
        long offset = telldir(dir);        
        stat(ptr->d_name, &statbuf);
        modes = 0;
        modes = statbuf.st_mode;
        printf("statbuf.st_mode = %o\n", modes);
        if (S_ISDIR(modes))
            printf("------- %s is a dir\n", ptr->d_name);          
        else
            printf("******* %s is not a dir\n", ptr->d_name);
        printf("dirname: %s,  offset: %lx \n\n", ptr->d_name, offset);       
    }
    closedir(dir);
    exit(0);
}


执行结果:

图片说明
图片说明
图片说明

1个回答

anjingwunai
anjingwunai   2015.06.28 20:57

经过实验,发现在readdir之前调用chdir,则不会出现这个问题,但原因仍未知。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
玄学!?相同的代码在不同的IDE下运行结果不同。
这是在codeblocks下运行的结果、这是在Devc++运行的结果代码一模一样 , 运行出来的结果不同???怎么解决呢?我换过编译器,也换过codeblocks的版本,但结果都是这样不知道你们的运行结果是哪个?Devc++出的结果才是正确的答案啊、代码我放这里了,有codeblocks的伙伴试试你的结果。本人还测试了在ubuntu下16.01的codeblock运行与dev相同。目前看来是GCC...
没有被调用的函数其代码为什么会被执行?
现象 首先我们运行下面一段代码: 从以上程序中我们可以知道,main函数调用函数fun1,函数fun1和main函数都没有调用函数fun,因此,我们认为函数fun中的"fun is run.."和 "you are done.."都不会被打印。 且main函数中的打印语句“begin run..”和“main: you should run here”都应该被打印 让我们来
为什么多次调用同一个对象的HashCode方法返回不一样
public class HashCodeDemo  { public static void main(String[] args)  { Person p = new Person(); System.out.println(p.hashCode()); Person p2 = p; System.out.println(p2.hashCode()); String str
matlab如何调用不在当前目录下的函数
1.  把该函数所在的目录加到path上去。 例: path(path,'c:\newpath\'); 其中c:\newpath\ 为该函数的目录(请改成实际的目录名)。 执行该命令一次以后,就可以直接调用这个函数了。 2.  参照zhou feng CTW程序中的 addpath.m global footpath; footpath = cd; addpath(genpat
Mockito模拟同一dao函数多次调用的不同结果
在单元测试中很难创建真实的dao,Mockito能够模拟这些dao,并验证所调用的dao的行为。   同一个dao方法在一个public方法中调用多次,可以根据参数不同采用Mockito的ArgumentMatcher来处理。 如下// 查询 dao.selectByPrimaryKey(1) dao.selectByPrimaryKey(2) // 插入 dao.insert(object1)
[matlab]--调用不同路径下函数的方法(类似c++#include(xxx))
由于最近做了一些科研任务,用到了matlab,当需要调用函数时,为了方便就直接将函数文件和调用脚本放到同一路径下,这样做肯定是没有问题的。但是如果目录采用类似于c++多目录组织,如下图: 这时候调用相应目录下的函数或者文件最好的方法是类似于c++那样把目录路径“包含进来” 其实很简单,只用调用一条命令,假如上图中的目录是'C:\Users\NGMI-zzf\Desktop\SGDLib
Ubuntu里shell和命令执行结果不同(Bash和sh区别)
我这里有个很简单的脚本 root@ubuntu:~/shell# vim hello.sh !/bin/BashThe first programAuthor:jchenecho -e “jchen is a superman!”脚本里的echo -e “jchen is a superman!”在命令下正常的执行结果如下: root@ubuntu:~/shell# echo -e “jchen
一个html按钮切换绑定不同函数后,点击时执行多次函数。
一个html按钮切换绑定不同函数后,点击时执行多次函数。 删除帖子和锁定帖子都需要填写拒绝原因,共用一个窗口,和按钮,按钮绑定不同的事件: title = '删除帖子(屏蔽、不显示)'; $('#btn_ok', '#div_deny_reason').bind('click', function(){edit('if_show', '0');}); title = '锁定
matlab中关于不同包中的同名函数的调用问题
问题描述: 两个工具包的路径都加到了search path中,且两个
同一个SQL语句 会由于表的数据(量、和值个数不同等)变化而执行不同的执行计划
同一个SQL语句  会由于表的数据(量、和值个数不同等)变化而执行不同的执行计划。