centos 7 linux运行出现问题
刚学几天,用别人的代码改了一下,错误无法修改
求帮忙看一下,感谢!
代码:
#include<iostream>
#include <cstdlib>
#include<stdlib.h>
#include<string.h>
#include<dirent.h>
#include<sys/stat.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<unistd.h>
#include<iomanip>
#include<stdio.h>
using namespace std;
const int M=256;
const int N=10;
char cmd[M];
char word[N][M];
int Read_cmd();
int Memory_cmd();
int do_cmd();
int do_pwd();
int do_list();
int do_modifydir();
int do_makedir();
int do_deldir();
int do_copy();
int do_rename();
int exit();
int Read_cmd(){
char ch[M];
int i = 0;
cin.getline(ch, M);
strcpy(cmd, ch);
return 0;
}
int Memory_cmd(){
int i, j = 0, k = 0;
int flag = 1;
int len = strlen(cmd);
for(i=0; i<len; i++){
if(cmd[i] == ' ' || cmd[i] == '\t'){
if(flag == 0){
word[k][j] = 0;
k++;
j = 0;
flag = 1;
}
}else{
word[k][j] = cmd[i];
j++;
flag = 0;
}
}
if(flag == 1){
word[k][0] = 0;
}else{
word[k][j] = 0;
k++;
word[k][0] = 0;
}
return 1;
}
int do_cmd(){
if(strcmp("pwd",word[0]) == 0){
do_pwd();
return 0;
}else if(strcmp("list",word[0]) == 0){
do_list();
return 0;
}else if(strcmp("modifydir",word[0]) == 0){
do_modifydir();
return 0;
}else if(strcmp("makedir",word[0]) == 0){
do_makedir();
return 0;
}else if(strcmp("deldir",word[0]) == 0){
do_deldir();
return 0;
}else if(strcmp("copy",word[0]) == 0){
do_copy();
return 0;
}else if(strcmp("rename",word[0]) == 0){
do_rename();
return 0;
}else if(strcmp("exit",word[0]) == 0){
exit(0);
return 0;
}
return 0;
}
int do_list(){
DIR* dirp;
int count=0;
struct dirent* ent;
if(strcmp("", word[1]) == 0){
dirp = opendir(".");
}else{
dirp = opendir(word[1]);
}
if(dirp == NULL){
cout<<"打开目录失败!"<<endl;
return -1;
}
while((ent=readdir(dirp)) != NULL){
if(ent->d_name[0] != '.'){
cout<<left<<ent->d_name<<" ";
count++;
}
if(count%8==0)
cout<<endl;
}
cout<<endl;
closedir(dirp);
return 0;
}
int do_modifydir(){
if((strcmp("", word[1])) == 0){
return -1;
}
if(chdir(word[1]) == -1){
cout<<"目录不存在!"<<endl;
return -1;
}
if(strcmp("..",word[1]) != 0){
cout<<" 改变目录 "<<word[1]<<" ......"<<endl;
cout<<" 路径: ";
do_pwd();
}else{
cout<<" 返回上一层目录"<<endl;
cout<<" 路径: ";
do_pwd();
}
return 0;
}
int do_rename()
{
if(rename(word[1], word[2]) == 0)
{
cout<<word[1]<< " 成功命名为: "<<word[2]<<endl;
}
else
cout<<word[1]<< " 重命名失败 "<<endl;
return 0;
}
int do_copy(){
const int Q=256;
char sourcePath[Q];
char newPath[Q];
FILE *oldfp;
FILE *newfp;
char ch;
getcwd(sourcePath, Q);
getcwd(newPath, Q);
strcat(sourcePath, "/");
strcat(sourcePath, word[1]);
strcat(newPath, "/");
strcat(newPath, word[2]);
if((oldfp=fopen(sourcePath, "r")) == NULL){
cout<<"打开文件失败!"<<endl;
return -1;
}
if((newfp=fopen(newPath, "w")) == NULL){
cout<<"创建文件失败!"<<endl;
return -1;
}
while((ch=fgetc(oldfp)) !=EOF){
fputc(ch, newfp);
}
fclose(oldfp);
fclose(newfp);
cout<<"复制成功!"<<endl;
return 0;
}
int do_makedir(){
DIR *_opendir;
if((_opendir=opendir(word[1]))==NULL){
int mark_dir=makedir(word[1],00700);
cout <<"目录"<<word[1] <<"创建成功"<<endl;
}
else
cout<<"目录"<<word[1] <<"已经存在"<<endl;
closedir(_opendir);
return 0;
}
int do_deldir(){
if(strcmp("", word[1]) == 0){
cout<<"请输入正确的目录名!"<<endl;
return -1;
}
if(deldir(word[1]) == -1){
cout<<"删除失败!目录不存在或目录下不为空!"<<endl;
return -1;
}else{
cout<<"删除成功!"<<endl;
return 0;
}
return 0;
}
int do_pwd(){
char buffer[M];
getcwd(buffer, sizeof(buffer));
cout<<buffer<<endl;
return 0;
}
void menu(){
cout<<endl;
cout<<"*****************请选择功能***********************************************"<<endl;
cout<<"1.显示当前所在目录的路径(pwd) "<<endl;//do_pwd()
cout<<"2.列出指定目录名中的所有目录及文件(list <目录名> ) "<<endl;//do_list()
cout<<"3.改变当前工作目录 (modifydir <目录名或路径>) "<<endl;//do_modifydir()
cout<<"4.新建目录(makedir <目录名>) "<<endl;//do_makedir()
cout<<"5.删除目录(deldir <目录名>) "<<endl;//do_deldir()
cout<<"6.复制文件(copy <已存在的文件名> <副本文件名或路径>)------[扩展命令]"<<endl;//do_copy()
cout<<"7.重命名(rename <旧文件名> <新文件名>)--------------------[扩展命令]"<<endl;//do_rename()
cout<<"8.退出系统(exit ) "<<endl;//exit()
cout<<"***********************************************************"<<endl;
cout<<"请输入每个功能的命令(即括号中的内容):"<<endl;
while(1){
cout<<"[niexiang@]~$:";
Read_cmd();
Memory_cmd();
if(do_cmd()==-1)
break;
}
}
int main(){
menu();
return 0;
}