C 언어 프로그래밍을 사용하여 셸 파일을 만들려고합니다. 나는이 교수님이 이미 교수님으로부터받은이 스켈레톤을 가지고 있습니다 만, 나는이 오류가 있습니다.이 오류가 있습니다.이 문제가 있습니다.정의되지 않은 참조. 링커 명령이 종료 코드 1과 함께 실패했습니다.
myshell.c 파일 (이 파일은 수정하고 실행해야하는 파일입니다)
/* RCS information: $Id: myshell.c,v 1.2 2006/04/05 22:46:33 elm Exp $ */
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
extern char **getcmdstring(char *cmd);
int main(void) {
int i;
char **args;
char cmd[4096];
while(1) {
printf("$ ");
fgets(cmd,4096,stdin);
args = getcmdstring(cmd);
for(i = 0; args[i] != NULL; i++) {
printf("Argument %d: %s\n", i, args[i]);
}
}
}
및 shell.l 파일
/* RCS information: $Id: shell.l,v 1.1 2006/04/05 22:46:33 elm Exp $ */
#include <stdio.h>
#include <strings.h>
#include <string.h>
int _numargs = 200;
char *_args[200];
int _argcount = 0;
char *strdup(const char *);
%}
WORD [a-zA-Z0-9\/\.-]+
SPECIAL [()><|&;]
%%
_argcount = 0; _args[0] = NULL;
{WORD}|{SPECIAL} {
if(_argcount < _numargs-1) {
_args[_argcount++] = (char *)strdup(yytext);
_args[_argcount] = NULL;
}
}
\n return (int)_args;
[ \t]+
.
%%
char **getcmdstring(char *cmd) {
char **ret;
yy_scan_string(cmd);
ret = (char **)yylex();
yy_delete_buffer(YY_CURRENT_BUFFER);
return ret;
}
당신은 함수 선언으로'extern' 필요하지 않습니다 컴파일하여 수행 할 수 있습니다. – ajay