- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
char **fpwd=(char**)malloc(160);
int lstat(const char *path, struct stat *buf);
int process_dir(const char *dir,struct stat *st1,ino_t cit);
char *cdir=".";
ino_t ci=0;
struct stat cstat;
int errors = 0;
char *myname;
int cnt=0;
int main(int argc,char **argv){
myname=argv[0];
cdir=(char*)malloc(512);
if(cdir==NULL){
perror("Not sufficient memory");
errors++;
return -1;
}
memset(cdir,'\0',512);
strcat(cdir,cdir);
strcat(cdir,".");
if(fpwd==NULL){
fprintf(stderr, "%s: out of memory: %s\n",
myname, strerror(errno));
errors++;
return 0;
}
for(int i=0;i<=160;i++){
*(fpwd+i)=(char*)malloc(1600);
if(*(fpwd+i)==NULL){perror("Not sufficient memory");
errors++;
return -1;
}
}
while(ci!=2){
if(lstat(".",&cstat)==-1){
fprintf(stderr, "%s: can't find file:%s %s\n",
myname, cdir, strerror(errno));
errors++;
return -1;
};
ci=cstat.st_ino;
if(process_dir("..",&cstat,ci)==-1){
fprintf(stderr, "%s: can't process dir:%s %s\n",
myname, cdir, strerror(errno));
errors++;
return -1;
};
int fd=open("..",O_RDONLY);
if(fd<0){
perror("open");
errors++;return -1;
}
if(fchdir(fd)==-1){
fprintf(stderr, "%s: can't chdir:%s\n",
myname, strerror(errno));
errors++;return -1;
};
strcat(cdir,"/..");
}
for(int i=cnt-1;i>=0;i--){
printf("/%s",fpwd[i]);
}
printf("\n");return 0;
}
int process_dir(const char *dir,struct stat *st1,ino_t cit/*,char **fpwd*/){
DIR *dp;
struct dirent *ent;
struct stat *dstat;
if ((dp = opendir(dir)) == NULL) {
fprintf(stderr, "%s: cannot open for reading: %s\n", dir, strerror(errno));errors++;return -1;
}
if(lstat(dir,dstat)==-1){
fprintf(stderr, "%s: can't find file:%s %s\n",
myname, cdir, strerror(errno));
errors++;
return -1;
}
while ((ent = readdir(dp)) != NULL){
if(ent->d_ino==cit && strcmp(ent->d_name,".")!=0 && strcmp(ent->d_name,"..")!=0){
strcat(fpwd[cnt++],ent->d_name);
if (closedir(dp) != 0) {
fprintf(stderr, "%s: closedir: %s\n", dir, strerror(errno));
errors++;
return 1;
}
return 0;
}
}
if (closedir(dp) != 0) {
fprintf(stderr, "%s: closedir: %s\n", dir, strerror(errno));
errors++;
return 1;
}
return 0;
}
Комментарии (0) RSS
Добавить комментарий