Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

main이 받을수 있는 최대의 argument개수는?

1,176 views
Skip to first unread message

park soon sung

unread,
Oct 31, 2001, 4:15:58 AM10/31/01
to
main(int argc, char **argv) ....

몇개까지 가능하지요?
만약 각 시스템마다 틀리다면... 어떻게 알수 있지요?

미리감사...

ssp...@inetworks.co.kr


윤동열

unread,
Dec 9, 2001, 3:23:44 AM12/9/01
to
몇개라기 보다는 제가 알기론
argc는 인자의 길이 이고
**argv 는 인자가 저장되어 있는 위치 포인터로 알고 있습니다.
그렇다면 argv가 int형이니까
16비트 프로그램일경우 64byte만큼의 인자를 받을수 있겠군요..
시스템이라기 보다는 컴파일러가 몇비트인가에 따라 다르겠지요..
그럼..

여의도소년

unread,
Dec 10, 2001, 10:22:57 AM12/10/01
to

"윤동열" <ydon...@mu.kunsan.ac.kr> wrote in message
news:9uv63n$no7$1...@news2.kornet.net...

> 몇개라기 보다는 제가 알기론
> argc는 인자의 길이 이고
> **argv 는 인자가 저장되어 있는 위치 포인터로 알고 있습니다.
> 그렇다면 argv가 int형이니까
> 16비트 프로그램일경우 64byte만큼의 인자를 받을수 있겠군요..

답은 아직 모르겠지만, 윗 문장도 아닐 것 같다는 생각이 드는군요.

myco...@hanmail.net

unread,
Dec 10, 2001, 11:24:14 AM12/10/01
to
>
>"윤동열" <ydon...@mu.kunsan.ac.kr> wrote in message
>news:9uv63n$no7$1...@news2.kornet.net...
>> 몇개라기 보다는 제가 알기론
>> argc는 인자의 길이 이고
>> **argv 는 인자가 저장되어 있는 위치 포인터로 알고 있습니다.
>> 그렇다면 argv가 int형이니까
>> 16비트 프로그램일경우 64byte만큼의 인자를 받을수 있겠군요..
>
>답은 아직 모르겠지만, 윗 문장도 아닐 것 같다는 생각이 드는군요.
>

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 에 접속하시면 새로운 유즈넷이 열립니다.

최병윤

unread,
Dec 10, 2001, 7:45:56 PM12/10/01
to

sysconf() 에 maximum argument count 가 설정되어 있습니다.

_SC_ARG_MAX => Max size of argv[] plus envp[]

참조 하십시요.


<myco...@hanmail.net> wrote in message news:9v2nje$no8$1...@news.netple.com...

myco...@hanmail.net

unread,
Dec 11, 2001, 6:27:41 AM12/11/01
to
>
>sysconf() 에 maximum argument count 가 설정되어 있습니다.
>
> _SC_ARG_MAX => Max size of argv[] plus envp[]
>
>참조 하십시요.
>

이건 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 표
준을 따르지 않는 것으로 만드는 확장입니다.

참고로 말씀드렸습니다.

씪씪이º

unread,
Jan 15, 2002, 9:54:46 PM1/15/02
to
소켓 프로그램을 짜고 있습니다.
구란데...

아래와 같은 로직에서 if문을 실행 하질 못하구 있습니다.

혹 고수님덜에 조언 부탁 드립니다.

/* 소켓 생성 / 연결 했음 */

/* 여기서 부턴 메시지큐에서 수신이 되는지 대기 상태임 */
while (1) {
... /* 수신된 메시지 처리 루틴 */

if ( 1초가 지났는가? ) {

close(소켓);
exit(-1); /* 프로그램 종료 */
}
}


알고 싶은 곳은 if문의 1초가 지났는가 입니다.
(정확히 시스템이 아무일두 안하구 있었던 1초를 말합니다.)

미리 감사 합니다.

0 new messages