20155212——man指令的使用及mypwd的实现
man指令的使用及mypwd的实现
man指令的使用
一、man -k的k参数以及代表的意思
代号 | 代表內容 |
1 | 使用者在shell中可以操作的指令或可执行档 |
2 | 系統核心可呼叫的函数与工具等 |
3 | 一些常用的函数(function)与函数库(library),大部分是C的函数库(libc) |
4 | 装置档案的说明,通常在/dev下的档案 |
5 | 设定档或者是某些档案的格式 |
6 | 游戏(games) |
7 | 惯例与协定等,例如Linux档案系统、网络协定、ASCII code等等的說明 |
8 | 系統管理員可用的管理指令 |
9 | 跟kernel有关的文件 |
二、如何将man指令检索到的帮助文档中文显示
ubuntu源里面已经包含了中文的man包,所以不用从其他地方down了,直接
sudo apt-get install manpages-zh
但是这样man默认显示的还不是中文,还需要以下两步:
把中文man包转换成utf8格式的
新建一个脚本文件
vim t.sh
把下面内容添加进去
#!/bin/bashcd /usr/share/man/zh_CN/for k in *docd $kfor i in *.gzdo j=`echo ${i%.gz}` gunzip $i iconv -f gb18030 -t utf8 $j >tmp mv tmp $j gzip $jdonecd ..done
然后
sudo ./t
修改man默认的语言
sudo gedit /etc/manpath.config
把里面的所有的/usr/share/man
改成/usr/share/man/zh_CN
保存后退出,然后你再试一下man ls
mypwd的实现
一、查找与文件路径相关的系统调用与C库函数
使用
man -k directory | grep 3
查找与路径有关的库函数,可以发现readdir和opendir
以及getcwd函数:
通过
man 3 readdir
得到如下结构体struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* not an offset; see NOTES */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all filesystem types */
char d_name[256]; /* filename */
};
从这个结构体以及相关帮助文档中可以看出,需要找到文件的i-node才可以找到与之对应的文件名。
通过
man -k inode
发现有stat函数可以使用
在stat的帮助文档中可以找到readlink(2)的信息,下面是readlink的帮助文档。
二、综上可以设计出如下三种mypwd
1)my_getcwd:
- 使用getcwd函数:
定义字符数组用来存储路径; |
- 产品代码:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
char buff[256];
if(getcwd(buff,sizeof(buff)))
perror("getcwd");
else
printf("当前路径为:%s\n",buff);
return 0;
}
- 测试结果:
2)my_readlink:
- 使用readlink函数:
调用readlink函数; |
- 产品代码:
#include <stdio.h>
#include <unistd.h>
char * get_exe_path( char * buf, int count)
{
int i;
int rslt = readlink("/proc/self/exe", buf, count - 1);
if (rslt < 0 || (rslt >= count - 1))
{
return NULL;
}
buf[rslt] = '\0';
for (i = rslt; i >= 0; i--)
{
if (buf[i] == '/')
{
buf[i + 1] = '\0';
break;
}
}
return buf;
}
int main(int argc, char ** argv)
{
char path[256];
printf("当前路径:%s\n", get_exe_path(path, 256));
return 0;
}
- 运行结果:
3)my_pwd:
- 综合使用stat函数,readdir函数和opendir函数:
Step1:调用stat函数获得当前目录文件的iNode值,以及父辈目录的iNode; |
- 产品代码:
#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)) {
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("."))) {
fprintf(stderr, "Can not open Current Directory\n");
exit(-1);
} else {
while (NULL != (dptr = readdir(dp))) {
if (dptr->d_ino == ino) {
filename = strdup(dptr->d_name);
break;
}
}
closedir(dp);
}
return filename;
}
/*限制最大的目录深度*/
#define MAX_DIR_DEPTH (256)
int main(int argc, char *argv[])
{
/*记录目录名的栈*/
char *dir_stack[MAX_DIR_DEPTH];
unsigned current_depth = 0;
for(;;) {
/*1.通过特殊的文件名“.”获取当前目录的inode-number*/
ino_t current_ino = get_ino_byname(".");
/*2.通过特殊的文件名“..”获取当前目录的父级目录的inode-number*/
ino_t parent_ino = get_ino_byname("..");
/*3.判断当前目录和上级目录的inode-number是否一样*/
if (current_ino == parent_ino)
break; /*4.如果两个inode-number一样说明到达根目录*/
/*5.如果两个inode-number不一样*/
/*切换至父级目录,根据步骤1获取的inode-number,在父级目录中搜索对应的文件名并记录下来, 重新回到步骤1*/
chdir("..");
dir_stack[current_depth++] = find_name_byino(current_ino);
if (current_depth>=MAX_DIR_DEPTH) { /*路径名太深*/
fprintf(stderr, "Directory tree is too deep.\n");
exit(-1);
}
}
/*输出完整路径名*/
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;
}
- 运行结果:
20155212——man指令的使用及mypwd的实现的更多相关文章
- angularjs学习总结一(表达式、指令、模型)
一:自执行匿名函数 (function(){ /*code*/})();自执行匿名函数:常见格式:(function() { /* code */ })();解释:包围函数(function(){}) ...
- 20165223 《信息安全系统设计基础》 实现mypwd
一.学习pwd命令 1. pwd命令简介 英文原名:Print Working Directory 指令功能:打印出当前工作目录 执行权限:All User 指令所在路径:/usr/bin/pwd 或 ...
- 实现mypwd和mybash
一.pwd 1.学习pwd命令 man pwd查看pwd功能 可以得知pwd功能是打印当前目录 2.研究pwd实现需要的系统调用(man -k; grep),写出伪代码 (1)man -k direc ...
- mypwd的编译和测试
pwd指令及其功能 命令格式: pwd [选项] 命令功能: 查看"当前工作目录"的完整路径 常用参数: 一般情况下不带任何参数 如果目录是链接时: 格式:pwd -P 显示出实际 ...
- 20155212 C语言实现linux下pwd命令的两种方法
20155212 C语言实现linux下pwd命令的两种方法 学习pwd命令 通过man pwd命令查看 pwd [OPTION],一般不加参数 -P显示当前目录的物理路径 -L显示当前目录的连接路径 ...
- 2017-2018-1 20155231 《信息安全系统设计基础》实现mypwd
2017-2018-1 20155231 <信息安全系统设计基础>实现mypwd Linux pwd命令用于显示工作目录. 执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称. p ...
- 20155239 2017-11-19 实现mypwd(选做,加分)
20155239 2017-11-19 实现mypwd(选做,加分) 题目和要求 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试mypwd ...
- 2017-2018-1 20155310 《信息安全系统设计基础》 实现mypwd
2017-2018-1 20155310 <信息安全系统设计基础> 实现mypwd 作业要求: 1.学习pwd命令 2.研究pwd实现需要的系统调用(man -k; grep),写出伪代码 ...
- 2017-2018-1 20155318 《信息安全系统设计基础》第九周课下实践——实现mypwd
2017-2018-1 20155318 <信息安全系统设计基础>第九周课下实践--实现mypwd 相关知识 man -k 查找含有关键字的内容 与管道命令结合使用:man -k k1 | ...
随机推荐
- 天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测
作为天池上的新手,第一次参加天池阿里云线上的比赛,糖尿病预测, 一般的数据挖掘比赛,流程:数据清洗,特征工程(找特征,特征组合),不断的尝试的不同算法,不断调参,也可以考虑将多个模型进行线性组合 大赛 ...
- December 13th 2016 Week 51st Tuesday
Life is a sail trip full of chances and challenges. 人生的旅途中充满了机遇和挑战. A boat sails on the sea, the vas ...
- December 21st 2016 Week 52nd Wednesday
Keep conscience clear, then never fear. 问心无愧,永不畏惧. I find it is very difficult for me to keep consci ...
- Linux命令--权限管理
chmod命令 Linux/Unix 的文件调用权限分为三级 : 文件拥有者.群组.其他.利用 chmod 可以藉以控制文件如何被他人所调用. 使用权限 : 所有使用者 语法 chmod [-cfvR ...
- css3优惠券
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8" /> <title&g ...
- 无法执行程序。所执行的命令为 "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe" /noconfig /fullpaths @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\b411ea32\b48a9fb\aun5r0xd.c
解决方案 将应用程序池进程模型中的标识设为“LocalSystem”即可.
- 渲染、render与绘制
渲染是抽象到具体的过程: 抽象:图片信息的描述(比如一条线:两个端点的位置.线粗.颜色等特征): 具体:依据抽象信息得到的可视图片(绘制过程). 渲染是中文翻译的问题,有种添油加醋的感觉.直意就是交与 ...
- 404 Note Found队-现场编程
目录 组员职责分工 github 的提交日志截图 程序运行截图 程序运行环境 GUI界面 基础功能实现 运行视频 LCG算法 过滤(降权)算法 算法思路 红黑树 附加功能一 背景 实现 附加功能二(迭 ...
- 使用 JLINK 的 RTT 功能 进行 调试打印数据
jlink V9 时,在 SWD 接口 模式 时 ,要 接 SWO 这个引脚 ,否则导致 在 FreeRTOS的任务中不能使用, 正确的 接线方法 是 VCC,GND,SWDIO,SWCLK,S ...
- Angular2 报错 ERROR Error: If ngModel is used within a form tag
今天写textarea的双向数据绑定报错,错误如图: 错误代码如下: <div class="form-group"> <textarea id="&q ...