전체 글 (141) 썸네일형 리스트형 [시스템 소프트웨어] File Sharing (file offset) File Sharing int fd1 = open("a.txt", O_RDONLY);int fd2 = open("a.txt", O_RDONLY); 위 코드처럼 하나의 파일을 두 번 연속 열게 되면 file offset은 어떻게 될까? 파일을 열게 되면 디스크(저장장치)에서 파일의 메타데이터를 불러와서 V-node Table에서 관리한다고 했었다. 다시 한번 열게 되더라도 메모리 상에는 이미 파일의 메타데이터가 올라와있기 때문에 그 데이터를 그대로 사용한다.따라서 V-node Table에 파일의 메타데이터는 한 번만 올라오게 된다. 이후 Open File Entry가 생성되는데 이것은 파일을 열 때마다 생성되기 때문에 파일을 두 번 열었을 경우 Open File Entry는 두 개 생성된다. 이 두 개의 .. [C++] 상속 (Inheritance), protected 상속 (inheritance) C++은 상속을 명시할 때 별도의 키워드가 존재하지 않는다. 키워드 대신 상속 지정자를 사용하여 어떤 클래스를 상속받는지 명시해 주면 된다. 상속과 관련된 내용은 앞서 포스팅한적이 있기 때문에 이번에는 사용방법만 설명하겠다. 상속 관련 내용https://enchupin.tistory.com/127 class TestClass {public: int age; string name;};class Student : TestClass {private: int std_num;}; 위 코드에서처럼 : 다음에 소멸자는 자식클래스의 소멸자가 먼저 호출되고 그다음에 부모클래스의 소멸자가 호출된다. Java와 마찬가지로 다단계 상속도 가능하며 오버라이딩도 같은 원리로 가능하다. 오버라이딩 .. [시스템 소프트웨어] 메타 데이터, inode, 파일 디스크립터 메타 데이터 (Meta Data) 메타 데이터는 다른 데이터를 설명하고 분류하는데 도움을 주는 데이터를 의미한다. 문서 파일의 경우에는 제목, 작성자, 생성 날짜, 수정 날짜, 파일 크기 등의 정보를 포함한다고 할 수 있고음악 파일의 경우 아티스트 이름, 앨범 이름, 녹음 연도, 장르 등의 정보를 포함한다고 할 수 있다. stat 구조체에서는 다음과 같은 메타데이터가 포함되어 있다. #include struct stat { dev_t st_dev; // 파일이 위치한 장치의 ID ino_t st_ino; // 파일의 아이노드 번호 mode_t st_mode; // 파일의 타입과 권한 nlink_t st_nlink; // 하드 링크 수 .. [C++] 템플릿 매개변수, 비타입 템플릿 매개변수 (NonType Template Parameter) 템플릿 매개변수 템플릿을 사용할 때 template 와 같이 사용한다고 했었다. 이때 typename T 와 같이 정의되지 않은 자료형을 사용하기 위한 변수를 타입 매개변수 라고 한다. 비타입 템플릿 매개변수 타입 매개변수 자리에 그냥 변수가 올 수도 있는데 이것을 비타입 템플릿 매개변수라고 한다. 사용하는 방법은 템플릿 매개변수와 동일하다. 따라서 아래 코드처럼 사용할 수 있다. #include template class TestClass {private: int arr[SIZE];};int main(){ TestClass test1; return 0;} 템플릿 매개변수 활용 비타입 템플릿 매개변수와 타입 매개변수를 함께 사용하는 것도 가능하다. 이를 활용하여 아래 코드처럼 어떤 .. [C++] 템플릿 (Template), 함수 템플릿, 클래스 템플릿, 템플릿 특수화 템플릿 (Template) 템플릿은 말 그대로 특정 기능을 구현하기 위한 코드의 틀을 만들어주는 것이다. 즉 일반화된 코드를 작성하여 함수나 클래스에서 다양한 데이터 타입에 대해 재사용할 수 있게 해 준다. 함수를 대상으로 하는 템플릿 함수 템플릿을 사용하여 함수의 구조는 미리 정의하지만 자료형은 정해지지 않은 상태로 두는 것이 가능하다. 예를 들어 아래 코드처럼 작성하였다고 하자. template T Add(T num1, T num2) { return num1 + num2;} 위와 같이 작성하면 자료형은 정의하지 않았지만 어떤 자료형이 오더라도 덧셈 연산을 처리할 수 있다. 위 코드에서 만든 템플릿 함수는 아래 코드처럼 사용이 가능하다. cout (5.5, 2) (1.2, 3.4) 템플릿.. [C++] std::array (array container) 배열을 선언하는 방법 C++에서 배열을 선언할 때 C 스타일 배열을 사용하는 방법과 C++ 표준 라이브러리의 std::array를 사용하는 방법이 있다. C 스타일로 배열을 선언하는 방법은 아래 코드와 같다. int arr[10];int[] arr = new arr[10]; C++ 표준 라이브러리를 사용하여 배열을 선언하는 방법은 아래 코드와 같다. #include std::array arr; 이때 std::array는 array 헤더파일에 정의되어 있기 때문에 #include 를 꼭 해줘야 한다. 초기화하는 방법은 C 스타일 배열과 동일하다. 다차원 배열 선언 std::array를 사용한 2차원 배열의 경우 아래 코드와 같이 선언이 가능하다. array, 10> arr = {0}; .. [Java] 추상 클래스, 추상 메서드 (abstract) 추상 클래스 (abstract class) abstract 키워드를 사용하여 클래스를 선언하면 해당 클래스로는 객체를 생성하는 것이 불가능하다. abstract을 통해서 해당 단계에서 구현할 내용이 없을 때 구현 없이 클래스의 구조만을 선언하는 것이 가능하다. 추상 클래스는 해당 클래스가 아직 미완성이거나 상속을 위해서 빈 클래스가 필요할 때 사용된다. abstract class Shape { // 빈 추상 클래스} 추상 메서드 (abstract method) 추상 메서드는 추상 클래스안에 선언할 수 있는 메서드로 정의가 없고 선언만 되어 있다. 추상 메서드를 포함한 클래스는 하위 클래스에서 반드시 이 추상 메서드를 오버라이딩(정의)해주어야 한다. abstract class Animal.. [Java] super, super 생성자 super super 키워드를 사용하면 SubClass(자식클래스)에서 SuperClass(부모클래스)의 멤버 및 메서드에 접근할 수 있다. 상속을 받았으니 당연히 super 키워드 없이도 사용이 가능하지만 this 키워드처럼 활용할 수 있다. 따라서 아래 코드처럼 부모클래스의 멤버에 접근하는 것이 가능하다. class A { int a;}class B extends A { int a, b; B (int a, int b) { this.a = a + super.a; this.b = b; }} SuperClass 생성자 SubClass 객체를 생성하면 SuperClass의 생성자가 먼저 호출되고 SubClass의 생성자가 호출된다. 이는 아래의 코드를 통해서 확인할 .. 이전 1 2 3 4 5 6 ··· 18 다음