我正在處理一個簡單的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
我知道這可能是一些愚蠢的錯誤一樣失蹤分號或支架。但是我幾次瀏覽了所有代碼,似乎無法找到它。
int其中(char ** args,struct pathelement * pathlist) –