2016-03-04 698 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

相关问题