2016-03-04 107 views
-4

我正在處理一個簡單的shell項目,並且我有主循環工作。我可以輸入命令並解析字符串。我也有一個工作的命令。我做了一些小的改變,現在我得到的錯誤:錯誤:預期'=',',',';','asm'或'__attribute__'之前'{'token

sh.c: In function ‘which’: 
sh.c:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
sh.c:85: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
sh.c:92: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
sh.c:97: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
sh.h:6: error: old-style parameter declarations in prototyped function definition 
sh.c:100: error: expected ‘{’ at end of input 
make: *** [sh.o] Error 1 

下面是我的sh.c文件。我試圖完全刪除我的代碼,因爲我雖然這是問題。但它沒有改變。

#include <stdio.h> 
#include <string.h> 
#include <strings.h> 
#include <limits.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <pwd.h> 
#include <dirent.h> 
#include <sys/types.h> 
#include <sys/wait.h> 
#include <signal.h> 
#include "sh.h" 

int sh(int argc, char **argv, char **envp) 
{ 
    char *prompt = calloc(PROMPTMAX, sizeof(char)); 
    char *commandline = calloc(MAX_CANON, sizeof(char)); 
    char *command, *arg, *commandpath, *p, *pwd, *owd; 
    char **args = calloc(MAXARGS, sizeof(char*)); 
    int uid, i, status, argsct, go = 1; 
    struct passwd *password_entry; 
    char *homedir; 
    struct pathelement *pathlist; 

    uid = getuid(); 
    password_entry = getpwuid(uid);    /* get passwd info */ 
    homedir = password_entry->pw_dir;  /* Home directory to startout with*/ 

    if ((pwd = getcwd(NULL, PATH_MAX+1)) == NULL) 
    { 
    perror("getcwd"); 
    exit(2); 
    } 
    owd = calloc(strlen(pwd) + 1, sizeof(char)); 
    memcpy(owd, pwd, strlen(pwd)); 
    prompt[0] = ' '; 
    prompt[1] = '\0'; 

    /* Put PATH into a linked list */ 
    pathlist = get_path(); 

    while (go) 
    { 
    /* print your prompt */ 
    printf(" [%s]>", getcwd(NULL, PATH_MAX+1)); 
    /* get command line and process */ 
     fgets(commandline, MAX_CANON, stdin); 

    printf("in commandline %s", commandline); 

    args[0] = strtok(commandline, " \n"); 
    int n = 0; 
    printf ("in args %s;\n", args[0]); 
    while(args[n]!=NULL){ 
     n++; 
     args[n] = strtok(NULL, " \n"); 
     printf ("in args %s;\n", args[n]); 
    } 



    /* check for each built in command and implement */ 
    if(strcmp(args[0], "exit") == 0){ 
     printf("exiting\n"); 
     exit(0); 
    } 

    if(strcmp(args[0], "which") == 0){ 
     which(args, pathlist); 

    } 

    } 
    return 0; 
} /* sh() */ 

int which(char **args, struct pathelement *pathlist) 
{ 
    return 0; 
} 



char *where(char *command, struct pathelement *pathlist) 
{ 
    /* similarly loop through finding all locations of command */ 
} /* where() */ 

void list (char *dir) 
{ 
    /* see man page for opendir() and readdir() and print out filenames for 
    the directory passed */ 
} /* list() */ 

下面是我的sh.h文件

#include "get_path.h" 

int pid; 
int sh(int argc, char **argv, char **envp); 
int which(char **args, struct pathelement *pathlist) 
char *where(char *command, struct pathelement *pathlist); 
void list (char *dir); 
void printenv(char **envp); 

#define PROMPTMAX 32 
#define MAXARGS 10 

我知道這可能是一些愚蠢的錯誤一樣失蹤分號或支架。但是我幾次瀏覽了所有代碼,似乎無法找到它。

+0

int其中(char ** args,struct pathelement * pathlist) –

回答

1

沒有所有的代碼,很難看到所有的錯誤和相應的行。但在您的sh.h文件中,我已經看到您在行int which(char **args, struct pathelement *pathlist)後缺少;

+0

謝謝。就是這樣 – Zooloo10

相關問題