[완료] 세그멘테이션 오류 질문입니다.

amblance의 이미지

안녕하세요.

stevens 책을 보면서 예제를 따라하다가 질문이 있어서 글을 씁니다.
예제를 보고 컴파일을 했는데 세그멘테이션 오류가 나는군요..

어느부분이 문제인지 설명좀 부탁드리겠습니다.
감사합니다.

=====================================================================================================
#include
#include
#include "ourhdr.h"

int
main(int argc, char *argv[])
{
int accmode, val;
if(argc != 2)
printf("usage: a.out ");

if((val = fcntl(atoi(argv[1]), F_GETFL, 0)) < 0)
printf("fcntl error for fd %d", atoi(argv[1]));

accmode = val & O_ACCMODE;
if (accmode == O_RDONLY) printf("read only");
else if (accmode == O_WRONLY) printf("write only");
else if (accmode == O_RDWR) printf("read write");
else printf("unknown access mode");

if(val & O_APPEND) printf(", append");
if(val & O_NONBLOCK) printf(", nonblocking");
#if !defined(_POSIX_SOURCE) && defined(O_SYNC)
if(val & O_SYNC) printf(", synchronous writes");
#endif
putchar('\n');
exit(0);
}

amir173의 이미지

if((val = fcntl(atoi(argv[1]), F_GETFL, 0)) < 0)

요부분이 문제입니다.

main 함수의 argc, 와 argv 가 무엇인지에 대해서 알아 보세요

간단하게 설명드리면 argc 는 실행코드의 인자 갯수 이고 argv 는 실행코드의 인자 이름 입니다.

오류가 나는 원인은 argv[1] 이 null 값이기 때문입니다.

amblance의 이미지

실제로 말씀하신 부분에 exit(1)을 넣어보니 정상작동 하는군요.
감사합니다.

=================================================================
B(Birth) C(Choice) D(Death)
인생은 주어지는 것이 아니고 선택하는 대로 되는 것이다.

B(Birth) C(Choice) D(Death)
인생은 주어지는 것이 아니고 선택하는 대로 되는 것이다.