일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- C
- jsp
- function
- query
- 포인터
- 투자
- 악성코드
- windows
- UTF-8
- System
- meta
- 자료구조
- CLASS
- Kafka
- beans
- Sort
- JavaScript
- WebProgramming
- OOP
- request
- API
- 윈도우즈
- array
- java
- CSS
- HTML
- c++
- Call-by-reference
- 노드
- algorithm
- Today
- Total
hahahia
Linux Shell 구현 본문
fork함수와 execl함수를 이용하여 Shell 구현.
1. 사용자 명령을 읽기 위한 프롬프트 출력
2. 키보드로 명령을 받는다.
3. fork 함수로 자식 프로세스 생성. 부모 프로세스는 자식 프로세스가 종료되는 걸 기다림.
4. execl 함수로 외부 프로그램(프롬프트 실행)을 실행한다
5. 외부 프로그램 종료(자식 프로세스도 종료)
6. 부모 프로세스는 자식 프로세스가 종료된 걸 확인하고, 다시 프롬프트를 띄움.
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/wait.h>
#include <sys/types.h>
#define MAX_LINE 256
#define PROMPT "# "
#define chop(str) str[strlen(str) -1] = 0x00;
int main(int argc, char **argv)
{
char buf[MAX_LINE];
int proc_status;
pid_t pid;
printf("My Shell VEr 1.0\n");
while(1)
{
memset(buf, 0x00, MAX_LINE);
fgets(buf, MAX_LINE-1, stdin);
if(strncmp(buf, "quit\n", 5) == 0)
{
break;
}
chop(buf);
pid = fork(); // process copy
if(pid==0)
{
if(execl(buf, buf, NULL) == -1)
{
printf("Execl failure\n");
exit(0);
}
}
if(pid>0)
{
printf("Cld wait\n");
wait(&proc_status);
printf("Cild exit\n");
}
}
return 0;
}
'Linux > Linux Programming' 카테고리의 다른 글
[TCP/IP] 온라인 사칙연산 서비스 구현 (0) | 2013.02.09 |
---|---|
Linux TCP/IP 소켓 프로그래밍 (0) | 2013.01.27 |