출처: https://blog.iroot.kr/341 [RootKR]
코드는 이와 같다.
말 그대로 간단한 cp 코드기 때문에 예외처리, 옵션 같은 부분은 많이 생략하고 변수로 들어온 파일 두개를 열고 복사하는 코드이다.
프로그램의 흐름도는 이와 같다고 한다. 원본 프로그램이 궁금하면 위 링크로 들어가서 보면 좋을 듯 하다.
BUFSIZE는 익숙하지만 PERM은 처음 사용해봤는데 open() 함수를 사용할때 세번째 변수를 PERM으로 전해주면 open한 파일들을 닫을때 chmod 해준다. 0644 라는건 -rw-r--r-- 라는 이야기가 된다. 잘못된 정수가 들어갔을때 어떻게 될지는 모르겠다...애초에 잘못된 변수가 들어갈일이 있을까 싶기도 하다.
파일 디스크럽터는 두개, 읽을 파일과 목표할 파일이 필요하다. open함수는 파일이름,모드,(권한) 을 변수로 갖는데, 처음 읽을 파일은 O_RDONLY(읽기)로 가져왔다, 괜히 무슨 일이 생기면 안되니까, fd2 는 OWRONLY(쓰기), O_CREAT(없으면생성), O_TRUNC(있으면 지우고 쓰기)로 가져왔는데 이는 파일을 새로 생성할때 많이 쓰는 옵션이라고 생각했는지 open 대신 아래와 같은 함수를 만들었다.
하지만 creat함수는 언제나 permission이 0644 이고, 모드도 O_WRONLY | O_CREAT | O_TRUNC 이므로 권한이나 모드를 바꾸고 싶다면 open 함수를 사용하면 될 것 같다. 그리고 각각의 경우 오류가 발생했을 때는 perror 를 사용하여 오류 문구를 출력해주게 만들었다.
이제 fd1에서 BUFSIZE 만큼 읽어서 buf에 저장하고, 제대로 저장이 됬다면 fd2에 읽은 크기 만큼 저장해주면 된다.
다 끝났으니 close해주면 함수는 끝이다.
컴파일하고 실행해보면 cp가 잘된걸 볼수 있다.
unix파일구조, inode, 심볼릭링크(소프트링크), 하드링크 (0) | 2020.09.24 |
---|---|
[C] 문자열 배열 초기화 (0) | 2020.03.01 |
[C] 연산자와 결합법칙,우선순위 (0) | 2020.03.01 |
[C]구조체 안에서 정의되지 않은 구조체를 쓰려면? (1) | 2020.02.29 |
[C] 구조체는 어떻게 저장될까? (구조체에서의 패딩) (0) | 2020.02.28 |
댓글 영역