시스템 프로그래밍 관련해서 질문 좀 할게요..

PineTree514의 이미지

int main(void)
{
        int fd;
        struct namecard card;
        char buf[MAXLEN];
        int i;
 
        fd = open("mynamecard", O_RDONLY, 0644);
        if (fd == -1)
        {
                printf("Error: cannot open\n");
                exit(1);
        }
 
        do 
        {
             printf("\n");
             printf("Enter i: ");
             gets(buf);
             i = atoi(buf);
             lseek(fd, i*sizeof(struct namecard), SEEK_SET);
             read(fd, &card, sizeof(struct namecard));
             printf("Name: %s\n", card.name);
             printf("phone number: %s\n", card.phone);
 
             printf("Continue (y/n)? ");
             gets(buf);
        } while (!strcmp(buf,"y") || !strcmp(buf,"Y"));
 
        close(fd);
}


i값을 입력 받아서 저장된 명함의 수보다 크면 다시 입력 받도록

수정을 해야 되는데 머리를 싸매고 해도 제 실력으론 부족하네요.

힌트라도 주시면 감사하겠습니다. 꾸벅

taesaza0의 이미지

여러가지 방법이 있을수 있겠네요

파일에 struct namecard만 존재 하는 것이 아닌
첫 4바이트는 갯수를 저장 할 수도 있고

파일의 형식을 바꾸지 않는다면
파일의 사이즈를 읽어와 갯수를 추측해낼수도 있겟네요

PineTree514의 이미지

답변 감사합니다

변명은 하지 않겠습니다.