'C'에 해당되는 글 27건

  1. 2009.05.25 이진트리를 만들고나서....아 망했어요... (2)
  2. 2009.04.26 리눅스용 한글2008 체험판 크랙하기 (26)
  3. 2008.06.01 플로피 디스크 이미지를 만들어서 mount하자! (5)
  4. 2008.03.11 ctags 설정 (4)
  5. 2008.02.28 gethostbyname 의 세그멘테이션 오류 (2)

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

아 삽질...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

How to



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

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

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

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

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

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

죄송합니다;;
Trackback 0 Comment 26

플로피 디스크 이미지를 만들어서 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가 잘못?
Trackback 0 Comment 5

ctags 설정



<어라 새로운 플긴이네요...... 몰랐네....... 이거함 적용 ㅋ>
리눅스 커널 프로그래밍(IT EXPERT)(CD1장포함) 상세보기
한동훈 지음 | 한빛미디어 펴냄
리눅스 실무서. 이 책은 리눅스 커널 프로그래밍 환경 구축부터 커널 컴파일 개발법, 리눅스 시스템 호출과 모듈 프로그래밍 방법, 문자 디바이스 프로그래밍과 블록 디바이스 프로그래밍, 메모리 관리와 프로세스 관리 등의 내용을 담았다. 부록 CD에는 본문에서 사용한 예제소스와 커널 2.4.32 소스와 커널 2.26.14.6 소스, 데비안 리눅스 최소 설치 버전, VMWare 이미지 및 플레이어가 수록됐다.


리눅스 커널 프로그래밍이란 책을 보고 있습니다

커널책중에 이게 젤 만만해 보이더군요 ( 쉽다는 말이 아니라 그중에서............)

뭐 암튼.;; 근데 앞부분에 ctags를 설정하는 부분이 있길래(csope,tlist는 사용하지만 이건 처음) 122 page..........

따라서 해봤는데 제대로 안되네여..

일단 커널소스있는데서

ctags -R

을 한뒤에 검색...

일단 tags 가 있는데서
vim -t task_struct

하면 잘되는데 그안(vim)에서

:ta mm_struct 하면 안되는겨 -_- 그래서 구글도 찾아보고 하니까 답이 나오네...

~/.vimrc에다가

set tags=./tags,tag파일이있는작업디렉토리/tags,.............. "여기 set tags를 아예 안적으면 ctags가 제대로 작동 X

라는 식으로 tags파일을 "절대경로" 로 정해줘야 하네요.. 직접 저 태그파일의 경로를 말이에요..

그러니까 control + ] 도 잘 동작하네요 ㅋ

<대충 요약> 자세한건 :help tags (이겟죠뭐)
control + ] => 현제 커서위치에 해당하는 자료구조로 이동
control + t => 좀전의 위치로 이동
:ta XXX     => tag파일에서 XXX 검색
:ta /XXX    => tag파일에서 XXX 포함하는것도 검색
:tj XXX     => 2개이상이면 ls처럼 list 출력
:tn,:tp      => (tag)next,prev
tags        => History list

아나 설정파일 같은거 할때 책에 이런거좀 적어주지 칫.,. 데뱡이나 펫호라아님 무시하는 건가효??

우리 아치는 머셈??

내가 만드는 호좁한 기껏해야 천줄안팍인 프로그램은 이딴거 별 필요 없었는데....... 확실히 커널크기가 크니까

이런것도 필요한듯하네요

음......글구 스터디할분이랑 같이 수요일날부터 하기로 했는데 같이할님이랑 못만나겠네요......

일단 혼자서라도 해야...............

.......................학과 공부 대충하고 이거 해도 되려나........

덧> tags파일이 자주 수정된다면 걍 crontab에 등록시켜 버려도 될거 같다 알아서 갱신하게 ㅋ

학교땜에 바빠서 제대로 건들일수가 없네여 ㅜㅜ

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

리눅스와 윈도우의 fat 파일쓰기 차이???  (8) 2008.06.27
확실히 다르잖아!!  (4) 2008.04.15
ctags 설정  (4) 2008.03.11
본체 전원키로 시스템 off 시키기  (4) 2007.04.22
운영체제 없이 화면에 A를 찍어보아요...  (6) 2007.04.06
KernelProgramming-printk  (5) 2006.07.24
Trackback 0 Comment 4

gethostbyname 의 세그멘테이션 오류

이것도 제목이 풰이크가 되네요 적어 놓고 보니 -_-;............

몇달전에 만든 소켓라이브러리

(라고 해봤자 전 프로그램에 썻던 소스코드 모음.. 지금은 bind,connect등 함수 순서조차도 기억이 안남..)

를 써서 GET 으로 인터넷 웹페이지를 긁어오는 짓을하고 있었는데요...

자꾸 gethostbyname 함수 에서 세그먼트에러가 나는 바람에 왜그런가 했는데..

(gdb가 여기서 난다고 했다! 난 이녀석을 철석같이 믿었것만! )

그래서 여기만 뚫어져라 쳐다보고 있었는데 라이브러리에서 오류 먹은걸 나보고 어쩔???

하다가 중간에 에러메세지를 자세히!(전 까진 대충,..) 보니까 malloc어쩌구~ 라고 나오길래..

(gethostbuname 함수내부 에서) 이걸 동기로 해서...

분명히 그럼 네 소스어딘가오류가 있겠지하고서 뒤저보니까..................

원인을 찾았다... !!!

"서버에 보내는 정보가 잘못되서" 였다 "Cokie:" 이렇게 한번만 해야할걸 "Cookie: Cookie: " ... 이런식으로 보내서..

그럼 오류가 날려면 send함수에서 나야지 왜 여기서 나는지 도저히 이해할수가 없다....

gethostbyname은 그냥 DNS주소를 IP주소로 변환해주는 기능밖에 하지 않는데...

가 아니라..................;

이건또 뭥미?? 중간에 malloc size를 잘못 정해주어서 였네요..

할당할 메모리 크기를 리턴해주는 함수가 있었는데.. 거기서 크기를 잘못 리턴해 주는 바람에

(필요한 크기보다 더 작게 할당해서 쓰는범위가 할당한범위를 넘겨버렸어요.......; )

전혀~ 상관 없는 gethostbyname 함수가 세그먼트 오류를 먹으면서 뻣어버린것.........

제대로 free,malloc을 못하면 세그먼트 오류가 난다고 하는데.. 실제로 이런거 겪어보긴 처음이라...

(free도 아니고 malloc이...free는 많이 격어 봐서 적응이 되지만..)

소켓을 건들땐 valgrind가 느려서 안썻더니만.. 이런 문제가 발생하네요...

(에뮬레이팅을 하다보니 소켓같은건 좀 느린가 보다......)

소켓같은 데서도 valgrind를 사용할수 있었으면 좋겠네여........

 뭐 제가 방법을 모르는거 겠지만요.... 누구 아는 분 댓글점...
Trackback 0 Comment 2
prev 1 2 3 4 5 6 next