w3210will 2022-12-26 15:22 采纳率: 50%
浏览 94
已结题

Linux 命令解释程序

centos 7 linux运行出现问题
刚学几天,用别人的代码改了一下,错误无法修改
求帮忙看一下,感谢!

img

代码:


#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;
}





  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-12-26 16:27
    关注
    #define makedir mkdir
    #define deldir rmdir
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月26日
  • 已采纳回答 12月26日
  • 修改了问题 12月26日
  • 创建了问题 12月26日

悬赏问题

  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化