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;
}

 

内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
### Linux 中 `pwd` 命令的作用和使用方法 #### 1. **命令概述** `pwd` 是 "Print Working Directory" 的缩写,用于打印当前工作目录的绝对路径。它是 Linux 系统中最基础也是最常用的命令之一,尤其在复杂目录结构下或者涉及符号链接的情况下显得尤为重要[^1]。 --- #### 2. **基本语法** ```bash pwd [选项] ``` - 不带任何选项时,默认输出当前工作目录的逻辑路径(即遵循符号链接)。 - 支持一些特定选项以满足不同的需求。 --- #### 3. **常见选项** ##### (1)`-L, --logical` 此选项用于显示逻辑路径,即使当前目录是通过符号链接进入的,仍然会显示符号链接本身的路径。这是默认行为,因此通常无需显式指定该选项。 **示例:** 假设有一个符号链接 `/home/user/link -> /var/data`,如果通过该符号链接进入,则执行以下命令: ```bash cd /home/user/link pwd -L ``` 输出将是: ```plaintext /home/user/link ``` 这表明 `-L` 展现的是符号链接本身的位置而非实际物理位置[^4]。 --- ##### (2)`-P, --physical` 与 `-L` 相反,`-P` 选项用于显示物理路径,忽略符号链接的影响。无论当前目录是如何到达的,都会返回真实的文件系统路径。 **示例:** 继续上面的例子,执行以下命令: ```bash pwd -P ``` 输出将是: ```plaintext /var/data ``` 这里展示了真正的物理存储位置而不是符号链接名称[^4]。 --- ##### (3)`--help` 提供关于 `pwd` 命令的帮助信息。尽管某些实现可能不会完全支持所有标准选项,但大多数现代发行版仍能正常解析这一请求并给出相应提示[^3]。 **示例:** ```bash pwd --help ``` --- ##### (4)`--version` 理论上应报告程序版本号,但实际上部分环境下的核心工具链可能会禁用此类元数据查询功能,导致报错或无响应现象发生[^3]。 --- #### 4. **实例演示** ##### 示例 1:查看当前目录 ```bash pwd ``` 假如当前位于用户主目录下,则输出类似于: ```plaintext /home/username ``` ##### 示例 2:结合符号链接测试两种模式差异 创建一个简单的符号链接场景: ```bash ln -s /tmp/testlink /home/username/symlinkdir cd symlinkdir ``` 接着分别尝试不同形式调用: ```bash pwd -L # 输出 /home/username/symlinkdir pwd -P # 输出 /tmp/testlink ``` 由此可以看出两者的区别在于是否考虑到了软连接的存在关系[^2]。 --- ### 总结 综上所述,`pwd` 虽然看似简单,但却蕴含着丰富的细节可供挖掘学习。无论是日常运维还是脚本编写过程中都能发挥重要作用。熟练掌握它的各项特性有助于提升工作效率及准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值