몇개까지 가능하지요?
만약 각 시스템마다 틀리다면... 어떻게 알수 있지요?
미리감사...
답은 아직 모르겠지만, 윗 문장도 아닐 것 같다는 생각이 드는군요.
OP 의 질문인 "main() 이 받을 수 있는 argument 의 개수" 가 설마 제가 상상
하는 것(?)은 아니라는 가정아래 답변드립니다. 제가 올바르게 기억하고 있다
면, argc 의 값에 주어지는 제한은 없습니다. (프로그램에 의한 호출도 가능하
지만 본질적으로 argc 와 argv 에 주어지는 제한은 implementer 에게 주어지
는 제한으로 보아야 합니다 - 따라서 굳이 그러한 사항을 implementation
limit 로 제시할 필요가 없습니다)
일단, argc 는 음수일 수 없습니다. 그리고 argv[argc] 는 약속에 의해 null
pointer 여야 합니다. 그리고 argc 가 1 이상이라면 argv[0] 에 들어오는 문
자열은 그 프로그램의 이름입니다. (물론 프로그램의 이름이 제공되지 않을
수도 있습니다) 그리고 argc 가 2 이상이라면 argv[1] 부터 argv[argc-1]
에 들어오는 정보가 순수한 program parameter 입니다. 따라서 argc 가
int 형인 점을 생각한다면 한 프로그램에 주어질 수 있는 program parameter
의 개수는 INT_MAX-1 개 (1 부터 INT_MAX-1 까지) 입니다 (이는 순수하게
C 표준에 의해 주어지는 제한입니다). 물론 그 이전에 이러한 사항은
implementation 에 의해 제한될 수 있습니다. (예를들면 운영체제에서 프로
그램에 줄 수 있는 옵션의 개수를 제한할 수도 있겠지요)
확실한 건 위의 문장은 틀린 문장이네요.
그럼...
--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c-expert.uos.ac.kr
-----------------===== Posted via NetPle Usenet Service =====-----------------
http://news.NetPle.com 에 접속하시면 새로운 유즈넷이 열립니다.
_SC_ARG_MAX => Max size of argv[] plus envp[]
참조 하십시요.
<myco...@hanmail.net> wrote in message news:9v2nje$no8$1...@news.netple.com...
이건 POSIX 를 따르는 implementation 에서만 해당되는 이야기이기에, UNIX
나 Linux 환경이 아닌 (즉, POSIX 와 무관한) 일반적인 C implementation
으로는 확장할 수 없습니다. 하지만 좋은 지적이었습니다.
exec() 계열 함수로 특정 프로그램을 실행할 때 그 프로그램에서 받는
argv, envp 를 인자로 지정해 줄 수 있는데, 이 때 argv, envp (사실상 문
자열들이죠) 의 총 길이에 가해지는 제한을 결정하는 함수가
sysconf(_SC_ARG_MAX) 입니다. 또한 이는 <limits.h> 의 ARG_MAX 라는 매크
로를 통해서도 확인할 수 있습니다.
하지만, sysconf() 가 선언되어 있는 <unistd.h> 는 순수 C 표준 라이브러
리가 아니며, <limits.h> 는 C 표준 라이브러리라고 해도 ARG_MAX 는 C 표
준에 의해 정의된 매크로가 아닙니다. 이 경우 ARG_MAX 의 name space 가
user 이기에 ARG_MAX 같은 매크로는 엄밀한 의미에서 해당 컴파일러를 C 표
준을 따르지 않는 것으로 만드는 확장입니다.
참고로 말씀드렸습니다.
아래와 같은 로직에서 if문을 실행 하질 못하구 있습니다.
혹 고수님덜에 조언 부탁 드립니다.
/* 소켓 생성 / 연결 했음 */
/* 여기서 부턴 메시지큐에서 수신이 되는지 대기 상태임 */
while (1) {
... /* 수신된 메시지 처리 루틴 */
if ( 1초가 지났는가? ) {
close(소켓);
exit(-1); /* 프로그램 종료 */
}
}
알고 싶은 곳은 if문의 1초가 지났는가 입니다.
(정확히 시스템이 아무일두 안하구 있었던 1초를 말합니다.)
미리 감사 합니다.