20155333 实现mypwd

学习pwd命令

Linux中用 pwd 命令来查看”当前工作目录“的完整路径。

  1. 命令格式:pwd [选项]
  2. 命令功能:查看”当前工作目录“的完整路径
  3. 用参数:一般情况下不带任何参数,如果目录是链接时,格式:

    pwd -P 显示出实际路径,而非使用连接(link)路径。

    pwd -L:与pwd -P完全相反,显示链接路径

研究pwd实现需要的系统调用(man -k; grep),写出伪代码

实现pwd打印当前目录
  • 所需函数 getcwd
  • 函数原型:char *getcwd( char *buffer, int maxlen );
  • 功 能:获取当前工作目录
  • 参数说明:getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数maxlen为buffer的空间大小。
  • 返 回 值:成功则返回当前工作目录,失败返回 FALSE。
  • 在某些 Unix 的变种下,如果任何父目录没有设定可读或搜索模式,即使当前目录设定了,getcwd()还是会返回 FALSE。有关模式与权限的更多信息见 chmod()。
  • 头文件:unistd.h(windows下为direct.h)
#include <unistd.h>
#include <stdio.h>
int main(void){
printf("%s\n",getcwd(NULL,0)); //输出获取路径
return 0;
}

实现mypwd

mypwd.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<dirent.h> //获得一个目录的inode号
//以便于配合readdir筛选
ino_t get_inode(char *); //利用递归,由根目录向外
//依次显示各级目录
void printpathto(ino_t); //在当前目录中
//根据inode号,寻找对应的
//文件或文件夹名称,保存在数组里
//注意:inode有对应类型ino_t,实际上还是个数。
void inum_to_name(ino_t ,char *,int); int main()
{
//输入参数为当前目录
printpathto(get_inode("."));
putchar('n');
return 0;
} void printpathto(ino_t this_inode)
{
ino_t my_inode;
char its_name[BUFSIZ];
//未到达根目录前都满足这个条件
if(get_inode("..") != this_inode)
{
//换到其上级目录
chdir("..");
//把上级目录的文件夹名存到its_name里
inum_to_name(this_inode,its_name,BUFSIZ);
//将当前目录(刚才切换的“上级目录”)
//的内容给my_inode
my_inode =get_inode(".");
//递归调用
printpathto(my_inode);
//输出文件夹名
printf("/%s",its_name);
}
} void inum_to_name(ino_t inode_to_find,char * namebuf,int buflen)
{
//目录描述符
DIR * dir_ptr;
//保存目录信息
struct dirent *direntp;
//打开当前目录
dir_ptr = opendir(".");
if(dir_ptr == NULL){
perror(".");
exit(1);
}
//显示不停读取目录中的内容,if将每条内容加以判断
//判断inode号是否是我们需要的
//如果是,
while((direntp = readdir(dir_ptr)) != NULL)
if(direntp->d_ino == inode_to_find)
{
//将文件夹名复制到namebuf中,并添加'\0'
strncpy(namebuf, direntp->d_name,buflen);
namebuf[buflen-1] = '\0';
closedir(dir_ptr);
return;
}
//如果程序正常,在上面就return了
fprintf(stderr,"error looking for inum %dn",inode_to_find);
exit(1);
} //怎么获得的?
//stat把文件名(目录文件)信息放到结构体
//返回结构体st_ino元素
//这里增加了一步出错处理
ino_t get_inode( char * fname)
{
struct stat info;
if(stat(fname,&info) == -1){
fprintf(stderr,"Cannot stat");
perror(fname);
exit(1);
}
return info.st_ino;
}

测试mypwd

20155333 实现mypwd的更多相关文章

  1. 2017-2018-1 20155205 实现mypwd

    2017-2018-1 20155205 实现mypwd 课堂总结 根据上课对ls -l功能的实现,我总结了实现一个linux命令需要的步骤: 使用man -k xx | grep xx查看帮助文档, ...

  2. 20155227 实现mypwd

    20155227 实现mypwd 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 课堂学习笔记 实现mypwd 在 ...

  3. 2017-2018-1 20155306 mypwd的实现

    2017-2018-1 20155306 mypwd的实现 一.pwd的使用 功能: Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 命令格式:pwd [选项] 命 ...

  4. 实现mypwd

    1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 提交过程博客的链接 代码如图

  5. 2018-2019-1 20165231 实现mypwd(选做)

    实现mypwd 要求: 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试mypwd pwd: 在Linux层次结构中,想要知道当前所处的目录, ...

  6. 20165223 《信息安全系统设计基础》 实现mypwd

    一.学习pwd命令 1. pwd命令简介 英文原名:Print Working Directory 指令功能:打印出当前工作目录 执行权限:All User 指令所在路径:/usr/bin/pwd 或 ...

  7. 2018-2019-1 20165234 实现mypwd

    实现mypwd(选做,加分) 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 提交过程博客的链接

  8. 实现mypwd和mybash

    一.pwd 1.学习pwd命令 man pwd查看pwd功能 可以得知pwd功能是打印当前目录 2.研究pwd实现需要的系统调用(man -k; grep),写出伪代码 (1)man -k direc ...

  9. 20155228 2017-11-19 实现mypwd(选做,加分)

    20155228 2017-11-19 实现mypwd(选做,加分) 题目和要求 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试mypwd ...

随机推荐

  1. Oracle 启用归档

    [applprod@erp10 ~]$ watch ps -fu applprod[applprod@erp10 ~]$ kill -9 82902 84923 [applprod@erp10 ~]$ ...

  2. ssh终端常用快捷键

    ssh终端常用快捷键 快捷键 描述 Ctrl+a 光标移动到行首 Ctrl+e 光标移动到行尾 Ctrl+c 终止当前程序 Ctrl+d 删除光标前的字符,或者推出当前中断 Ctrl+l 清屏 Ctr ...

  3. C# .Net动态调用webService

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Ne ...

  4. 转:C#中的多态

    封装.继承.多态,面向对象的三大特性,前两项理解相对容易,但要理解多态,特别是深入的了解,对于初学者而言可能就会有一定困难了.我一直认为学习OO的最好方法就是结合实践,封装.继承在实际工作中的应用随处 ...

  5. Hadoop HBase概念学习系列之物理视图(又名为物理模型)(九)

    虽然,从HBase的概念视图来看,每个表格是由很多行组成的,但是在物理存储上面,它是按照列来保存的,这一点在进行数据设计和程序开发的时候必须牢记. 在物理存储上面,它是按照列来保存的 需要注意的是,在 ...

  6. 解决标题过长的CSS

    不知道为什么大家用截取字符串的人很多呢.. <html> <head> <style type="text/css"> .divout { di ...

  7. 两周以来的学习成果&遇到的问题及解决:

    1.学习java的基本内容,看慕课网上的java入门三季,与韩顺平老师的java视频 刚开始是看韩顺平老师的视频,边看边实战,内容很细,也很快熟练,但是进度太慢.后来就先看了慕课网上的java 入门的 ...

  8. Python的unittest框架的断言总结

    常用的断言方法如下: assertFalse:为假时返回True:self.assertFalse(表达式,“表达式为true时打印的message”) assertTrue:为真时返回True:se ...

  9. Leetcode Weekly Contest 86

    Weekly Contest 86 A:840. 矩阵中的幻方 3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等. 给定一个 ...

  10. 清除SQL server 记住的用户名和密码

    公司更换电脑,清除SQL server 记住的用户名和密码 请按照上图中的位置找到相应的文件SqlStudio.bin,然后把它删除,请放一百个心,这个文件会自动生成的. 需要注意的是,在删除之前一定 ...