linux常用命令的实现

clear

在这里插入图片描述

clear命令是清屏。
\033[2J这串代码是VT100里面控制码清屏的意思
\033[y;xH 设置光标位置

ls

列出文件和目录列出文件和目录,它是 Linux 最常用的命令之一。
在这里插入图片描述

【常用参数】
-a 显示所有文件和目录包括隐藏的
-l 显示详细列表
-t 按文件最近一次修改时间排序
-i 显示文件的 inode ( inode 是文件内容的标识)
ls命令的实现大致思路: 先打开目录流,从中读取里面的文件,如果不为空继续读取。关闭文件
所用到的函数
opendir()函数
DIR* opendir(const char name)返回值是DIR类型。
含义:打开参数name指定的目录,与open()类似。
readdir()函数
struct dirent* readdir(DIR pdir) 返回值是struct dirent类型
它是类似于动态返回,返回值是相关文件信息的结构体,如果发生错误或者到达目录尾部则返回空。
closedir()函数
关闭目录流并释放相关资源

//1首先打开当前目录文件
DIR*pdir=opendir(".");//.表示当前目录,打开当前目录。
//2遍历读取当前文件的所有目录
strucr dirent *s;
while(s=readir(pdir)){//打印出所有目录文件信息,需要删除.和..这两个
if(!strcmp(s->d_name,".")||!strcmp(s->d_name,".")){
continue;
}
printf("%s   ",s->d_name);
}
//3.最后关闭文件
closedir(pdir);

代码执行效果
在这里插入图片描述
此时只实现了基础的,我们看到ls命令还有排序等需要对该代码优化。但核心思想就是这样。

pwd命令

查看当前文件的绝对路径
getcwd()函数
函数原型:char *getcwd( char *buffer, int maxlen );
功 能:获取当前工作目录
参数说明:getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数maxlen为buffer的空间大小。
返 回 值:成功则返回当前工作目录,失败返回 FALSE。

核心代码

char path[128]={0};
getcwd(path,128);
preintf("%s",path);

代码执行效果图
在这里插入图片描述

cp命令

首先了解main函数中参数的作用。

在这里插入图片描述
在这里插入图片描述

argc表示在执行main()函数中个数字
argv表示在该程序运行时,命令行传递的参数。例如运行main.c程序。我可以通过
./main aaa bbb ccc这样虽然后面加了aaa bbb ccc字符串但仍会执行main程序。只是传入的参数main函数通过argv可以得到。
在编写cp命令时通过此原理。cp a.c b.c我们可以通过这样的参数传递来知道把哪个文件复制到哪个目录下
cp命令的实现:
1打开源文件(需要被复制的文件)
2读取该文件的内容。
3.创建目标文件
4将读取的内容依次写入该文件中
5关闭这两个文件

文件操作所用到的函数
open()函数:

*int open(const char pathname, int flags, mode_t mode);

使用open函数需要的头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

open()的返回值:
返回一个文件描述符,当文件成功打开时,返回一个非负整数,当文件打开失败时,返回-1

文件描述符将用于write(),read(),lseek()使用

参数:
const char *pathname:文件路径名(绝对路径)或者文件名

int flags:表示文件操作类型分为
● O_RDONLY 只读
● O_WRONLY 只写
● O_RDWR 可读可写

mode_t mode:(可选参数)
文件访问权限的初始值:(0xxx)
可读 r: 4
可写 w: 2
执行 x: 1

write()函数:

*ssize_t write(int fd, const void buf, size_t count);

write()的返回值:
写入成功时,返回写入的字节数(零表示没有任何内容)
如果const void *buf为零,并且fd引用常规文件,则write()可能会返回-1
如果检测到,或未执行错误检测,则将返回0,而不进行任何更改

参数:
int fd:使用open()时返回的文件描述符

void *buf:内存,一般传内存地址,如数组名,指针名)

size_t count:写入字节数

read()函数:

*ssize_t read(int fd, void buf, size_t count);

read()的返回值:
成功时,返回读取的字节数(零表示结束)
出现错误时,返回-1

参数:
int fd:使用open()时返回的文件描述符

void *buf:内存,一般传内存地址,如数组名,指针名

size_t count:读取字节数
如图为源代码
在这里插入图片描述
代码运行
在这里插入图片描述
如图cp命令到此就实现了。

cat命令

cat命令利用有关文件操作知识,读取文件的内容将它打印出来就行。
源代码
在这里插入图片描述
如图为实现效果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值