'Programming/C'에 해당되는 글 22건

  1. 2009.05.25 이진트리를 만들고나서....아 망했어요... 2
  2. 2009.04.26 리눅스용 한글2008 체험판 크랙하기 26
  3. 2009.04.02 이거 왜이래~! 6
  4. 2008.06.01 플로피 디스크 이미지를 만들어서 mount하자! 5
  5. 2008.02.02 좋은 프로그래밍 습관이란 책을 읽고.

이진트리를 만들고나서....아 망했어요...

아 삽질...

어짜피 대부분 날짜순으로 게시판에 글이 올라오기때문에 해당 에피소드 순서도 거의 동일

(대부분의 에피소드가 업로드되는 순서는 ep1->ep2->ep3 (에피소드숫자를 기준으로 적으면 left 많으면 right 로한.. ))

구태여 이진트리로 작성할필요는 없었는데 ㅜㅜ

그러니깐 시간순이니 이진트리로 해봣자 거의 사향트리처럼 한곳으로 쭉. 나오는...(left left left ...........)

뭐야 결국엔 리스트랑 거의 똑같은 모습이 되어버렸잖아 ㅜㅜ.. 뭐야 원래 리스트로된거 트리로 바꿀려고 이짓을 했단말야.;

삽질이란 삽질은 엄청하고 이게뭐임

아 딱하나 얻은거 있다면 포인터 개삽질해가면서 다차원 포인터에대한 개념을 한번더 잡은정도??

(아직은 약간 개념이 흔들리는 상태이지만, 시간이 지나면 머리속에서 어느정도 정리가 되겠지? *,& 놀이 ㅜㅜ.. )

그러니까 실제목적에서 얻은 소득은 별로없고 삽질로인한 "학습효과" 가 있었다는 이런 기쁘고도 슬픈일이 ..

어쨌던.........

아놔 난 왜 이걸 처음에 만들 계획할때 생각못하고

왜 다 쳐만들고 노드위치 찍어보고 나서야 이게 병신짓이었단걸  생각해 낸걸까??

바보바보바바바뱌바바바보보보보보

내 4일(5일?)의 시간을 돌려줘~~~

안그래도 할꺼 마는데 이것저것 사람 우울하게 만드네.......

'Programming > C' 카테고리의 다른 글

아아 또 실수~!  (4) 2009.06.22
주의력 부족  (2) 2009.06.22
리눅스용 한글2008 체험판 크랙하기  (26) 2009.04.26
이거 왜이래~!  (6) 2009.04.02
플로피 디스크 이미지를 만들어서 mount하자!  (5) 2008.06.01

리눅스용 한글2008 체험판 크랙하기



결과..........(귀차나서 걍 전체화면 올림)
사용자 삽입 이미지

일단 그래도 연구용(??) 이고...

어짜피 한글 체험판은 기능이 제한적 이라...

기껏해야 날짜 제한 밖에 없어서(??) 공개해 놨긴한데...

그래도 문제된다고 하면 댓글 남겨주세요..

뒷부분을 더 보여달라는 댓글에 대해서는 더이상 따로 답글을 달아드리지 않겠습니다;;

죄송합니다;;

이거 왜이래~!

이번에 데이터 파일을 좀 만들어 줘야할 일이 있었습니다..

망할 졸작이져 넵..

그 데이터파일이 utf16으로 작성된거네여 그래서 찾다가...

UTF16으로 파일입출력하는 방법을 도저히 찾을수가 없어서,

수동으로 직접조금 손봐주기로 했습니다

일단 처음에 UTF16문서는 FF FE 가 들어간다고 하네여

그래서 뭐 그거야 그냥 해줬구...

어라 근데 newline이 \r\n으로 해주네여?? 이문서는? (utf16이 원래 이럴지도? 잘은 모르겠지만)

암튼 그래서 저두 그대로 때라하기로 했습니다.

네 utf16이니깐 각 문자마다 2byte~~~ 알파벳도 2byte~~~ 한글도 2byte~~

그러니깐 아래처럼 NULL도 적절히 넣어주고~~~

fprintf(fp,"%c%c%c%c",0x0D,0x00,0x0B,0x00);
사용자 삽입 이미지

fprintf(fp,"%c%c%c%c",0x0D,0x00,0x0A,0x00);
사용자 삽입 이미지

윈도우가 좀 병신인듯...

난 그냥 원하는 값을 넣고 싶은데 ㅅㅂ..

윈도우내부에서 fprintf 류 함수들(고수준 입출력) 은 아마 \n 전에 자동으로 \r이 쳐들어가게 만들어 논거 같다

즉 \n 하면 \r\n으로 치환 ㄹ...

(리눅스에선 걍 \n 으로 대동단결!! 인데 윈도우에선 \n은 문서상 다음줄을 가르키고 \r은 커서를 내림)

이거야뭐...

저수준 파일 입출력 쓰라는거냐?? (이것도 과연될까?)

아놔....

내가 몇시간이나 한줄알아?? 앙??

swprintf같이 유니코드 함수들도 써보고 아무리 해도 안되길래 (파싱이 안되길래)

hexeditor열어서 확인해보니 저 ㅈㄹ,,

어 이거왜이래  하면서 volatile 라는 생전첨 보는 지시자도 써보고.. (컴파일 최적화 방지)

해도 소용이 없자

"그냥 함수가 원래 저 ㅈㄹ인가 ㅜ" 라는 결론에 .,,

이거할바에야 그냥 업라이징이나할걸.


















































원인은 이게 아냐.........!!!!!!!!!!!

fopen(filepath,"w+b");
swprintf(fp,"\r\n");



멍,,,,

리눅스에선 구분안하고 썻을뿐이고!!!

(아시다 시피 유닉스/리눅스는 바이너리,텍스트파일 구별을 안하죠)

나는 그냥 이거 생각도 안하고 같은줄 알았고!!

+b같은 옵션은 허공에 날렸고!!

난 시간만 날렸고 ㅜㅜㅜㅜㅜㅜ

우허허허허허허헝

플로피 디스크 이미지를 만들어서 mount하자!

뭐 찾아보면 이런프로그램 있을거 같지 말입니다..

그것도 아니면 그냥 이미지 자체를 다운 받거나 ㅋ

하지만 그냥 작년에 배운 fat파일 시스템 연습하는겸,

디스켓이미지가 필요한일도 있어서 함 만들어 봤어요 ㅋ
/*
* =====================================================================================
*
* Filename: main.c
*
* Description: 플로피디스크 이미지 만들어주는 프로그램
*
* Version: 1.0
* Created: 2008년 05월 31일 21시 41분 41초
* Revision: none
* Compiler: gcc
*
* Author: first_name last_name (fl), fl@my-company.com
* Company: my-company
*
* =====================================================================================
*/

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

/* define data type */
#define BYTE unsigned char
#define DBYTE unsigned short int
#define DWORD unsigned int /* 음 따지자면 틀린건가? ㅋ */

/* floppy disk spec */
#define FLOPPY_DISK_SIZE 1474560 /* */
#define BASIC_BUFFER_SIZE 1024
#define FLOPPY_INIT_COUNT 1440

/* for dos-table */
#define MSDOS_SIANATURE 0x55,0xAA /* */
#define MSDOS_SIANATURE_LOCAL 0x1fe

/* for fat12 */
#define INT_ETC_VAL 0xF0,0xFF,0xFF /* */

/* floppy disk write */
typedef struct _floppy
{
/* bit write */
unsigned init_jump:8*3;
char ipl_name[8];
DBYTE byte_per_sector;
BYTE sector_per_cluster;
DBYTE reserved_sector_count;
BYTE num_fats;
DBYTE boot_entry_count;
DBYTE total_sector_12;
BYTE media;
DBYTE fat_size12;
DBYTE sector_per_track;
DBYTE number_of_heads;
DWORD hidden_sector;
DWORD total_sector_32;
BYTE drive_number;
BYTE reseved1;
BYTE boot_signature;
DWORD volume_id;
char volume_label[11];
char file_system_type[8];
/* not padding ! */
} __attribute__ ((packed)) Floppy;

void init ( int fd )
{
char buffer[BASIC_BUFFER_SIZE] = {0x00};
int i;

for(i = 0;i < FLOPPY_INIT_COUNT; i ++)
write(fd,buffer,sizeof(buffer));

} /* ----- end of function init ----- */

void write_ipl( int fd )
{
Floppy fda;

memset((void *)&fda,0,sizeof(fda));

fda.init_jump =0x904eeb;
memcpy(&fda.ipl_name,"LowidIPL",8);
fda.byte_per_sector =512;
fda.sector_per_cluster =1;
fda.reserved_sector_count =1;
fda.num_fats =2;
fda.boot_entry_count =224;
fda.total_sector_12 =2880;
fda.media =0xf0;
fda.fat_size12 =9;
fda.sector_per_track =18;
fda.number_of_heads =2;
fda.hidden_sector =0;
fda.total_sector_32 =2880;
fda.drive_number =0x00;
fda.reseved1 =0x00;
fda.boot_signature =0x29;
fda.volume_id =0xffffffff;
memcpy(&fda.volume_label,"LowidFLOPPY",11);
memcpy(&fda.file_system_type,"FAT12 ",8);

lseek(fd,0,SEEK_SET);
write(fd,&fda,sizeof(fda));
} /* ----- end of function write_mdr ----- */

void write_signature ( int fd )
{
char init_byte[3]={INT_ETC_VAL};
char msdos_signature[2]={MSDOS_SIANATURE};

/* for msdos */
lseek(fd,MSDOS_SIANATURE_LOCAL,SEEK_SET);
write(fd,msdos_signature,sizeof(msdos_signature));

/* for fat12 what? 0x200? ,0x1400? */
lseek(fd,0x200,SEEK_SET);
write(fd,init_byte,sizeof(init_byte));
lseek(fd,0x1400,SEEK_SET);
write(fd,init_byte,sizeof(init_byte));
} /* ----- end of function init_000200 ----- */

int main ( int argc, char *argv[] )
{
int fd;

if( argc != 2 ){
fprintf(stderr,"만들 디스크 이미지명을 입력해 주세요\n" \
"Useage : %s create_filename\n",argv[0]);
exit(EXIT_FAILURE);
}

if( ( fd = open(argv[1],O_EXCL | O_CREAT | O_WRONLY,00644)) == -1){
perror("파일 열기 실패");
exit(EXIT_FAILURE);
}

init(fd);
write_ipl(fd);
write_signature(fd);

close(fd);

return EXIT_SUCCESS;
} /* ---------- end of function main ---------- *


별 주석달것도 없습니다..



fat파일 시스템만 안다면 별 문제 없을듯.


이거 자세한 정보는 한빛문화사 홈피에서 fat치면 아마 나올거에요

제가 작년인가 포스팅할때 주소도 적어놨었는데 ㅋㅋ

거기가면 기본값이랑 범위같은게 상세히 공개되어있어요..

그대로 프로그래밍 하면 되니까 정말 어려울것도 없다는..

소스바연.. 값들 넣는거 때문에 그렇지 별 내용은 없는겁니다

이 약간 내용이 있기는 합니다.


구조체에서 bit로 선언하는거 - (ex>unsigned bla:1; ->이건 1bit - one or zero)

bit 선언에서는 int,unsigned 밖에 없지 말입니다....

위에 상황같은데 쓰는거보단 bool형 같은거 쓸때 좋죠..


또 padding 없는 구조체 (물론gcc, 윈도우에선 #progma로 하던가요? )

ex> __attribute__ ((packed)) Name;

다 아시겠지만 구조체를 sizeof하면 원래 크기가 다르죠. 4byte(cpu에 따라 다르겠지만) 마다 할당하니까요

위에 ipl만들때는 바이트수 철저히 따져서 입력해야하기 때문에 저렇게 쓴것이지만요.


사용법 $./filename image_name
마운트법 $mount -o loop image_name
확인 $df -T

그리고 플로피디스크 쓰듯이 쓰면댐



마운트후 디랙토리 만들기 삭제 파일생성.. 잘되네요 ㅋㅋㅋ

리눅스는 디바이스도 파일처럼 다룰수 있어서 편하지 말입니다~
(뭐 지금의 경우는 반대지만)

덧> 요즘에는 시간이 좀 남지 말입니다~ 그래서 학기중에 못했던(중간고사 끝날때부터 딱 저번주 까지 정말 바빳던..ㅋ)
포스팅도 좀 자주(?) 하는데...

다음주부터 또 시험크리때문에 포스팅을 제대로 할수 있을지 의문이에요 ㅜㅜ

추가> qemu -fda 옵션 붙이면 qemu가 죽습니다? 우아아앙~ 왜이래?? boot jump code가 잘못?

좋은 프로그래밍 습관이란 책을 읽고.

뭐 뒷면 책 내용 소개하는것중에 딱 마음에 드는게 하나(아래 printf) 있어서 도서관에서 이책을 빌렸네여..

중간에 이야기 몇몇 적어논것도 볼까 싶어서.....

제대로 볼시간이 없어서 걍 빌렸는데..

수준은...막 C땐 사람들 한테 딱 맞을듯하고요....

C복습한다고 새책 뒤지지말고 걍 이책 읽어보는것도 괜찮을것 같네요...

어지간한 C 주의할점 은 그대로 적어놨으니까.........

(적어도 이블로그를 고정적으로 방문하는 여러분께서는 볼필요가 없으실걸요,, 플밍에 관련되시는분..

현업뛰는 삭후님이나....팬터맨탈 읽으시는 환옹이나... 학교프로젝트 뛰시는 헤즐넛님이나 뭐.. 이책은 껌일듯..)

그래도 이책일고 딱 3개 정도 새로운 사실을 알아낸게 있는데

1 printf("[%s - %s] : %d\n",_FILE_,_FUNCTION__,_LINE_); 을 쓰면 편하다
그럼 [network.c - Get_Socket_Data] : 71 뭐 이런식으로 출력된다.
#define DEBUG_LINE_CHECK 위에저프린트문
요로케 해너으면 편하겠구나 싶었는데.....막상 써먹어볼려니... 당장은 없네...

2 enum 문 초기화방법..
enum문 쓰는건 알았는데 이렇게 초기화 하는 방법은 몰랐다능..(바본가?)
(왜? 제대로 쓴적이 없으니 이것도 많이 쓸 필요가 있어야 쓰지..)
책에 따르면
enum {
    KOREA = 10;
    ENGLAND,
};
뭐 이렇게 하면 KOREA = 10,ENGLAND = 11 이 된다고 합니다..
#define한게 겹칠수 있으니까 이렇게 쓰셈.. 이라고 합니다 책은........
근디.. 내가 open-source 프로그램을 몇개(많은게 아니라..) 뒤져봤었느데 말이에요,
어지간한건 걍 #define하지 (꽤 갯수가 된거 같은데.) 저렇게 enum쓰는건 첨보네요.
좋긴한데 구테여 define하는걸 enum으로 바뀔 필요는 없을듯하네요..
뭐 그냥 새로운걸 새로 알았다고 해야할까..............

3 파일포인터
나에게는 그져 존재감만 있는 그런놈..
실제로 써본적은.. 딱 한번인가 밖에 없네요...
어디에서 쓴건데 기억은 안나지만... 뭐 암튼 복습한다는 치고 읽어본.
prev 1 2 3 4 5 next