PUTTY 이용하여 원격으로 리눅스 파일 정보 확인하기
- 코드
- 코드 분석
Test.txt를 생성하여 초기 접근 권한을 0755로 설정하였다. 그러나 19행의 제한으로 인해 실제로는 0400이 설정된다.
이후 파일을 닫고 test.txt 파일에 대해서 쓰기 작업(W_OK)을 할 수 있는지 검사한다.
접근 권한을 0644로 변경하고 *소프트 링크를 생성한다.
31행에서 생성된 소프트 링크 파일의 실제 내용을 읽어서 표준 출력한다.
이러한 정보는 구조체 변수 FINFO에 저장한 후 출력한다.
*소프트 링크(심볼릭 링크) : 기호화 된 링크는 절대 경로 또는 상대 경로의 형태로 된 다른 파일이나 디렉터리에 대한 참조를 포함하고 있는 특별한 종류의 파일이다.
이 때, 경고 창 2개가 뜬다.
- format '%d' expects argument or type 'int', but argument 2 has type '__off_t {aka long int}' [-Wformat=]
- format '%d' expects argument of type 'int', but argument 2 has type '__blkcnt_t {aka long int}' [-Wformat=]
그러나 경고를 무시하고 실행해도 출력 할 수 있다.
하지만 경고가 궁굼하다면 경고의 메시지를 검색해보자!
경고 설명 :
%d는 정수형 출력해 주는 형식문자 이지만, strlen()라는 함수의 반환형은 매크로 자료형이다. 따라서 서로 자료형이 맞지 않다는 경고창을 주는 것이라고 나와있다.
해결 :
1) %d → %s로 변경해보겠다. (실패)
전혀…… 경고가 없어지지 않았다.
다시 한번 경고를 확인해보니 int형의 메모리는 4바이트로, long은 8바이트이다. 이 때, int형 자리에 long의 반환형 값이 들어가게 되면 format이 깨진다는 메시지이다.
2) 이를 해결하기 위해서는 %zu 또는 %ld를 통해 casting해주어야 한다. 코드를 경고 창이 뜨는 줄에 %d → $zu로 변경하니, 아래와 같이 경고 창이 없어졌다.
느낀점 : 굳이 큰 메모리를 사용할 필요가 없음에 우리는 간편하고 쉽게 자료형을 변환했다. 그러나 이번 기회를 통해 자료형 변환 과정에 있어서 메모리가 손상될 수 있다는 사실을 알 수 있었다. 메모리를 간과할 수 있는 프로그램은 없다고 생각한다. 다시 한번 메모리에 대해 생각해보게 된 계기가 된 것 같다.