C,C++ & Linux
-
C/C++ stat(2), lstat(2), fstat(2)C,C++ & Linux 2020. 5. 17. 00:43
stat 함수 기능 지정한 파일의 정보를 담고 있는 stat 구조체를 얻어주는 시스템 함수입니다. stat(2) 파일을 filepath 로 지정합니다. fstat(2) 파일을 fd 넘버로 지정합니다. lstat(2) 파일을 filepath 로 지정하되 지정된 파일이 심볼릭 링크 파일이면 링크파일 자체에 대한 정보를 얻습니다. stat(2) 함수로 심볼릭 링크 파일을 지정하게되면 링크파일이 가리키는 파일에 대한 정보를 얻습니다. stat구조체 struct stat { dev_t st_dev; // 디바이스 번호 ino_t st_ino; // inode 번호 mode_t st_mode; // 모드 (접근권한) nlink_t st_nlink; // 하드링크 수 uid_t st_uid; // 소유자의 사용자 아..
-
C/C++ sync(2), fsync(2), fdatasync(2)C,C++ & Linux 2020. 5. 16. 23:31
함수 기능 OS에서는 파일 쓰기 작업의 성능을 위해 버퍼 캐시에 담아뒀다가 일정 주기에 한 번에 디스크에 반영합니다. 이 때 버퍼 캐시의 내용을 디스크에 반영하면서 동기화를 맞춰주는 시스템 함수가 sync 계열의 함수입니다. sync(2) 시스템 버퍼 캐시의 내용을 디스크에 쓰고, 비워줍니다. fsync(2) 지정한 파일의 시스템 버퍼 캐시의 내용을 디스크에 쓰고, 비워줍니다. fdatasync(2) 특정 파일의 시스템 버퍼 캐시의 내용을 디스크에 쓰되 파일의 일부에만 영향을 줍니다. 그리고 버퍼 캐시를 비워줍니다. 함수 원형 #include void sync(); int fsync(int fd); int fdatasync(int fd); 매개변수 fd 데이터 동기화를 맞출 파일 디스크립터 반환값 성공 ..
-
C/C++ dup2()C,C++ & Linux 2020. 5. 16. 23:22
dup2(2) 함수 기능 파일 디스크립터를 지정된 파일 디스크립터 번호로 복사합니다. 함수 원형 #include int dup2(int fd, int destFd); 매개변수 fd 복사할 파일 디스크립터 destFd 복사된 파일 디스크립터 번호 반환값 성공 시 destFd 리턴 에러 시 -1 리턴하고 errno 설정 예제 #include #include #include #include // for open #include #include #define BUFFER_SIZE 1024 int main(int argc, char *argv[]) { char *fname = "ssu_test.txt"; int fd; // ssu_test.txt 파일 생성 fd = creat(fname, 0666); printf..
-
C/C++ dup()C,C++ & Linux 2020. 5. 16. 23:11
dup(2) 함수 기능 파일 디스크립터를 복사해줍니다. 함수 원형 #include int dup(int fd); 매개변수 fd 복사할 파일 디스크립터 반환값 성공 시 복사된 파일 디스크립터 빈 파일 디스크립터 중 가장 작은 값이 리턴됩니다. 에러 시 -1 리턴과 errno 설정 예제 #include #include #include #include // for open #include #include #define BUFFER_SIZE 1024 int main(int argc, char *argv[]) { char buf[BUFFER_SIZE]; char *fname = "ssu_test.txt"; int count; int fd1, fd2; // fd1 = ssu_test.txt fd1 = open(fn..
-
C/C++ pread(), pwrite()C,C++ & Linux 2020. 5. 14. 23:37
pread(2), pwrite(2) 함수 기능 read(), wrte() 함수와 lseek() 함수의 결합으로, seek offset 을 이동시킨 뒤 read() or write() 합니다. pread(), pwrite() 함수는 lseek() 과 read() or write() 를 원자적(atomic)으로 처리합니다. 원자적이라 함은 한 번 호출되면 반드시 모든 연산을 마친다는 뜻입니다. 다른 프로세스나 스레드로부터 서로 연산이 분리되지 않는다는 것을 말합니다. lseek() + read() 을 하게 되면 lseek() 이후 프로세스 스케줄링으로 인해 다른 스레드로 컨트롤이 넘어가서 해당 파일의 seek offset 을 훼손시킬 수 있습니다. 그리고 다시 원래 스레드로 돌아와 read() 하게 되면 엉..
-
C/C++ write()C,C++ & Linux 2020. 5. 14. 14:23
write(2) 함수 기능 파일에 write 하는 시스템 함수입니다. 함수 원형 #include #include ssize_t write(int fd, const void *buf, size_t nbytes); 매개변수 fd 대상 파일 디스크립터 buf 쓰고자 하는 데이터가 담긴 버퍼 nbytes 쓰고자 하는 데이터의 길이 ( buf의 길이보다 길어선 안됨 ) 반환값 성공 시 실제로 쓰여진 데이터의 길이 리턴 에러 시 -1 리턴 후 errno 설정 -1 이 아니더라도 자신이 쓰고자 한 데이터의 길이 nbytes 보다 적게 쓰여졌다면 에러라고 볼 수 있습니다. 예제 #include #include #include #include // for open #include #include #define BUFFE..
-
C/C++ close() 함수C,C++ & Linux 2020. 5. 14. 13:24
close(2) 함수 기능 open으로 열었던 파일을 닫아주는 함수입니다. 하나의 프로세스에서 너무 많은 파일을 열게되면 시스템 자원을 낭비하게 되기 때문에 사용하지 않는 파일은 닫아주는 것이 좋습니다. 단 프로세스가 종료되면 파일은 자동으로 닫히기 때문에 프로세스 전반적으로 이용하는 파일의 경우에는 수동으로 닫아주지 않아도 됩니다. 함수 원형 #include int close(int fd); 매개변수 fd 닫고자 하는 파일의 파일 디스크립터 반환값 성공 시 0 리턴 실패 시 -1 리턴 후 errno 설정 예제 #include #include #include #include // for open #include #include int main() { char *filename = "ssu_test.txt..
-
C/C++ read 함수 - 파일을 읽는 함수C,C++ & Linux 2020. 4. 22. 01:28
read(2) 함수 기능 파일을 읽는 함수입니다. 함수 원형 #include ssize_t read(int fd, void *buf, size_t nbytes); 매개변수 int fd 읽을 파일의 파일 디스크립터 void *buf 읽어들인 데이터를 저장할 버퍼(배열) size_t nbytes 읽어들일 데이터의 최대 길이 (buf의 길이보다 길어선 안됨) 반환값 읽어들인 데이터의 길이 무조건 nbytes 가 리턴되는 것은 아님. 중간에 파일의 끝을 만난다면 거기까지만 읽기 때문 예제 #include #include #include #include #include #include #include "ssu_employee.h" int main(int argc, char *argv[]) { struct ssu_..