'Programming'에 해당되는 글 58건

  1. 2007.03.06 프로세스 갯수 알아내기.. 4
  2. 2007.02.28 xlib 에러 해결! 2
  3. 2007.02.27 gtk Thread 2
  4. 2007.02.26 X!!- key_grab 2
  5. 2007.02.22 libconfuse 에서 *** glibc detected *** double free or corruption

프로세스 갯수 알아내기..


config파일과 프로세스와의 연계?? 가 필요해서 
혼자서 잡질..
joinc가니가 소스가 있긴하던데..(ps 만들기...)
걍안보고 해봤음.................
덧> 꺽쇠는 문자 망할놈의 태그땜에..

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<dirent.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
 
#define FALSE 0
#define TRUE !FALSE
#define PROCESS_NAME "myterm"           //찾아낼 프로세스 이름
 
int CharDigit(char *data)               //chk할 문자열을 받는다 다숫자가 마즈면 TRUE else FALSE
{
    while(*data!='\0'){
        if(!isdigit((int)*data)){
            return FALSE;
        }
            data++;
    }
    return TRUE;
}

int main(void)
{
     DIR *op_proc;
     struct dirent *rd_proc;
     int fd;
     char path[50];
     char buf[50];
     char *po;
     int ps_num=0;
 
     if((op_proc=opendir("/proc"))==NULL){      
         perror("디렉토리 열기가 실패했습니다!");
         exit(2);
     }
 
     while((rd_proc=readdir(op_proc))!=NULL){     
 
         if(CharDigit(rd_proc->d_name))  {        //숫자라면
             memset(path,0,sizeof(path));
             sprintf(path,"/proc/%s/status",rd_proc->d_name);
 
             if((fd=open(path,O_RDONLY))==-1){
                 perror("파일 열기 가 실패했습니다!");
                 continue;
             }
 
             read(fd,buf,sizeof(buf));
 
             //파싱..
             strtok(buf,"\n");
             po=strchr(buf,(int)'\t');
             po++;
 
             if(strcmp(po,PROCESS_NAME)==0)
                 ps_num++;
         }
 
     }
 
     printf("프로세스 갯수:%d\n",ps_num);
     return 0;
}
쫌 고쳤는데 컴파일 잘될려나...

xlib 에러 해결!

The program 'key_grab_ex' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadAccess (attempt to access private resource denied)'.
(Details: serial 11 error_code 10 request_code 33 minor_code 0)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)

쓰래드랑 Xlib랑 같이 썼을경우에 나타남..
일단 쓰레드 사용이 재대로 되었나 확인할것...
또 키가 겹치지 않는지 확인하자!
window-manager,사용자 설정과 같이 겹치면 ..XXXXXXXXXX
전역단축키가 걸려있는데 그걸또 불러내게 하니까 위의 오류가 나서...

'Programming > GTK+' 카테고리의 다른 글

윈도우 메니져 설정 무시하고 윈도우 만들기  (2) 2007.06.14
g_signal_connect의 폐해?  (4) 2007.03.30
gtk Thread  (2) 2007.02.27
vte를 이용한 간단한 터미널  (2) 2007.01.14
libglade 컴파일법  (1) 2006.12.14

gtk Thread

이번에 Thread가 먼지 확실히 알게된...
대충 하나의 프로그램의 흐름을제어 하는것..인거 같다..
fork는 같은 프로그램 이미지를 copy하는거랑 비교하면...
아 몰라 암튼

if(!g_thread_supported())
g_thread_init(NULL);
쓰레드가 지원하는지 확인하고 초기화시킨다 (역시 gtk는 함수만 봐도 딱 보인다니까..)

if(!g_thread_create((GThreadFunc)me_keys,window,FALSE,NULL))
perror("Thread ERROR");
쓰레드를 생성한다

gdk_threads_init(); //이것도 초기화
gdk_threads_enter();
gtk 함수들 ~
gdk_flush();
gdk_threads_leave();
을 랩핑한다

예시>
227 puts("Show");
228 gdk_threads_enter();
229 gtk_window_deiconify(GTK_WINDOW(widget));
230 gtk_window_present(GTK_WINDOW(widget));
231 gdk_flush();
232 gdk_threads_leave();

근데 이런식으로 해서 xlib랑 앞에 포스팅된 key_grap 할려니깐 자꾸 에러가 먹네..

Xlib: unexpected async reply (sequence~)

음 다시 찾아보니 gtk_thread_init를 빼먹었었구나..(현재 윗부분 수정)

가끔씩 맛이 가는거 빼곤 잘된다...

참고:
http://bebop.emstone.com/research/python/pygtk_faq/chapter20#id5

'Programming > GTK+' 카테고리의 다른 글

g_signal_connect의 폐해?  (4) 2007.03.30
xlib 에러 해결!  (2) 2007.02.28
vte를 이용한 간단한 터미널  (2) 2007.01.14
libglade 컴파일법  (1) 2006.12.14
TODAY.... 삽질 DAY  (6) 2006.08.09

X!!- key_grab

X-윈도우에서 전역단축키 사용하는 방법..

#include \
#include
#include
#include
#include

int main(int argc, char *argv[])
{
Display *d;
Window x11_win;
KeyCode get_key= 0; //init?
KeySym key_code;
XEvent key_press;

if (argc < 3) {
fprintf(stderr,"Useage\nEX>: %s Alt_L \"/bin/bash\"\n", argv[0]);
exit(1);
}

d = XOpenDisplay(""); //x_display(screen) 생성
x11_win = DefaultRootWindow(d); //ID를 윈도에 돌려줌

//이거 실패했을때 가정해서 플그래밍 하래
key_code = XStringToKeysym(argv[1]); //key를 받아(xev value)
get_key = XKeysymToKeycode(d, key_code); //key_code 값으로 변환

XGrabKey(d, get_key, AnyModifier, x11_win,
True, GrabModeAsync, GrabModeAsync); //key_grab

while (1) { //키가 눌릴때까지 loop,winapi의 그것과 비슷한듯
XNextEvent(d, &key_press);

switch(key_press.type) {
case KeyRelease:
system(argv[2]); //run!
break;
default:
break;
}
}

XCloseDisplay(d);
}

구글링 해서 찾은 소스 좀 고침.-

'Programming' 카테고리의 다른 글

쉘스크립트 하는데  (7) 2008.02.04
간만에 포스팅.. 소스 고치기!  (2) 2007.10.17
Nanika를 써보고 나는 생각들  (5) 2007.06.16
c로 cp 프로그램 작성  (5) 2006.05.14
getchar 의 리턴형은..  (4) 2006.04.02

libconfuse 에서 *** glibc detected *** double free or corruption

CFG_SIMPLE_STR 이런식으로 했을시에
저런 에러가 난다면
먼저 문자열을 넣어 줬는지 체크한다
초기값은 NULL이 할당이 되어 있어야한다

그리고 libconfuse에서 값을 재대로 못읽어돌경우가 있는데
그 이유중하나가 큰따옴표를 빼먹어서 일 가능성도 있다
데이터가 없더라도 config파일에 큰쌍따옴표가 들어가게 해야한다

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

c언어로 구현한 mp3 태그(id3v2) 지우기  (6) 2007.05.06
pointer 를 call by referance 하기  (6) 2007.04.09
프로세스 갯수 알아내기..  (4) 2007.03.06
iconv 함수 사용법.?!  (0) 2006.12.15
C 포인터 기초 정리  (3) 2006.03.06
prev 1 ··· 7 8 9 10 11 12 next