pwd命令学习
pwd命令学习
1.学习pwd命令
- pwd命令功能为输出当前所在工作目录的绝对路径名称。
- 绝对路径和相对路径:
绝对路径:从根目录开始直到文件位置
相对路径:相对于程序当前所在目录到文件位置
例:程序运行在E:/学习/大三下,假设有一个文件test.txt
绝对路径:E:/学习/大三下/test.txt
相对路径:./test.txt
2.系统手册的查询
用
man pwd
命令查看pwd的详细功能
pwd中有两个带参数的执行方式分别为
pwd -l
和pwd -p
pwd -l
功能为从环境中执行PWD命令,即使它包含符号链接;pwd -p
功能为避免所有符号链接,执行pwd命令。
分别执行两个命令,结果无区别,经查找发现是因为路径中无特殊符号链接。
输入
man -k dir | grep 2
查看系统调用,可以发现getcwd函数,功能为获取当前工作目录
通过
man getcwd
命令查看getcwd函数功能
char *getcwd(char *buf, size_t size);
该函数的第一个参数为数组首地址,第二个参数为空间值;该函数返回一个以null结尾的字符串,其中包含一个绝对路径名,该路径名是调用进程的当前工作目录。
3.使用getcwd命令实现pwd功能
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
char buf[1024];
char *cwd =getcwd(buf, sizeof(buf));
if (cwd == NULL) {
perror("Get cerrent working directory fail.\n");
exit(-1);
} else {
printf("%s\n", cwd);
}
return 0;
}
测试结果
4.用icode-number值实现pwd
伪代码
获取初始目录名称
next:
获取当前目录的icode_number
通过chdir() 返回上一级目录
获得上一级目录的icode_number_ago
icode_number==icode_number_ago ?
不相等:
获取当前目录名称
返回next
相等
已经找到根目录,输出绝对路径
代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
ino_t get_inode(char*);
void print(ino_t);
void inum_to_name(ino_t,char*,int);
int main()
{
ino_t node=get_inode(".");
print(node); //打印当前目录绝对路径
putchar('\n');
return 0;
}
void print(ino_t this_inode)
{
ino_t my_inode;
char its_name[BUFSIZ];
/*如果本目录的inode-number与上级目录不同,即本目录不是根目录*/
if (get_inode("..")!=this_inode)
{
chdir(".."); //进入上级目录
inum_to_name(this_inode,its_name,BUFSIZ);
my_inode = get_inode(".");
print(my_inode);
printf("/%s",its_name);
}
}
void inum_to_name(ino_t inode_to_find,char* namebuf,int buflen) //找到inode-number节点对应的文件名,并放在字符数组里
{
DIR* dir_ptr;
struct dirent* direntp;
dir_ptr = opendir(".");
if (dir_ptr == NULL)
{
perror(".");
exit(1);
}
while((direntp = readdir(dir_ptr)) != NULL)
{
if(direntp->d_ino == inode_to_find)
{
strncpy(namebuf,direntp->d_name,buflen);
namebuf[buflen-1] = '\0';
closedir( dir_ptr);
return;
}
}
fprintf( stderr , "error looking for inum % d\n" ,inode_to_find);
exit (1) ;
}
ino_t get_inode(char* fname) //根据文件名,返回inode-number
{
struct stat info;
if ( stat( fname, &info) == -1){
fprintf( stderr , "Cannot stat ");
perror(fname);
exit (1);
}
return info.st_ino;
}
测试结果
pwd命令学习的更多相关文章
- 20155322 2017-2018-1《信息安全系统设计》第九周 Linux命令:pwd命令学习与简单实现
pwd命令学习 功能 Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 格式 pwd [选项] 实例 用 pwd 命令查看默认工作目录的完整路径: 用 pwd 命令查 ...
- Linux命令学习总结:pwd命令
命令简介: 该命令用来显示目前所在的工作目录.指令英文原义:print work directory 执行权限 :All User 指令所在路径:/usr/bin/pwd 或 /bin/pwd ...
- linux命令学习(5):pwd命令
Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...
- linux命令学习笔记(3):pwd命令
Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时, 你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置 ...
- 别出心裁的Linux命令学习法
别出心裁的Linux命令学习法 操作系统操作系统为你完成所有"硬件相关.应用无关"的工作,以给你方便.效率.安全.操作系统的功能我总结为两点:管家婆和服务生: 管家婆:通过进程.虚 ...
- penghui_031413 Bat命令学习
penghui_031413 Bat命令学习 基础部分:====================================================================== ...
- Linux的几个概念,常用命令学习
Linux的几个概念,常用命令学习---------------------------------设备名装载点// 通过装载点访问设备-------------------------------- ...
- 2017-2018-1 20155201 《信息安全系统设计基础》 pwd命令的实现
2017-2018-1 20155201 <信息安全系统设计基础> pwd命令的实现 一.对pwd命令的学习 在终端中输入man pwd查看手册中对pwd这一命令的解释: 以绝对路径的方式 ...
- 2017-2018-1 20155215 第九周 加分项 PWD命令的实现
1 学习pwd命令 Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pw ...
随机推荐
- 初识MySQL <一>
创建一个 表 create table student( id int(10) not null unique auto_increment primary key, name varchar(30) ...
- Jade学习(三)之语法规则下
jade可以自动识别单双标签 // 1.jade内容: input(type="button", value="点击") div // 此时输出❌error:i ...
- React-native 底部导航栏(二)
1.组件安装:npm install react-native-router-flux --save 2.定义菜单图片和文字: import React, { Component } from 're ...
- JSON.parse()与JSON.stringify()和eval()使用方法详解
在和后端对接口的时候,遇到了一个问题 就是series里面数据变量进行拼接的时候,data数据里面全部是数值int类型的 但是因为某些需求需要让他进行某个数据之前的数据都为空 我试过用空字符串和und ...
- java线程中的同步锁和互斥锁有什么区别?
两者都包括对资源的独占. 区别是 1:互斥是通过竞争对资源的独占使用,彼此没有什么关系,也没有固定的执行顺序. 2:同步是线程通过一定的逻辑顺序占有资源,有一定的合作关系去完成任务.
- iconv_close - 关闭字符转换描述符
总览 (SYNOPSIS) #include <iconv.h> int iconv_close (iconv_t cd); 描述 (DESCRIPTION) iconv_close 函数 ...
- SpringBoot打包成jar运行脚本
#!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=csadmin.jar #使用说明,用来提示输入参数 usage(){ echo "Usage: ...
- C++ STL(二)vector的用法
##### vector的定义 ```#include <iostream>#include <string>#include <vector>using name ...
- GlobalLock锁定一个全局内存对象
GlobalLock BAIPro
- 十一、S3C2440 裸机 — GPIO
11.1 GPIO 介绍 11.1.1 GPIO 管脚 GPIO 即是输入输出端口,S3C2440A 包含了 130 个多功能输入/输出口引脚并且它们为如下显示的八个端口: 端口 A(GPA):25 ...