#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");
}
Результат странный. в первой части рисунка ниже индекс in3 равен 1024015,
, но во второй части "." индекс inode (он должен совпадать с индексом as3) равен 256
, а по какой-то причине индекс ".." равен 256.
Почему это происходит? Я не могу найти причину.
Только между этими двумя каталогами. Вызывается странный результат.
В другом каталоге он работает довольно хорошо.
Я скомпилировал и запустил этот код на repl.it!