📄 pwd.c
字号:
/* * Print working (current) directory */#include <stdio.h>#include <sys/param.h>#include <sys/stat.h>#include <sys/dir.h>char dot[] = ".";char dotdot[] = "..";char name[512];int file;int off = -1;struct stat d, dd;struct direct dir;main(){ int rdev, rino; stat("/", &d); rdev = d.st_dev; rino = d.st_ino; for (;;) { stat(dot, &d); if (d.st_ino==rino && d.st_dev==rdev) prname(); if ((file = open(dotdot,0)) < 0) { fprintf(stderr,"pwd: cannot open ..\n"); exit(1); } fstat(file, &dd); chdir(dotdot); if(d.st_dev == dd.st_dev) { if(d.st_ino == dd.st_ino) prname(); do if (read(file, (char *)&dir, sizeof(dir)) < sizeof(dir)) { fprintf(stderr,"read error in ..\n"); exit(1); } while (dir.d_ino != d.st_ino); } else do { if(read(file, (char *)&dir, sizeof(dir)) < sizeof(dir)) { fprintf(stderr,"read error in ..\n"); exit(1); } stat(dir.d_name, &dd); } while(dd.st_ino != d.st_ino || dd.st_dev != d.st_dev); close(file); cat(); }}prname(){ write(1, "/", 1); if (off<0) off = 0; name[off] = '\n'; write(1, name, off+1); exit(0);}cat(){ register i, j; i = -1; while (dir.d_name[++i] != 0); if ((off+i+2) > 511) prname(); for(j=off+1; j>=0; --j) name[j+i+1] = name[j]; off=i+off+1; name[i] = '/'; for(--i; i>=0; --i) name[i] = dir.d_name[i];}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -