리눅스 간단한 프로그램 관련해서 질문있습니다

wkfdlek의 이미지

안녕하세요 컴공과 재학중인 학생인데
과제중인데 내용은 그나마 잘 한거 같은데 처음에 막혀서
일단 제가 만든 과제중인 프로그램이 좀 난잡해서 다른 비슷한 코드로 먼저 보여드릴게요

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include "student.h"
/* 학생 정보를 입력받아 데이터베이스 파일에 저장한다. */
int main(int argc, char *argv[])
{
        int fd;
        struct student record;
 
        if (argc < 2) {
        fprintf(stderr, "사용법 : %s file\n", argv[0]);
        exit(1);
        }
        if ((fd = open(argv[1], O_WRONLY|O_CREAT|O_EXCL, 0640)) == -1) {
        perror(argv[1]);
        exit(2);
        }
 
        printf("%-9s %-8s %-4s %-9s", "학번", "이름", "점수", "연락처");
        while (scanf("%d %s %d %s", &record.id, record.name, &record.score, record.hp) == 4) {
        lseek(fd, (record.id - START_ID) * sizeof(record), SEEK_SET);
        write(fd, (char *) &record, sizeof(record));
    }
    close(fd);
        exit(0);
}

요건데
if (argc < 2) {
fprintf(stderr, "사용법 : %s file\n", argv[0]);
exit(1);
}
if ((fd = open(argv[1], O_WRONLY|O_CREAT|O_EXCL, 0640)) == -1) {
perror(argv[1]);
exit(2);
}

이 부분에서 뜬금없이 오류나서(밑에는 컴파일해서 나온 내용)
[
사용법 : ./파일명 file
bad address
]

인식을 못하는건지....
그리고 open함수 부분을 (fd =open(argv[1],O_RDWR)) == -1 로 쓸 예정인데
이 부분 오류 있을까요?

세벌의 이미지