首页 > 解决方案 > 在linux上的c编程中,inode编号在某个位置突然改变

问题描述

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


void creatEnv();

char *mygetcwd(char *buf, size_t size) {
  DIR  *dirp_p, *dirp_c;
  struct dirent *dp; 
  ino_t cwd_inode;
  dirp_c = opendir("../../.."); //open current working directory
  dirp_p = opendir("../.."); //open parent directory
  printf("\n");

  /* find inode of current working directory */
  printf("--below this,list of runner\n");
  while((dp = readdir(dirp_c))!= NULL){
    printf("fileN : %s  inode : %lu\n",dp->d_name,dp->d_ino);
  }
  printf("\n--below this,list of as3\n");
   while((dp = readdir(dirp_p))!= NULL){
    printf("fileN : %s  inode : %lu\n",dp->d_name,dp->d_ino);
  }
  return buf;
}

int main(void) {
  pid_t pid;
  int status;
  char buf[255];

  creatEnv();
  chdir("dir/sub");

  printf("original func: %s\n", getcwd(NULL, 0));
  printf("%s\n", mygetcwd(buf, 255));

  return 0;
}

void creatEnv(){
  mkdir("dir", 0755);
  mkdir("dir/sub", 0755);
  mkdir("dir/sub2", 0);

  creat("dir/a", 0755);
  creat("dir/b", 0755);
  creat("dir/sub/x", 0755);
  symlink("dir/a", "dir/sl");
  symlink("dir/x", "dir/dsl");
}

结果很奇怪。在下图的第一部分,as3 inode 是 1024015,

在此处输入图像描述

但在第二部分,“。” inode(这必须与 as3 inode 相同)是 256
,由于某种原因“..” inode 是 256。
为什么会发生这种情况?我找不到理由。
只有这两个目录,才会引起奇怪的结果。
在其他目录中,它工作得很好。
我在 repl.it 上编译并运行了这段代码!

标签: clinuxsystems-programminginodereaddir

解决方案


推荐阅读