fork(), execl*(), execv*() 류의 함수들을 공부해 보시기 바랍니다. 쉘이던지 일반 프로그램이던지, 프로그램이 다른 프로그램을 실행할 때, 이들 함수를 이용하거든요.
./text something 를 입력하고 엔터 키를 누른 시점에 이르러서야, 쉘이 입력한 문자열을 적절히 해석해서 위 함수들을 호출하게 됩니다. exec류 함수들과 main()의 형태가 어느정도 대칭이 되므로 일단 지금 시점에서는 어느정도 이해된다고 느끼실 수 있을 겁니다.
쉘과 ./text란 프로그램이 인터렉티브하게 상호작용해서 주고 받는 것이 아닙니다.
다만 그런 방식만을 제공하면 사용자가 쓰기에 불편함이 많습니다. 프로그래밍하기에 적당하지 않은 방식이지요. 실행할 때 마다 사용자의 입력을 필요로 하면 자동화 시킬 수가 없습니다. 실행된 후에야만 사용자의 입력을 받는 프로그램을 자동화 시키기위에 expect라는 프로그램도 있을 정도 입니다.
실제로 실행 중에 동적으로 입력을 받는 프로그램은 거의 드뭅니다. 대부분의 경우 명령행 인자로 넘기거나 표준 입출력을 사용하거나 설정 파일을 불러 오거나 환경 변수를 읽어 동작하는 것이 더 좋은 방식 입니다.
지금 터미널에서 사용하시는 프로그램들 전부 다 옵션이나 파일 이름을 매번 손으로 입력한다고 생각해 보세요.
반대지요. 명령 라인에서 입력할 수 있는 것을 왜 굳이 scanf 등으로 프로그램 수행 중에 받으려고 하는지?
명령 라인에서 입력받는 것이 더 편하고 유연하잖아요.
쉘 스크립트만 생각해보더라도 답이 나오지 않나요?
사용자와 계속해서 상호작용해야하는 프로그램이 아닌 이상 명령 라인에서 인자를 받는 것이 여러모로 유리합니다.
fork(), execl*(), execv*() 류의
fork(), execl*(), execv*() 류의 함수들을 공부해 보시기 바랍니다. 쉘이던지 일반 프로그램이던지, 프로그램이 다른 프로그램을 실행할 때, 이들 함수를 이용하거든요.
./text something 를 입력하고 엔터 키를 누른 시점에 이르러서야, 쉘이 입력한 문자열을 적절히 해석해서 위 함수들을 호출하게 됩니다. exec류 함수들과 main()의 형태가 어느정도 대칭이 되므로 일단 지금 시점에서는 어느정도 이해된다고 느끼실 수 있을 겁니다.
쉘과 ./text란 프로그램이 인터렉티브하게 상호작용해서 주고 받는 것이 아닙니다.
그렇다면....... 예를들어 server와
그렇다면.......
예를들어 server와 client간의 network 통신하는 프로그램을 구현할 때
ip를 ./server 127:0~~ 이런식으로 argument로 받아오는데
이렇게 argument로 받지않고 scanf로 ip를 받으면 안되나요?
안될거야 없죠. 그런 식으로 동작하는 걸 원하면
안될거야 없죠. 그런 식으로 동작하는 걸 원하면 그렇게 만들면 됩니다. 프로그램 만드는 사람 마음대로죠.
당연히 됩니다. 다만 그런 방식만을 제공하면
당연히 됩니다.
다만 그런 방식만을 제공하면 사용자가 쓰기에 불편함이 많습니다. 프로그래밍하기에 적당하지 않은 방식이지요. 실행할 때 마다 사용자의 입력을 필요로 하면 자동화 시킬 수가 없습니다. 실행된 후에야만 사용자의 입력을 받는 프로그램을 자동화 시키기위에 expect라는 프로그램도 있을 정도 입니다.
실제로 실행 중에 동적으로 입력을 받는 프로그램은 거의 드뭅니다. 대부분의 경우 명령행 인자로 넘기거나 표준 입출력을 사용하거나 설정 파일을 불러 오거나 환경 변수를 읽어 동작하는 것이 더 좋은 방식 입니다.
지금 터미널에서 사용하시는 프로그램들 전부 다 옵션이나 파일 이름을 매번 손으로 입력한다고 생각해 보세요.
--
마잇
설명 감사합니다! 그렇다면 제가 설명을 이해한
설명 감사합니다!
그렇다면 제가 설명을 이해한 바로는
노트북 비밀번호를 설정해놓은 것과 같은 이치인가요?
자동 로그인 설정을 얘기하시는 건가요?
자동 로그인 설정을 얘기하시는 건가요?
--
마잇
> 왜 굳이 쉘에서 입력받는지 궁금해요 반대지요.
> 왜 굳이 쉘에서 입력받는지 궁금해요
반대지요. 명령 라인에서 입력할 수 있는 것을 왜 굳이 scanf 등으로 프로그램 수행 중에 받으려고 하는지?
명령 라인에서 입력받는 것이 더 편하고 유연하잖아요.
쉘 스크립트만 생각해보더라도 답이 나오지 않나요?
사용자와 계속해서 상호작용해야하는 프로그램이 아닌 이상 명령 라인에서 인자를 받는 것이 여러모로 유리합니다.
댓글 달기