自己動手寫shell命令之pwd

來源:互聯網
上載者:User

標籤:shell   unix環境進階編程   

思路:(1)得到"."的i節點號,稱其為n(使用stat)

           (2)chdir ..(使用chdir)

           (3)找到inode號為n的節點,得到其檔案名稱。

     重複上述操作直到目前的目錄“.”的inode值等於".."的inode值

#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>ino_t get_inode(char *);void printpathto(ino_t);void inum_to_name(ino_t ,char *,int);int main(){printpathto(get_inode("."));printf("\n");return 0;}ino_t get_inode(char * filename){struct stat buffer;if(lstat(filename,&buffer) == -1){perror("can't stat");exit(1);}return buffer.st_ino;}void printpathto(ino_t ino){ino_t ino_parent = get_inode("..");if(ino_parent == ino)return;else{struct stat s;char buffer[255];chdir("..");inum_to_name(ino,buffer,255);printpathto(ino_parent);printf("/%s",buffer);}}void inum_to_name(ino_t ino,char * buffer,int buffer_length){DIR * dir;struct dirent * direntp;struct stat stat_buffer;dir = opendir(".");if(dir == NULL){perror("can't open dir .");exit(1);}while((direntp = readdir(dir)) != NULL){lstat(direntp->d_name,&stat_buffer);if(stat_buffer.st_ino == ino){strncpy(buffer,direntp->d_name,buffer_length);buffer[buffer_length-1] = '\0';closedir(dir);return;}}}


自己動手寫shell命令之pwd

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.