전체 글
-
C/C++ remove(3)C,C++ & Linux 2020. 5. 18. 16:49
remove 함수 기능 파일을 삭제하는 함수입니다. 대상 파일이 일반 파일인 경우 unlink() 와 동일하게 동작하고 디렉토리인 경우 rmdir() 과 동일하게 동작합니다. 함수 원형 #include int remove(const char *filepath); 매개변수 filepath 삭제할 파일의 경로 반환값 성공 시 0 리턴 에러 시 -1 리턴하고 errno 설정 예제 #include #include #include #include #include #include int main(int argc, char *argv[]) { // argv[1] 의 링크파일 argv[2] 생성 if (link(argv[1], argv[2]) < 0) { fprintf(stderr, "link error\n"); ex..
-
C/C++ link(2) unlink(2)C,C++ & Linux 2020. 5. 18. 16:31
link 함수 기능 지정한 파일의 링크파일을 만들어주는 함수입니다. Linux/Unix 는 파일마다 연결계수를 유지합니다. link() 함수는 파일의 하드링크 파일을 만들어주기에 해당 inode 의 연결계수가 + 1 됩니다. unlink() 함수는 반대로 해당 inode 의 연결계수를 -1 합니다. 주의할 점은 unlink() 함수는 단순히 삭제 함수가 아니라는 것입니다. 원본 파일 하드링크 파일 하나 생성 원본파일 Unlink() 원본파일이 삭제되었지만 메모리의 연결계수는 여전히 0이 아니므로 메모리가 할당 해제되지 않습니다. 모든 하드링크 파일 Unlink() unlink() 함수는 해당 파일을 삭제하고 연결계수를 -1 시키는 함수로 메모리를 삭제하지는 않습니다. 모든 파일 및 하드링크 파일이 unl..
-
하드링크, 심볼릭링크C,C++ & Linux 2020. 5. 18. 15:12
하드링크 : 원본 파일과 동일한 inode 를 가지는 파일 즉 하드링크파일은 원본파일에 새로운 이름을 붙인 것이라고 생각하면 된다. 비유를 하자면 저는 한국이름 "이동규"와 미국이름 "KyooDong"을 갖고 있습니다. 이때 누가 와서 "이동규"를 때렸고, "이동규"가 다쳤습니다. 그럼 "KyooDong"이 다쳤다고 말할 수 있나요? 말할 수 있죠? 심지어 진짜 다친거에요 하드링크 파일은 같은 파일을 가리키는 다른 이름의 파일이에요 그래서 원본 파일을 수정하면 하드링크 파일도 수정되는 효과를 보게 됩니다. 원본 파일을 지우는 것은 그냥 이름을 지운것이에요 (나 "이동규" 이름 안쓸래! 와 같습니다) inode 는 파일마다 부여된 unique 한 id 에요 그래서 서로 다른 이름의 파일이더라도 inode ..
-
C/C++ truncate(2) ftruncate(2)C,C++ & Linux 2020. 5. 18. 14:37
truncate 함수 기능 파일의 크기를 조정하는 함수입니다. 함수 원형 #include #include int truncate(const char *filepath, off_t length); int ftruncate(int fd, off_t length); 매개변수 filepath 대상 파일의 경로 fd 대상 파일의 파일 디스크립터 length 대상 파일의 새 파일 크기 (바이트 단위) 반환값 성공 시 0 리턴 에러 시 -1 리턴하고 errno 설정 예제 #include #include #include #include #include #include int main(int argc, char *argv[]) { char *fname = "ssu_test.txt"; int fd; char buf[102..
-
C/C++ chown(2) fchown(2) lchown(2)C,C++ & Linux 2020. 5. 18. 14:19
chown 함수 기능 파일의 소유자를 변경하는 함수입니다. 파일에 대한 적절한 권한이 있는 프로세스만이 위 함수를 호출 할 수 있습니다. chown 과 fchown 은 심볼릭 링크 파일에 적용하면 링크 파일이 가리키는 파일에 대한 소유자를 변경합니다. 심볼릭 링크 파일 자체의 소유자를 변경하고 싶다면 lchown() 을 사용해야 합니다. 함수 원형 #include #include int chown(const char *filepath, uid_t owner, gid_t group); int fchown(int fd, uid_t owner, gid_t group); int lchown(const char *filepath, uid_t owner, gid_t group); 매개변수 filepath 소유자를 ..
-
C/C++ chmod(2), fchmod(2)C,C++ & Linux 2020. 5. 17. 21:22
chmod 함수 기능 파일의 접근 권한을 변경하는 함수입니다. 함수 원형 #include #include int chmod(const char *filepath, mode_t mode); int fchmod(int fd, mode_t mode); 매개변수 filepath 대상 파일의 경로 fd 대상 파일의 파일 디스크립터 mode 파일의 권한 테스트 매크로 8진수 내용 S_ISUID 0004000 set-user-id S_ISGID 0002000 set-group-id S_ISVTX 0001000 sticky bit S_IRWXU 0000700 소유자 권한 마스크 S_IRUSR 0000400 소유자 읽기 권한 S_IWUSR 0000200 소유자 쓰기 권한 S_IXUSR 0000100 소유자 실행 권한 S..
-
C/C++ umask(2)C,C++ & Linux 2020. 5. 17. 20:24
umask(2) 함수 기능 파일 생성 시 기본 권한을 제한하는 마스크를 일시적으로 변경합니다. 변경된 마스크 값은 프로세스가 종료되면 원래대로 돌아갑니다. 운영체제마다 기본적으로 설정된 umask 값이 있습니다. 만약 제 pc의 umask 값이 0123 이라고 한다면 (맨 앞의 0은 8진수를 의미합니다.) 파일 생성 시 0777 - 0123 = 0654 0654 의 권한을 가진 파일이 만들어집니다. 함수 원형 #include #include mode_t umask(mode_t mode); 매개변수 mode 원하는 umask 값 테스트 매크로 8진수 내용 S_IRWXU 0000700 소유자 권한 마스크 S_IRUSR 0000400 소유자 읽기 권한 S_IWUSR 0000200 소유자 쓰기 권한 S_IXUS..
-
C/C++ access(2)C,C++ & Linux 2020. 5. 17. 19:55
access(2) 함수 기능 프로세스가 지정한 파일에 대해 접근 가능한지 확인해주는 함수 프로세스가 접근 가능 여부는 유효 사용자 아이디와 유효 사용자 그룹 아이디에 의해 결정됩니다. 함수 원형 #include int access(const char *filepath, int mode); 매개변수 filepath 권한을 확인하고자 하는 파일의 경로 mode 어떤 권한을 확인하고 싶은지 명시하는 모드 모드 설명 F_OK 파일의 존재 유무 R_OK 읽기 권한 판정 W_OK 쓰기 권한 판정 X_OK 실행 권한 판정 반환값 성공 시 0 리턴 (권한이 있으면 0 리턴) 에러 시 -1 리턴하고 errno 설정 예제 #include #include #include int main(int argc, char *argv..