n을 1로 바꿔서 while문을 탈출하게 하고싶은데 어떻게 해야하나요??
아래는 <코드>
7 int n = 0;
8
9 int main()
10 {
11 int pid,pid1;
12
13 //pid = fork();
14 int con = 0;
15
16 char *input;
17 char ls[] = "ls";
18 char date[] = "date";
19 char quit[] = "quit";
20 input = (char *)malloc(sizeof(char)*20);
21 //char date[20];
22
23 printf("parent start\n");
24 while (n == 0){
25 printf("%d\n",n);
26 printf("input? :\n");
27 scanf("%s",input);
28 pid1 = fork();
29 if(pid1 == 0) {
30 //printf("input?: ");
31 //scanf("%s",input);
32
33 //fgets(input,sizeof(input),stdin);
34 if(strcmp(input,ls) == 0)
35 {
36 execl("/bin/ls","ls","-l",NULL);
37 printf("ls\n");
38 }
39 else if(strcmp(input,date) == 0)
40 {
41 execl("/bin/date","date",NULL);
42 printf("date\n");
43 }
44 else if(strcmp(input,quit) == 0)
45 {
46 printf("process end\n");
47 int n = 1;
48 printf("%d\n",n);
49 exit(0);
50
51 }
52 else
53 {
진심이냐
n=1 - dc App
n = 1 해도 되질 않아요.
모니터 앞에 물 떠놓고 빌면 이뤄짐니다
7번줄 n값초기화 , 24번줄 while문 , 47번줄 n값을 변경하려고 했지만 되지 않음.
47번에 도달하는지 체크해보고 안한다면 왜 안하는지를 생각해봐야지않을까? - dc Cpp
print문으로 47번줄을 도달하는거 같습니다 process end가 출력 됩니다!!!
n = 1 당연이 해봤어요 안되서 전역 지역 때문인가 해서 이리저리 머리굴리다 초기화도 해보고 그런거에요.. 해결방법 있나여?
포크하면 차일드 프로세스때매 그런거아님? 셸프로그램 만듬?
아 왠지 이거때문인거 같네여.. 아근데 제가 while문을 넣은이유가 입력을 계속 받게 하고싶은데...그걸 못 구현 하겠어서요..
ㄴ 그거 맞는거같은데 프로세스 다르면 data/state 도 다름. 입력을 계속 받게하고 싶으면 while 괄호안에 겟라인같은거 쓰면 되겠네
겟라인이요? 예시 한번만 들어줄 수 있나요?
while(getline(&line_buf, &line_buf_size, fp) > 0) 이런식으로 ?
fp자리에 너는 stdin 넣으면 됨 기억이 잘 안나는데 0인가 1인가
제가 이해가 안가는게 이걸 왜입력하는거죠? 구글링해보니 입력을 읽는거 같은데요 quit 입력하면 탈출이 되나요????
코드 읽어보니까 n = 1해도 못빠져나오는 이유는 부모프로세스는 pid != 0 인경우로 바로넘어감 그래서 니가 quit치면 차일드는 끝나겠지 근데 부모는 아직 while 안에 같혀있게됨
겟라인은 나라면 그렇게 짜겠다고 한거임 굳이 그렇게 할 필요는 없음 본질은 니가 포크, 프로세스를 이해못하고 있음 그거 이해하면 어떻게 짜든 상관없지
네 바로 그 문제 입니다. 해서 이리저리 해본거거든요 근데 제 의도는 exit(0) 하면 부모프로세스가 종료되야 되지 않나요?
ㄴ exit을 if (pid1==0) 안에 else if(strcmp(input,quit) == 0) 안에서 호출하고 있잖아 여긴 차일드임
if(pid>0) 조건 위에코드 작동해서 quit 부분에 exit()하면요 execl 실행하고 종료되거든요 지멋대로 그래서 차일드를 만들어서 안에 하게 했는데.. 이문제가 발생..이러지도 저리지도 못하고 있어요...
ㄴ 당연하지 pid >0 프로세스 아이디 반환되는데 그 안에 부모프로세스 있으니까. if pid1 == 0 만든건 잘한거임 차일드만 따로 처리할 수 있으니까 근데 밑에 else 를 만들어서 부모를 처리해주란 말이야
if(pid1 == 0) { //자식프로세스 처리 } else { //부모부분 및 에러 처리 } ㅇㅋ?
그렇게 처리했는데 이상한 입력이 입력되서 command not found 부분이 실행되거든요 혹시 코드 올리면 봐주실 수 있나여?
ㅇㅇ 전체코드 올리삼 근데 나 지금 머리감고 세수하고 이빨닦을거임 한 15분 걸릴듯
실행시 복사개념 모름?
블록안에서 int n = 1하고있느네
답변감사합니다.
strcmp 그렇게쓰면 input에 엔터값 들어간거까지 계산해서 되지 않음? - dc App