pwd命令学习

摘要:
Pwd命令学习1。学习pwd命令pwd命令函数是输出当前工作目录的绝对路径名。使用getcwd命令实现pwd函数代码,如下所示:#include #include #include intmain{charbuf[1024];char*cwd=getcwd;if{perror;exit(-1);}else{printf;}return0;}测试结果通过icode数值实现了pwd命令。此外,我们还可以通过文件的icode值输出其绝对路径伪代码,如下所示:获取初始目录名next:获取当前目录的icode _Number通过chdir()返回上层目录,以获取上层目录的icoode _Number_agoicode_Number==icode_nnumber_ago?

pwd命令学习

1. 学习pwd命令

pwd命令功能为输出当前所在工作目录的绝对路径名称。

绝对路径和相对路径:

绝对路径:从根目录开始直到文件位置
相对路径:相对于程序当前所在目录到文件位置
例:程序运行在C:/user/dell下,假设有一个文件test.txt
绝对路径:C:/user/dell/test.txt
相对路径:./test.txt

pwd命令学习第1张

系统手册的查询

  • 我们首先通过man pwd 命令查看pwd的详细功能

pwd命令学习第2张

  • 可以看到pwd中有两个带参数的执行方式分别为man -lman -p

    • pwd -l 功能为从环境中执行PWD命令,即使它包含符号链接;
    • pwd -p 功能为避免所有符号链接,执行pwd命令。
  • 由于路径中无特殊符号链接,因此执行两个命令结果并无区别

pwd命令学习第3张

  • 输入man -k dir grep 2 查看系统调用,我们可以发现getpwd函数,功能为获取当前工作目录

pwd命令学习第4张

  • 接下来通过man getcwd 命令查看getcwd函数功能
    • char *getcwd(char *buf, size_t size); 该函数的第一个参数为数组首地址,第二个参数为空间值;
    • 该函数返回一个以null结尾的字符串,其中包含一个绝对路径名,该路径名是调用进程的当前工作目录。

pwd命令学习第5张

使用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.
");
        exit(-1);
    } else {
        printf("%s
", cwd);
    }

    return 0;
}
测试结果

pwd命令学习第6张

通过icode-number值实现pwd命令

  • 此外,我们还可以通过文件的icode值方式输出它的绝对路径
伪代码如下
获取初始目录名称
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('
');
   	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] = '

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何在ThinkPHP2.1中使用Smarty3MySQL分页时使用 limit+order by 会出现数据重复问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

《QT Creator快速入门》第十一章(一):图形视图

一、图形视图框架结构 图形视图框架由场景QGraphicsScene、视图QGraphicsView、图形项QGraphicsItem组成,它提供了一套基于图形项模型视图编程方法。图形视图框架可以管理数量庞大的自定义2D图形项,比如要绘制上万个图形并对这些图形进行拖动、检测位置等操作的话使用图形视图框架就可以方便的管理它们。场景中可以包含各种形状的图形项,...

mybatis插入Oracle数据库中日期型数据

前端页面type类型是:datetime-local,因为如果是date类型,只显示年月日,不显示时间,这个可以显示时间 但插入时会以:2020-02-0202T10:10  这个格式出现,所以下面代码,将这个格式转换为:2020-02-02 10:10 ,通过修改传来的user,然后通过set方法修改。 1 /** 2 * 新增用...

char码值对应列表大全

Char("0") 为0的字符Char("1")Char("2")Char("3")Char("4")Char("5")Char("6")Char("7") 响铃Char("8") 回格Char("9") tab(水平制表符)Char("10") 换行Char("11") tab(垂直制表符)Char("12") 换页Char("13") 回车 chr(1...

python获取文件的绝对路径

python获取文件的绝对路径 importos defload_file(): #获取当前文件路径 current_path = os.path.abspath(__file__) #获取当前文件的父目录 father_path = os.path.abspath(os.path.dirname(current_pat...

AVR_GCC程序设计基础

1.在avr studio的project options(工程选项里面)在General选项里面需要注意的是: edit configuratio:这个选项的意思是当前项目的默认输出文件夹是default,而且这个文件夹的名称是可以改的 Device:是我们要选择工作的芯片 Frequency:是芯片的工作频率 Optimizatio:是程序编译时优化...

(转载)Telnet协议详解及使用C# 用Socket 编程来实现Telnet协议

转自:http://www.cnblogs.com/jicheng1014/archive/2010/01/28/1658793.html 这因为有个任务涉及到使用telnet 来连接远端的路由器,获取信息,之后进行处理. 所以需要写一个自动telnet登录到远端,之后获取信息进行处理的程序. 自己C++ 一塌糊涂,所以几乎最开始就没打算用C++或者C写...