zoukankan      html  css  js  c++  java
  • 自己写shell命令pwd

    思维:(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("
    ");
    	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] = '';
    			closedir(dir);
    			return;
    		}
    	}
    }
    


  • 相关阅读:
    STM32的串口DMA收发以及双缓冲区的实现
    平衡二叉树
    二叉树的深度
    3D数学基础(四)四元数和欧拉角
    3D数学基础(三)矩阵
    3D数学基础(二)向量
    3D数学基础(一)Unity坐标系
    快速学会开发微信小程序
    苦逼的程序员
    开通博客,在这个年末,重新开始。
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4589542.html
Copyright © 2011-2022 走看看