资源简介
目标:为Windows操作系统建立一个兼容Unix命令的命令接口,实现命令包括ls,cat,cp,mv,md,rd,cd,sort,more命令。
环境:使用CodeBlock开发(g++编译)
效果:尚未发现BUG
优点:代码可读性高、比较精简、错误处理完善,经测试,略微改动几行代码可在mac-lion-10.8(苹果系统,其实也是unix)上运行
展望:其实开发命令行接口,使用getopt()等函数是比较方便的,但这是作者开发到一半的时间才知道的事情,所以未能及时更换开发方法,希望有缘人能弥补这一缺憾。

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include “Command.h“
using namespace std;
#define PATH_BUF 256
#define FILE_BUF 4096
char path[PATH_BUF]={0};
void print_path()
{
if (getcwd(path PATH_BUF)) {
cout << path << “>“;
} else {
cout << “Error: Cannot get current path\n“;
exit(1);
}
}
void CAT(int argc char *argv[])
{
char buf[FILE_BUF]={0};
try {
if (1 == argc) {
cerr << “Error: Do not specify any file.\n“;
return;
} else if (2 == argc) {
if (0 == strcmp(argv[1] “--help“)) {
cout << “Usage: cat [--help]/[file]/[file1 file2]\n“;
cout << “View file or catenate files.\n“;
return;
} else {
char *filename=argv[1];
ifstream in(filename);
if (!in) throw errno;
do{
in.read(buf FILE_BUF-1);
buf[in.gcount()]=‘\0‘;
cout << buf;
}while(in.gcount() > 0);
cout << “\n“;
in.close();
}
return;
} else if (3 == argc) {
char *source=argv[1];
char *dest=argv[2];
ifstream in(source ifstream::binary);
if (!in) throw errno;
ofstream out(dest ofstream::binary | ofstream::app);
if (!out) throw errno;
do{
in.read(buf FILE_BUF);
out.write(buf in.gcount());
}while(in.gcount() > 0);
in.close();
out.close();
} else {
cerr << “Error: Too many options typed.\n“;
return;
}
} catch (int err) {
cerr << “Error: “ << strerror(err) << endl;
return;
}
}
void CD(int argc char *argv[])
{
char *dirname=NULL;
if (1 == argc) {
cerr << “Error: Do not specify any file.\n“;
return;
} else if (2 == argc) {
if (0 == strcmp(argv[1] “--help“)) {
cout << “Usage: cd [--help]/[file]\n“;
cout << “Change the shell working directory.\n“;
return;
} else {
dirname = argv[1];
if ((-1 == access(dirname 0)) || (0 != chdir(dirname)))
cerr << “Error: “ << strerror(errno) << “\n“;
else {
if (!getcwd(path PATH_BUF))
cerr << “Error: Cannot get current path.\n“;
}
}
} else {
cerr << “Error: Too many options typed.\n“;
return;
}
}
void CP(int argc char *argv[])
{
if (1 == argc) {
cerr << “Error: Do not specify any files.\n“;
return;
} else if (2 == argc) {
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-07-04 18:40 all\
文件 1272 2013-06-29 16:08 all\all.cbp
文件 466 2013-07-03 21:52 all\all.depend
文件 691 2013-07-04 18:40 all\all.layout
目录 0 2013-07-04 18:31 all\bin\
目录 0 2013-07-04 18:40 all\bin\Debug\
文件 1142601 2013-07-04 18:40 all\bin\Debug\all.exe
文件 9921 2013-07-03 21:50 all\Command.cpp
文件 834 2013-07-03 21:52 all\Command.h
文件 24 2013-06-21 15:57 all\icon.rc
文件 2806 2013-07-04 18:40 all\main.cpp
目录 0 2013-07-04 18:31 all\obj\
目录 0 2013-07-04 18:40 all\obj\Debug\
文件 223566 2013-07-04 18:31 all\obj\Debug\Command.o
文件 3150 2013-07-04 18:31 all\obj\Debug\icon.res
文件 15053 2013-07-04 18:40 all\obj\Debug\main.o
文件 2870 2013-06-21 15:55 all\UNIX.ico
- 上一篇:中英文北京地铁线路图全矢量图
- 下一篇:2018年国际会议列表人工智能大类
相关资源
- 易语言OTG串口通信
- FPGA实现PID.v
- grads绘制雨量(GRID.GRD)
- STM32 2.4G通信例程
- GBT 15532-2008 计算机软件测试规范
- 5G室内融合定位白皮书
- 基于FPGA的sdi视频传输工程(k7_sdi_rx
- FPGA彩条显示
- 《Visual Prolog 集成开发环境(下)》
- 《Visual Prolog 基础类》 中文参考.chm
- OpenGL参考手册
- IAR7.20H破解机注册机
- XE7UP1Kg13_Unis.exe
- IAR-Keygen-2019+附使用教程.zip
- cc2530寄存器手册
- The direction of synaptic plasticity mediated
- Reparatory Effects of Nicotine on NMDA Recepto
- Apolipoprotein E4 Impairs in vivo Hippocampal
- Histamine excites rat lateral vestibular nucle
- Diltiazem augmented pentobarbital-induced LORR
- 联想G400G500G490BIOS
- Fabrication and all-optical poling characteris
- Xilinx-FPGA-引脚功能详细介绍.doc
- 基于xilinx FPGA的PCIe设计实战
- 基于PCIe的FPGA动态配置设计与实现
- 为什么工程师要掌握FPGA开发知识?
- 三星DDR800内存条PCB文件和原理图
- uboot到linux logo显示不间断 补丁
- porting.RTEMS移植指南.双语.V20131224.pdf
- 修正Sway-Rocking土-结构相互作用模型的
评论
共有 条评论