'Programming/C'에 해당되는 글 22건
- 2008.01.24 오늘 할짓 없어서 한 뻘짓. 4
- 2007.07.01 메모리 직접 접근의 유용성 (memcpy) 3
- 2007.06.28 리눅스에서 2기가 이상인 파일에 접근하기 4
- 2007.05.25 Mpd 싱크 가사....... 프로그램 8
- 2007.05.11 간단한 양방향 linkedlist 6
오늘 할짓 없어서 한 뻘짓.
Programming/C 2008. 1. 24. 01:11
Rss에서 신비로 게시판 올라온 자료들 확인할수 있게 conky에 추가!
(실시간 다운을 위해서??)
일단 그냥 따로 실행파일 만들어서 설정파일에서 따로 명령을 실행시키게 만들어놨다
execl인가 뭐 그걸로..
음.....C로 했는데 다해놓고 보니까 그냥 쉘 스크립트로 할수도 있겠구나 싶었다..
(맞다! curl도 있구나!)
wget으로 받은다음 sed같은거 써서 출력하게 해도 됬었을 텐데
괜히 소켓쓰고 파일받고 문자열 파싱한다고 뻘짓했다..............
(뭐 로케일 변환 빼면 전에 다 만든거라 새루 한건 별루없;;)
그러고보니,,,,,,,,아 오늘이 아니고 인제 어제구나...........
포스팅은 해야겠고 올릴글은 업ㅂ어서 ...
'Programming > C' 카테고리의 다른 글
플로피 디스크 이미지를 만들어서 mount하자! (5) | 2008.06.01 |
---|---|
좋은 프로그래밍 습관이란 책을 읽고. (0) | 2008.02.02 |
메모리 직접 접근의 유용성 (memcpy) (3) | 2007.07.01 |
리눅스에서 2기가 이상인 파일에 접근하기 (4) | 2007.06.28 |
Mpd 싱크 가사....... 프로그램 (8) | 2007.05.25 |
메모리 직접 접근의 유용성 (memcpy)
Programming/C 2007. 7. 1. 23:59
Before
전형적인 막장짓..
초기화 -> 거꾸로 값 받아서 배열에 삽입 -> 포맷에 맞게 sprintf를 써서 -> 문자열로 만들고
-> 그걸다시 sscanf써서 -> 정수로 변환후 -> 리턴..
unsigned int atox(char *string)
{
unsigned int ret;
sscanf(string,"%x",&ret);
return ret;
}
unsigned int get_value(unsigned char *segment,int offset,int size)
{
int i;
char temp[size * 2 + 1];
unsigned char dt[size];
temp[size * 2] = '\0';
for(i = 0;i < size;i ++)
/* 리틀 엔디언 */
dt[size - i - 1] = *(segment + offset + i);
if(size == 1)
sprintf(temp,"%02x",dt[0]);
else if(size == 2)
sprintf(temp,"%02x%02x",dt[0],dt[1]);
else if(size == 3)
sprintf(temp,"%02x%02x%02x",dt[0],dt[1],dt[2]);
else if(size == 4)
sprintf(temp,"%02x%02x%02x%02x",dt[0],dt[1],dt[2],dt[3]);
return atox(temp);
}
{
unsigned int ret;
sscanf(string,"%x",&ret);
return ret;
}
unsigned int get_value(unsigned char *segment,int offset,int size)
{
int i;
char temp[size * 2 + 1];
unsigned char dt[size];
temp[size * 2] = '\0';
for(i = 0;i < size;i ++)
/* 리틀 엔디언 */
dt[size - i - 1] = *(segment + offset + i);
if(size == 1)
sprintf(temp,"%02x",dt[0]);
else if(size == 2)
sprintf(temp,"%02x%02x",dt[0],dt[1]);
else if(size == 3)
sprintf(temp,"%02x%02x%02x",dt[0],dt[1],dt[2]);
else if(size == 4)
sprintf(temp,"%02x%02x%02x%02x",dt[0],dt[1],dt[2],dt[3]);
return atox(temp);
}
After
몰라 걍 직접 집어넣어 버려....; 왜 진작 이걸 생각 못했을까?
역시 메모리에 직접 접근해서 하는게 더 편하다.
unsigned int get_value(unsigned char *segment,int offset,int size)
{
int ts = 0;
memcpy(&ts,segment + offset,size);
return ts;
}
{
int ts = 0;
memcpy(&ts,segment + offset,size);
return ts;
}
비슷하게 잘 작동하는듯 하다.... 좀 이상한가... 바꾸고 나니 왠지 불안하다...
값은 제대로 찍히는거 같은데.................
아 size가 클경우 overflow가 일어날수도 있을거 같은데.. 그거 처리도 해야하나?
근데...귀차나연...ㅋ
'Programming > C' 카테고리의 다른 글
좋은 프로그래밍 습관이란 책을 읽고. (0) | 2008.02.02 |
---|---|
오늘 할짓 없어서 한 뻘짓. (4) | 2008.01.24 |
리눅스에서 2기가 이상인 파일에 접근하기 (4) | 2007.06.28 |
Mpd 싱크 가사....... 프로그램 (8) | 2007.05.25 |
간단한 양방향 linkedlist (6) | 2007.05.11 |
리눅스에서 2기가 이상인 파일에 접근하기
Programming/C 2007. 6. 28. 12:19
도스 테이블을 만지작거리는중.
이상하게 값들이 제대로 안들어가는거 같아서.. long long 의 형까지 써보면서 삽질을 해봤지만
안되길래 구글링.... 한 결과
"open,lseek,fopen같은 함수는 2G정도의 파일만 접근이 가능하다.."
는 걸 알아냈다..............
아마도 off_t 값의 범위 때문에 그럴지도?
해결방법은
open64,lseek64처럼 직접소스에 64를 추가시켜주거나
(이때는 따로 인클루드파일을 추가시켜주거나 OR DEFINE을 해줘야하는듯)
D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
를 Gcc컴파일할때 추가해주면 된다 (gcc 버전 3.4부터 된다는 말이 있는데?)
이리하면
/dev/hda같은 대용량 파일(?) 도 잘 처리가 된다..
'Programming > C' 카테고리의 다른 글
오늘 할짓 없어서 한 뻘짓. (4) | 2008.01.24 |
---|---|
메모리 직접 접근의 유용성 (memcpy) (3) | 2007.07.01 |
Mpd 싱크 가사....... 프로그램 (8) | 2007.05.25 |
간단한 양방향 linkedlist (6) | 2007.05.11 |
세그멘테이션 폴트를 줄이자! valgrind (4) | 2007.05.08 |
Mpd 싱크 가사....... 프로그램
Programming/C 2007. 5. 25. 12:47
이딴거 올려봤자 별루 보는사람도 얼마 없겠지만뭐.........
주1>지워졌다 ㅋㅋ.
주2>MPD : Music Player Demon 일겁니다.. 내기억으로는.. 데몬이기때문에 재부팅을하거나
일부로 종료시키지 않은한 음악이 멈추질 않죠! 저는 가끔씩 X 를 재시작하는데 그때 음악이 끈겨서
참 안타까웠던차 이프로그램을 jazzbug님의 추천으로 사용하게 되었죠.......
괜찮네요.. 좋아요...근데 지원되는 파일 포맷이 mp3,ogg정도 밖에 없는게 단점..
망할 wma는 재생이 안돼ㅜㅜㅜㅜㅜㅜ
주3>amarok-live-lyrics
랜덤여신님이 만든 live-lyrics 다음 링크를 참조해주세요.
http://barosl.com/blog/entry/amarok-live-lyrics
주4>dcop :amarok이 이거 쓰던데...... 이거쓰면 amarok이 플레이중인 시간,전체시간,곡이름등을 알수 있다
dcop amarok default 뭐시기.. 이런식으로 썻던거 같은데.. 지금 amarok을 실행시키고 있다면 함
해보시길어플의 상태를 알수 있게 해주는 뭐 그런 녀석인가부다......... 더이상은 모르겠삼..
gtk어플(?) 쪽에도 이런게 있던거 같긴함.
주5>mpc : Music Player Client 인가.. 그래요..
주7> conky
에서 주8>파이썬(python) 이가 메모리 젤많이 먹는거 보면 기분이 상당이 뭐하다(?) 그래서 파이썬
안쓰고 만들려다보니......
주8>소켓 : 이녀석도 기억이 안나서 혼자서 만들다가 몰라서 걍 소스 보고 몇줄 복사붙여넣기 했어요 ㅜㅜ
주9>터미널 전용(!) 프로그램 : 아시려나 모르겠지만 본인은 터미널 프로그램을 매우 사랑! 스러워한다..
주10>공개를 못하겠어용 ㅜ
그리고 우리나라에서 MPD를 쓰는 사람이 몇이나되겠으며( 아니 아는 사람이나 몇이나 될까! )
, 호좁한 인터페이스를 가진 이 터미널 프로그램을 쓸사람은 몇이나 되겠으며......
그래서 공개를 못하겠어욤...
주11> mutagen
파이썬 라이브러리라...물론 이 플그램은 C언어니까 쓸수 없기도 했고 또 c언어용 태그 라이브러리(id3lib인가?)가 존재는 하나 파일을 복사해놓고 거기서 다시 태그를 읽어오고 해야했기 때문에 비효울적인거 같기도 하고(mutagen을 쓴 amarok-live-lyrics도 그렇다..)
사실 뻘짓할 시간이 아까우니 원래 이런 라이브러리를 쓰는게 이익이겠지만...
공부도 함 해볼겸해서 걍 내가 뻘짓해가면서 만듦
두번째 프로젝트(?) 인 주2>MPD 용 싱크가사 프로그램을 대충~ 완성했다.........
일단 되는 기능은 잘 된다.... 내부적으로 고칠건 좀 있는데....... 안그래도 잘 작동하는데 고치기는
귀찮고 해서 현재 놀면서 방치중~~~ 귀차나~ 귀차나~ 어디 딴짓이나 해볼까~ 하고 있는.............
이거에 대해서 간단히 설명하자면 원래 랜덤여신님이 만든 주3>amarok-live-lyrics
가 있는데.. 그 프로그램에 서버로부터 가져오는 주소값만 살짝 내 프로그램으로 받게 해서 만든것!
사실 "구태여 이렇게 따로 프로그램을 만들지 않더라도"
저 amarok-live-lyrics의 내용만 약간 바꾸면 (주4>dcop 대신 주5>mpc를 써서 한다던가............)
mpd용으로 사용할수 있건만............ 만들어본,........
주6> conky에서 주7>파이썬 안써보고 프로그램 만들어보려고요...
또.......어짜피 배우는 입장이기도 하고........ ,c언어 예/복습도 할겸................ )
아직 주9>터미널 전용(!) 프로그램이라 사용자 인터페이스는 정말 할말이 없다
(이부분에서만 보면 완존 쓰레기다 ; 그래서 주10>공개를 못하겠어용 ㅜ)
아직은 계획이 없지만... 뭐 필요하면 Gtk용 프로글햄으로 바꿀 생각도 있긴한데 귀차나서...
하지만! amarok-live-lyrics 보다 좋은건 딱 하나있다...... 주11> mutagen
을 쓰지않고 자체적으로 mp3파일을 분석해서 태그를 무시하기때문에.. 싱크가사 인식성공률이
amarok-live-lyrics보다 높다..........는거 정도...
(amarok-live-lyrics는 서버에 가사가 있는데도 불구하고 태그위치를 제대로 감지를 못해서
md5값을 잘못얻어오는 경우가 몇몇 mp3파일에서 발견되었었다........
모르겠다 요즘에 버젼업 되어서 고쳐졌는지...... )
일단 되는 기능은 잘 된다.... 내부적으로 고칠건 좀 있는데....... 안그래도 잘 작동하는데 고치기는
귀찮고 해서 현재 놀면서 방치중~~~ 귀차나~ 귀차나~ 어디 딴짓이나 해볼까~ 하고 있는.............
이거에 대해서 간단히 설명하자면 원래 랜덤여신님이 만든 주3>amarok-live-lyrics
가 있는데.. 그 프로그램에 서버로부터 가져오는 주소값만 살짝 내 프로그램으로 받게 해서 만든것!
사실 "구태여 이렇게 따로 프로그램을 만들지 않더라도"
저 amarok-live-lyrics의 내용만 약간 바꾸면 (주4>dcop 대신 주5>mpc를 써서 한다던가............)
mpd용으로 사용할수 있건만............ 만들어본,........
주6> conky에서 주7>파이썬 안써보고 프로그램 만들어보려고요...
또.......어짜피 배우는 입장이기도 하고........ ,c언어 예/복습도 할겸................ )
대략 프로그램 구조가......
mp3파일을 읽어 망할놈의 태그 를 건너뛴 만큼 읽는 위치를 이동한다
-> 일정부분을 읽어서 md5 Hash(?) 한다
-> md5한 값을 바로슬 서버의 주소와 합쳐서 -> 주8>소켓써서 서버로부터 페이지를 받아온다
-> 새로운 가사 파일에 그 내용을 저장한다 -> 저장한 내용을 불러와서 메모리에 저장
-> 가사/시간 분리 -> 링크드리스트로 정리 -> 타이머써서 -> (시간에 맞춰) 출력하기.....
-> 에러있음 break -> 그리고 쭉~ 반복~.
mp3파일을 읽어 망할놈의 태그 를 건너뛴 만큼 읽는 위치를 이동한다
-> 일정부분을 읽어서 md5 Hash(?) 한다
-> md5한 값을 바로슬 서버의 주소와 합쳐서 -> 주8>소켓써서 서버로부터 페이지를 받아온다
-> 새로운 가사 파일에 그 내용을 저장한다 -> 저장한 내용을 불러와서 메모리에 저장
-> 가사/시간 분리 -> 링크드리스트로 정리 -> 타이머써서 -> (시간에 맞춰) 출력하기.....
-> 에러있음 break -> 그리고 쭉~ 반복~.
아직 주9>터미널 전용(!) 프로그램이라 사용자 인터페이스는 정말 할말이 없다
(이부분에서만 보면 완존 쓰레기다 ; 그래서 주10>공개를 못하겠어용 ㅜ)
아직은 계획이 없지만... 뭐 필요하면 Gtk용 프로글햄으로 바꿀 생각도 있긴한데 귀차나서...
하지만! amarok-live-lyrics 보다 좋은건 딱 하나있다...... 주11> mutagen
을 쓰지않고 자체적으로 mp3파일을 분석해서 태그를 무시하기때문에.. 싱크가사 인식성공률이
amarok-live-lyrics보다 높다..........는거 정도...
(amarok-live-lyrics는 서버에 가사가 있는데도 불구하고 태그위치를 제대로 감지를 못해서
md5값을 잘못얻어오는 경우가 몇몇 mp3파일에서 발견되었었다........
모르겠다 요즘에 버젼업 되어서 고쳐졌는지...... )
주1>지워졌다 ㅋㅋ.
주2>MPD : Music Player Demon 일겁니다.. 내기억으로는.. 데몬이기때문에 재부팅을하거나
일부로 종료시키지 않은한 음악이 멈추질 않죠! 저는 가끔씩 X 를 재시작하는데 그때 음악이 끈겨서
참 안타까웠던차 이프로그램을 jazzbug님의 추천으로 사용하게 되었죠.......
괜찮네요.. 좋아요...근데 지원되는 파일 포맷이 mp3,ogg정도 밖에 없는게 단점..
망할 wma는 재생이 안돼ㅜㅜㅜㅜㅜㅜ
주3>amarok-live-lyrics
랜덤여신님이 만든 live-lyrics 다음 링크를 참조해주세요.
http://barosl.com/blog/entry/amarok-live-lyrics
주4>dcop :amarok이 이거 쓰던데...... 이거쓰면 amarok이 플레이중인 시간,전체시간,곡이름등을 알수 있다
dcop amarok default 뭐시기.. 이런식으로 썻던거 같은데.. 지금 amarok을 실행시키고 있다면 함
해보시길어플의 상태를 알수 있게 해주는 뭐 그런 녀석인가부다......... 더이상은 모르겠삼..
gtk어플(?) 쪽에도 이런게 있던거 같긴함.
주5>mpc : Music Player Client 인가.. 그래요..
주7> conky
에서 주8>파이썬(python) 이가 메모리 젤많이 먹는거 보면 기분이 상당이 뭐하다(?) 그래서 파이썬
안쓰고 만들려다보니......
주8>소켓 : 이녀석도 기억이 안나서 혼자서 만들다가 몰라서 걍 소스 보고 몇줄 복사붙여넣기 했어요 ㅜㅜ
주9>터미널 전용(!) 프로그램 : 아시려나 모르겠지만 본인은 터미널 프로그램을 매우 사랑! 스러워한다..
주10>공개를 못하겠어용 ㅜ
그리고 우리나라에서 MPD를 쓰는 사람이 몇이나되겠으며( 아니 아는 사람이나 몇이나 될까! )
, 호좁한 인터페이스를 가진 이 터미널 프로그램을 쓸사람은 몇이나 되겠으며......
그래서 공개를 못하겠어욤...
주11> mutagen
파이썬 라이브러리라...물론 이 플그램은 C언어니까 쓸수 없기도 했고 또 c언어용 태그 라이브러리(id3lib인가?)가 존재는 하나 파일을 복사해놓고 거기서 다시 태그를 읽어오고 해야했기 때문에 비효울적인거 같기도 하고(mutagen을 쓴 amarok-live-lyrics도 그렇다..)
사실 뻘짓할 시간이 아까우니 원래 이런 라이브러리를 쓰는게 이익이겠지만...
공부도 함 해볼겸해서 걍 내가 뻘짓해가면서 만듦
'Programming > C' 카테고리의 다른 글
메모리 직접 접근의 유용성 (memcpy) (3) | 2007.07.01 |
---|---|
리눅스에서 2기가 이상인 파일에 접근하기 (4) | 2007.06.28 |
간단한 양방향 linkedlist (6) | 2007.05.11 |
세그멘테이션 폴트를 줄이자! valgrind (4) | 2007.05.08 |
c언어로 구현한 mp3 태그(id3v2) 지우기 (6) | 2007.05.06 |
간단한 양방향 linkedlist
Programming/C 2007. 5. 11. 19:58
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 struct node
5 {
6 struct node *backward;
7 int data;
8 struct node *forward;
9 };
10
11 struct node* create_node(int i)
12 {
13 struct node *new_node = NULL;
14 static struct node *old_node = NULL;
15
16 new_node = (struct node *)malloc(sizeof(struct node) * 1);
17
18 new_node -> backward = old_node;
19 new_node -> data = i;
20 new_node -> forward = NULL;
21
22 /* 첫번째 노드가 아니라면 전노드가 있는 곳의 주소를 준다 */
23 if(old_node != NULL)
24 old_node -> forward = new_node;
25
26 old_node = new_node;
27
28 return new_node;
29 }
30
31 /*me_free <= Header*/
32 void free_node(struct node *me_free)
33 {
34 while(me_free -> forward != NULL){
35 me_free = me_free -> forward;
36 free(me_free -> backward);
37 }
38
39 free(me_free);
40 }
41
42 int main(void)
43 {
44 struct node *head = NULL;
45
46 head = create_node(1);
47 create_node(2);
48 create_node(3);
49 create_node(4);
50
51 printf("node 1 : %d\n",head -> data);
52 printf("node 2 : %d\n",head -> forward -> data);
53 printf("node 3 : %d\n",head -> forward -> forward -> data);
54 printf("node 4 : %d\n",head -> forward -> forward -> forward -> data);
55 printf("moving : %d\n",head -> forward -> backward -> data);
56
57 free_node(head);
58
59 return 0;
60 }
2 #include <stdlib.h>
3
4 struct node
5 {
6 struct node *backward;
7 int data;
8 struct node *forward;
9 };
10
11 struct node* create_node(int i)
12 {
13 struct node *new_node = NULL;
14 static struct node *old_node = NULL;
15
16 new_node = (struct node *)malloc(sizeof(struct node) * 1);
17
18 new_node -> backward = old_node;
19 new_node -> data = i;
20 new_node -> forward = NULL;
21
22 /* 첫번째 노드가 아니라면 전노드가 있는 곳의 주소를 준다 */
23 if(old_node != NULL)
24 old_node -> forward = new_node;
25
26 old_node = new_node;
27
28 return new_node;
29 }
30
31 /*me_free <= Header*/
32 void free_node(struct node *me_free)
33 {
34 while(me_free -> forward != NULL){
35 me_free = me_free -> forward;
36 free(me_free -> backward);
37 }
38
39 free(me_free);
40 }
41
42 int main(void)
43 {
44 struct node *head = NULL;
45
46 head = create_node(1);
47 create_node(2);
48 create_node(3);
49 create_node(4);
50
51 printf("node 1 : %d\n",head -> data);
52 printf("node 2 : %d\n",head -> forward -> data);
53 printf("node 3 : %d\n",head -> forward -> forward -> data);
54 printf("node 4 : %d\n",head -> forward -> forward -> forward -> data);
55 printf("moving : %d\n",head -> forward -> backward -> data);
56
57 free_node(head);
58
59 return 0;
60 }
간단한 linkedlist 당장 쓸때가 있어서
"아무것도 안보고 스스로 처음" 으로 만들어 봣다...
1년반전만해도 linkedlist짜는데 못짜가지고 막 배껴가갔던게 생각이 나네 ㅋㅋ
뭐 암튼간데 잘 작동하는듯하는데.. 글쎄 확실힌 모르겠다..
뭐낙 실수가 많아서..
일단 memory-leak은 안생기는거 같지만....
뭐누군가가 구글링을 하거나 해서 학교 숙제 도움이나 될까..
뭐 틀리다고 해도 내책임은 없다,.. =3 (이블로그에있는 모든 자료가 마찬가지!)
--07-5-12-1시 30분 더 알아보기 쉽게 수정--
'Programming > C' 카테고리의 다른 글
리눅스에서 2기가 이상인 파일에 접근하기 (4) | 2007.06.28 |
---|---|
Mpd 싱크 가사....... 프로그램 (8) | 2007.05.25 |
세그멘테이션 폴트를 줄이자! valgrind (4) | 2007.05.08 |
c언어로 구현한 mp3 태그(id3v2) 지우기 (6) | 2007.05.06 |
pointer 를 call by referance 하기 (6) | 2007.04.09 |