pwd学习
pwd学习
学习pwd命令
首先通过man命令去学习pwd
man pwd

pwd pwd --help

getcwd():getcwd(char *buf,size_t size)

readdir():readdir(DIR* dir)返回参数dir 目录流的下个目录进入点

实践pwd
伪代码
创建一个字符串数组储存pwd要显示的绝对路径
使用系统调用getcwd()
if (返回指针==NULL)
    调用出错,返回error
else
    打印目录
使用系统调用的代码
#include <stdio.h>
#include <unistd.h>
int main(void)
{
    char path[1000];
    getcwd(path,sizeof(path));
    printf(":%s\n",path);
    return 0;
}

不使用系统调用
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <unistd.h>
  //获取文件的inode-number
  ino_t get_ino_byname(char *filename)
  {
    struct stat file_stat;
    if(0 != stat(filename, &file_stat)) //stat()通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
    {
        perror("stat");
        exit(-1);
    }
  return file_stat.st_ino;
    }
    //根据inode-number, 在当前目录中查找对应文件名
  char *find_name_byino(ino_t ino)
  {
      DIR *dp = NULL;
      struct dirent *dptr = NULL;
      char *filename = NULL;
       if(NULL == (dp = opendir("."))) //opendir()打开一个目录,在失败的时候返回一个空的指针,成返回DIR结构体
  {
      fprintf(stderr, "Can not open Current Directory\n");
      exit(-1);
  }
  else
  {
      while(NULL != (dptr = readdir(dp))) //readdir()用来读取目录。返回是dirent结构体指针
      {
          if(dptr->d_ino == ino)
          {
              filename = strdup(dptr->d_name); //strdup()将串拷贝到新建的位置处,返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值.
              break;
          }
      }
      closedir(dp);
  }
  return filename;
    }
  int main(int argc, char *argv[])
  {
      //记录目名的栈
      char *dir_stack[256];
      unsigned current_depth = 0;
  while(1)
  {
      ino_t current_ino = get_ino_byname("."); //通过"."获取当期目录inode
      ino_t parent_ino = get_ino_byname(".."); //通过".."获取当前目录的父目录的inode
      if(current_ino == parent_ino)
          break;               //达到根目录,推出循环
      /*若两个inode不一样*/
      chdir(".."); //更改当前工作目录,变为当前目录的父目录
      dir_stack[current_depth++] = find_name_byino(current_ino); //"文件名"地址存放
  }
  int i = current_depth - 1;
  for(i = current_depth - 1; i >= 0; i--) //打印路径
  {
      fprintf(stdout, "/%s", dir_stack[i]);
  }
  fprintf(stdout, "%s\n", current_depth == 0 ? "/" : "");
  return 0;
}

pwd学习的更多相关文章
- 2017-2018-3 20155337《信息安全系统设计基础》 pwd指令学习
		2017-2018-3 20155337<信息安全系统设计基础> pwd指令学习 任务要求 学习pwd指令 研究pwd实现需要的系统调用(man -k:grep),写出伪代码 实现mypw ... 
- 2018-2019-1 20165212 《信息安全系统设计基础》第八周学习总结(pwd)
		2018-2019-1 20165212 <信息安全系统设计基础>第八周学习总结 一.知识点总结 1.三种并发方式 构造并发程序的方法有三种: 进程 线程 I/O多路复用 进程:用内核来调 ... 
- 20155322 2017-2018-1《信息安全系统设计》第九周 Linux命令:pwd命令学习与简单实现
		pwd命令学习 功能 Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 格式 pwd [选项] 实例 用 pwd 命令查看默认工作目录的完整路径: 用 pwd 命令查 ... 
- pwd命令学习
		pwd命令学习 1.学习pwd命令 pwd命令功能为输出当前所在工作目录的绝对路径名称. 绝对路径和相对路径: 绝对路径:从根目录开始直到文件位置 相对路径:相对于程序当前所在目录到文件位置 例:程序 ... 
- Linux命令学习总结:pwd命令
		命令简介: 该命令用来显示目前所在的工作目录.指令英文原义:print work directory 执行权限 :All User 指令所在路径:/usr/bin/pwd 或 /bin/pwd ... 
- linux命令学习(5):pwd命令
		Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ... 
- Linux学习笔记:pwd与dirs的区别
		在Linux中可以使用pwd和dirs进行当前目录查看,分别用于显示当前目录和显示完整目录记录.具体如下: 1.pwd 显示当前目录 2.dirs 显示目录堆叠中的记录 END 2018-08-21 ... 
- linux学习笔记3--命令pwd
		Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ... 
- linux命令学习笔记(3):pwd命令
		Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时, 你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置 ... 
- linux基础学习(一)常用命令:date、pwd、cd、cal、who、wc等等
		目录 @(基础命令) Tab键是linux系统中最重要的键之一了,它的功能是命令自动补全== [root@localhost ~]#date 1.用于显示当前的日期和时间 2/用于显示当前的日历 [r ... 
随机推荐
- centos7 python设置虚拟环境
			virtualenv 是一个可以在同一计算机中隔离多个python版本的工具.有时,两个不同的项目可能需要不同版本的python,如 python2.6.6 / python3.0 ,但是如果都装到一 ... 
- C# winfrom 添加Log4Net日志库
			简介:log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.当项目发布之后遇到一些问题,无法 ... 
- Mysql 非幂等性
			幂等性就是指:一个幂等操作任其执行多次所产生的影响均与一次执行的影响相同. -- 幂等性在分布式高并发中很常见,如不能重复点赞.电商订单库存数要一致等. MySQL解决非幂等性常用方法: 1.乐观锁 ... 
- BurpSuite暴力破解和防御实战
			burpsuite暴力破解 工具准备 burp suite 用于攻击web 应用程序的集成平台 jsEncrypter 一个用于前端加密Fuzz的Burp Suite插件,支持base64.sha.m ... 
- vue项目中配置svg图标  cli3路径
			1 添加依赖 npm install svg-sprite-loader file-loader -D 2 在components目录下新增一个IconSvg.vue文件 <template&g ... 
- secureCRT设置配色方案
			https://blog.csdn.net/qq_42672770/article/details/81301494 
- 【2020NOI.AC省选模拟#9】C. 重复
			题目链接 原题解: 通过计数相同的子序列对个数的方式来计算答案. 设$f(i,j)$为$S$的前$i$和$j$个字符的公共子序列对个数. 当$S_i=S_j$时,$f(i,j)=f(i,j-1)+f( ... 
- Ajax的两种写法
			先写一串数据 1 { 2 "status": 200, 3 "data": { 4 "name": "web211001" ... 
- [转]NET实现RSA AES DES 字符串 加密解密以及SHA1 MD5加密
			表明来源 https://www.cnblogs.com/shanranlei/p/3630944.html#!comments 本文列举了 数据加密算法(Data Encryption Alg ... 
- Debug --> wireshark中的lua插件使用
			一.使用Lua脚本对pcap文件按流进行存储 https://zhuanlan.zhihu.com/p/35188803 二.使用tshark对pcap报文进行批量切流 https://blog.cs ... 
