pwd 命令编写
該程序模擬系統的 pwd命令,當然功能也沒有它的強大
程序主要是使用 chdir(const char* path)函數,該函數使當前的目錄跳轉到指定的目錄中
程序使用遞歸的方式一步一步的返回目錄的路徑
相關函數介紹 成功返回0,失敗返回-1
mkdir(char *pathname,mode_t mode)
rmdir(const char* path)
unlink(const char *path)
link(const char *old,const char *new)
rename(const char* from,const char *to) 重命名函數實際是先建立與新文件的連接,然后刪除以前的連接來實現文件重命名的,使用link,unlink函數
?
/***?pwd.c
*/
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<dirent.h>
void?print_cur_path();
void?get_path_name(int?ino,char?*path_name);
int?get_ino(char?*dir_name);
int?main(int?ac,char?*av[])
{
print_cur_path(get_ino("."));
printf("\n");
return?0;
}
void?print_cur_path(int?ino)
{
char?path_name[BUFSIZ];
????????if(get_ino("..")!=ino)
????????{
????????????????chdir("..");
????????????????get_path_name(ino,path_name);
????????????????print_cur_path(get_ino("."));
????????????????printf("/%s",path_name);
????????}
}
void?get_path_name(int?ino,char?*path_name)
{
????????DIR?*dir;
????????struct?dirent?*dir_name=NULL;
????????if((dir=opendir("."))==NULL)
????????{
????????????????perror("can'n?open?current?directory.\n");
????????????????exit(1);
????????}
????????while((dir_name=readdir(dir))!=NULL)
????????{
????????????????if(dir_name->d_ino==ino)
????????????????{
????????????????strncpy(path_name,dir_name->d_name,BUFSIZ);
????????????????path_name[BUFSIZ-1]='\0';
????????????????closedir(dir);
????????????????return;
????????????????}
????????}
????????perror("read?directory?name?error.\n");
????????error(1);
????????closedir(dir);
}
int?get_ino(char?*dir_name)
{
struct?stat?st_file;
if(stat(dir_name,&st_file)==-1)
????????{
????????perror(dir_name);
????????exit(1);
????????}
return?st_file.st_ino;
}
?
轉載于:https://www.cnblogs.com/ringwang/archive/2009/04/05/1429853.html
總結
- 上一篇: asp.net定点执行任务总结
- 下一篇: 秦磊:被分众CEO“忽悠”往事