[Linux, C] 나만의 간단한 Linux 쉘 만들기 (fork, exec사용)Linux2020. 10. 29. 10:55
Table of Contents
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#define MAX 255
void *prompt(char cBuf[]) {
char hBuf[MAX], uBuf[MAX], dBuf[MAX];
char *now;
void *ret;
//now[strlen(now)-1] = 0;
gethostname(hBuf,MAX);
getlogin_r(uBuf,MAX);
getcwd(dBuf,MAX);
printf("%s@%s(%s)#", hBuf, uBuf, dBuf);
ret = fgets(cBuf, MAX, stdin);
if(cBuf[strlen(cBuf)-1] == '\n')
cBuf[strlen(cBuf)-1] = 0;
return ret;
}
int main(){
char cBuf[MAX];
char *arg;
pid_t pid;
int status;
while(prompt(cBuf)) {
if((pid = fork()) < 0){
perror("fork error");
}
// strcmp : 문자열 같은지 체크, 같으면 0을 반환
if(strcmp(cBuf, "exit") == 0){
exit(0);
}
else if(pid == 0){ // chilren case
// strkot : 문자열 자르기
strtok(cBuf, " ");
arg = strtok(NULL, " ");
if(arg == NULL){
execlp(cBuf, cBuf, (char*) 0);
} else {
if(strcmp(cBuf, "cd") == 0){
chdir(arg);
_exit(0);
} else {
execlp(cBuf, cBuf, arg, (char*) 0);
}
}
perror("couldn't execute");
}
waitpid(pid, &status, 0);
}
exit(0);
}
참고
전체적인 코드
execlp
forum.falinux.com/zbxe/index.php?document_srl=408557&mid=C_LIB
반응형
'Linux' 카테고리의 다른 글
[git] 정말 간단하고 내가 쓰고있는 Git 사용방법 (0) | 2020.12.21 |
---|---|
[Linux, C] 파일 디스크립터 생성 (0) | 2020.10.19 |
[Linux, C] echo connect client UDP통신 (0) | 2020.10.19 |
[Linux, C] UDP echo 서버, 클라이언트 (0) | 2020.10.19 |
[Linux,C] ls 명령어 만들기 (0) | 2020.10.15 |
@반나무 :: 반나무_뿌리
3년차 WPF 개발자입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!