출처 : http://test.abiyo.net/objective-c-%EA%B0%9D%EC%B2%B4%EC%9D%98-%EC%83%9D%EC%84%B1%EA%B3%BC-%ED%8C%8C%EA%B4%B4

 

객체의 생성은 최상위 클래스가 제공하는 alloc메소드에 의해 이루어 지며, 초기화는 init메서드가 담당한다. 일반적으로 alloc으로 재정의 될 필요가 없으나, 초기화를 담당하는 init는 필요에 따라 재정의 될 필요가 있다. 단 개체를 생성하기 위해서 alloc과 init를 모두 사용해야 하는것은 아니다. alloc이 할당된 공간을 0으로 채워주기 때문에 이 공간에 속해있는 멤버변수들의 값을 다른 값으로 바꾸어야 하는 경우가 아니라면 init가 반드시 필요한것은 아니다. 하지만 alloc과 init를 모두 사용하는것이 관례라 할 수 있겠다. 초기화를 init가 아닌 다른 메서드를 이용하여 할수도 있다. 이런 경우에는 alloc와 그 다른 메서드를 호출해야 하겠지. 객체가 더 이상 필요하지 않으면, GNU Object-C의 Object의 경우, free메서드를 사용해서 없애 버릴 수 있다.

/* test.m */
#include <objc/Object.h>
 
@interface Test: Object
{
        int a;
        int b;
}
- (id) init;
- (id) initWith: (int)x with: (int)y;
- (void) print;
@end
 
@implementation Test
- init
{
        [super init];
        a = 0;
        b = 0;
        return self;
}
- (id) initWith: (int)x with: (int)y
{
        [super init];
        a = x;
        b = y;
        return self;
}
- (void) print
{
        printf ("a=%d, b=%d\n", a, b);
}
@end
 
int main ()
{
        Test* x, * y, * z;
 
        z = [Test alloc];
        y = [[Test alloc] init];
        x = [[Test alloc] initWith: 50 with: 60];
 
        [z print];
        [y print];
        [x print];
 
        [x free];
        [y free];
        [z free];
 
        return 0;
}

이 프로그램을 실행하면 다음과 같다.

[bacon@abiyo test]$ gcc -o test test.m -lobjc
[bacon@abiyo test]$ ./test
a=0, b=0
a=10, b=20
a=50, b=60
[bacon@abiyo test]

객체의 생성과는 달리 파괴의 경우는 좀 더 복잡한 양상을 보이는 경우가 많다. 예를 들어, Mac OS X의 NSObject는 Reference Counting을 할수 있는 메서드를 지원하는데, 이런 기능을 사용하려면 이와는 다른 접근방법을 사용해야 한다. 많이 다르지는 않더라도 말이다.

C++의 관점에서 보자면, alloc은 new연산자가 하는 역할을, init는 constructor의 역할을 수행하고 있다고 할수 있다. 다음점이 있다면 C++에서 new를 사용하여 객체를 생성할경우 constructor가 자동으로 호출되지만, Objective-C에서는 alloc과 init를 모두 직접 호출해 주어야 한다는 것이다. 그렇다면 free는 C++의 delete연산자 정도 된다고 보면 되겠다. 여기서도 다른점을 찾는다면 C++에는 destructor라는게 있어서 파괴시에 호출이 되지만 Objective-C에는 그런게 없다는것이다. C++의 destructor같은게 필요하다면 단순히 free를 재정의 하면 되겠다.

- (void)free
{
/* 객체를 파괴할때 뭔가 같이 없애고 싶은게 있으면 여기서 하면 된다.
* 되도록 super에 free메시지를 보내기 전에 해라. */

[super free];
}

 

http://rasskang.tistory.com/104

 

혹시 모르는 캡쳐 ㅠㅠ

 

출처 : http://visu4l.tistory.com/343

 

가끔 가다가 잘 접속되던 서버가 아래와 같은 메세지를 띄우는 경우가 있다.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
-생략-
Please contact your system administrator.
Add correct host key in /home/warren/.ssh/known_hosts to get rid of this message.
Offending key in /home/warren/.ssh/known_hosts:1
RSA host key for -생략(ip)- has changed and you have requested strict checking.
Host key verification failed.

참... 당황 스럽다...
욱긴건 다른 컴퓨터에서는 될때다...이러면 더 아리까리 해진다.

일단 해결법은 이렇다.

ssh-keygen -R [ IP or DomainName]


ex) ssh-keygen -R 110.110.110.110


그후에 다시 접속하면 이번엔 메시지가 바뀐다.
Are you sure you want to continue connecting (yes/no)?
대략 이런 메시지를 띄운다. 그럼 그냥 yes 하면 끝이다.


위에 상황을 예를 들면...
A host 가 있고 B server가 있다.
A는 항상 B 서버에 ssh접속하고 있었는데 B서버에 ssh나 os를 새로 설치 하는 작업을 했다.
그런후에 A는 똑같이 B에 접속을 한다. 이때 B에 IP는 똑같다면...
위와 같은 메시지가 뜬다!!

이렇게 되는 이유는 단순하다.
ssh 최초접속시에 A와 B에서 서로간에 인증 과정을 하는데.. B는 새로 설치되었으니 B는 상관없지만..
A는 예전B에 IP로 인증이 되어있는 상태에서 B로 로그인을 하면
로그인시에 예전에 IP로 인증했던 정보를 가지고 B로 로그인을 하려고 하지만 B는 인증정보가 없기때문에
위와 같은 현상이 나타난다.


만약 위에 명령어가 먹히지 않는다... 아직도 똑같다...
그러면 find / -name known_hosts 을 통해 해당파일을 찾아 지우면 된다.
보통 /root/.ssh/known_hosts 에 있다.
나니면 /home/username/.ssh/known_hosts

자신의 root면 root에 있는 것을 지워야 되고 일반 유저 이면 /home/username에 있는 걸 지워야겠죠?

'리눅스 서버에 대해서 > 리눅스 팁들' 카테고리의 다른 글

메모리 관리  (0) 2013.02.17
ptmalloc2 에 대한....  (0) 2013.02.17
[C언어] malloc, calloc, realloc를 이용한 유동 메모리 할당  (0) 2013.01.23
VIM 단축키  (0) 2013.01.21
vi 기본설정  (0) 2013.01.10

리눅스에선 tar 에 z 옵션을 추가하면 tar(묶기)와 gzip(압축)을 한번에 할 수가
있는데 솔라리스에선 안됩니다.
| (파이프)를 통해서 하는 방법을 소개해 드려요.

1. 압축 
  tar cvf - 압축할디렉토리 | gzip -c > aa.tar.gz

2. 해제
 gzip -dc aa.tar.gz | tar xvf -



출처 : http://dev4u.tistory.com/entry/%EC%86%94%EB%9D%BC%EB%A6%AC%EC%8A%A4-tar%EC%99%80-gzip%EB%A5%BC-%ED%95%9C%EB%B2%88%EC%97%90-%ED%95%98%EA%B8%B0


malloc와 calloc의 함수 원형은 다음과 같다.


void *malloc(size_t size);
void *calloc(size_t num, size_t size);


malloc는 할당할 메모리 크기를 바이트 단위로 전달받고, 할당된 공간의 값들은 바꾸지 않는다.
calloc는 메모리 크기를 두 값으로 나누어 전달받으며, 할당된 공간의 값을 모두 0으로 바꾼다.
그래서 배열을 할당하고 모두 0으로 초기화해야 할 때는 calloc를 쓰면 편하다.

아래 세 문장은 int형 변수를 배열처럼 5개씩 할당하는 예이다.

n = (int *)malloc( 5*sizeof(int) );
n = (int *)calloc( 5, sizeof(int) );
n = (int *)calloc( 1, 5*sizeof(int) );

여기서 'sizeof(int)'는 int형 변수가 차지하는 메모리 크기를 바이트 단위를 반환해 준다.
메모리 공간을 할당하는 점은 세 문장이 모두 같고, calloc가 할당된 공간의 값들을 0으로 채운다는 점이 다르다.
둘째, 셋째 문장은 수행 결과가 똑같다.



이미 할당한 공간의 크기를 바꿀 때에는 realloc를 쓴다.

void *realloc(void *memblock, size_t size);


realloc는 재할당한 뒤에 새로 할당된 메모리 주소를 반환한다.
기존에 있던 배열의 자료는 그대로 유지하면서 배열 길이를 늘릴 수 있다.

다음은 malloc로 배열크기를 5으로 할당하여 숫자를 채우고, realloc로 배열 크기를 10로 늘려서 숫자를 추가하는 예제이다.

#include <stdio.h>
#include <stdlib.h>

void main()
{
int *ar, size, i;

size = 5;
ar = (int *)malloc(size*sizeof(int)); // 메모리 할당
for(i=0; i<size; ++i) ar[i]=i;
for(i=0; i<size; ++i) printf("%d",ar[i]);
printf("\n");

size = 10;
ar = (int *)realloc(ar, size*sizeof(int));
for(i=5; i<size; ++i) ar[i]=i;
for(i=0; i<size; ++i) printf("%d",i);
printf("\n");

free(ar); // 할당한 메모리 해제
}



이 예제를 실행시키면 이렇게 출력된다.

01234
0123456789

'리눅스 서버에 대해서 > 리눅스 팁들' 카테고리의 다른 글

ptmalloc2 에 대한....  (0) 2013.02.17
ssh 원격 접속 에러(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)  (0) 2013.02.04
VIM 단축키  (0) 2013.01.21
vi 기본설정  (0) 2013.01.10
putty 설정  (0) 2013.01.10

+ Recent posts