롤은 이제 그만 쉬고.. 다른거 해야지
분류 전체보기
- 각성하였다. 다이아 승격.. 다시 돌아왔네 후 2016.07.20
- 마우스저거 참 2016.07.20
- 종료 2016.07.20
- UNIX signal 2016.07.15
- Segmentation Fault 2016.07.15
- dlopen , dlsym, dlclose 2016.07.12
- 마우스 제어 하고싶다 2016.07.12
- 2016-07-12 2016.07.12
- 마우스 컨트롤(mousesystem.c) 2016.07.08
- 마웅스 컨트롤(ums) 2016.07.08
각성하였다. 다이아 승격.. 다시 돌아왔네 후
마우스저거 참
마우스 진짜 별거 아니였는데 왜케 고생했지 결론부터 말하자면
우클릭 메시지만 보내니까 안되는거였고 git 봐서 도움이 된건 .so 파일 lib 로 바꿔놓은 다음에
getopt stdarg 등으로 가져와서 dlsym 으로 메소드 사용한다는 정도와
까먹고 있었지만 마우스 우클릭후 다시 0으로 노말 로 한다는점
아 주업무는 테스팅이다보니 많은걸 까먹 었던것 같다.
이제 파이썬이랑 ffmpeg 으로 매끄러운 영상 재생에 대해 공부해볼까
마우스는 해당 일 하라고 하면
우클릭 메서드 , 좌클릭, 더블 , x축이동 , y축 이동별로 나눠서 확인해봐야겠다
'비공개 카테고리 및 미사용 카테고리 > 옛날 일기장' 카테고리의 다른 글
[이달의 배움] 2018년 8월 (0) | 2018.08.21 |
---|---|
파이썬 (0) | 2016.07.27 |
마우스 제어 하고싶다 (0) | 2016.07.12 |
혜민 스님 - 이타의 마음 (0) | 2016.06.27 |
QA 입지는 정말 좋지않다. (0) | 2016.06.24 |
종료
#include <stdio.h>
#include <unistd.h>
#include <sys/mouse.h>
#include <sys/consio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
// 간략하게 마우스 우클릭만 겁나게 하는 프로그램
int main(void)
{
int cfd = -1;
int mouseproto = MOUSE_PROTO_SYSMOUSE;
struct mouse_info mouse_info;
if(-1==(cfd=open("/dev/consolectl",O_RDWR,0)))
{
printf("failed /dev/consolectl\n");
}
int mfd = -1;
if(-1==(mfd=open("/dev/sysmouse",O_RDWR)))
{
printf("failed /dev/sysmouse\n");
}
mouse_info_t delta;
memset(&delta,0,sizeof(mouse_info_t));
for(;;){
delta.operation=MOUSE_ACTION;
delta.u.data.buttons |=( 1<< (3-1));
ioctl(cfd,CONS_MOUSECTL,&delta);
printf("Buttons: %08x\n",delta.u.data.buttons);
delta.u.data.buttons =0;
printf("Buttons: %08x\n",delta.u.data.buttons);
ioctl(cfd,CONS_MOUSECTL,&delta);
sleep(1);
}
return 0;
}
'GNU > FreeBSD' 카테고리의 다른 글
dlopen , dlsym, dlclose (0) | 2016.07.12 |
---|---|
마우스 컨트롤(mousesystem.c) (0) | 2016.07.08 |
마웅스 컨트롤(ums) (0) | 2016.07.08 |
마우스 컨트롤(sysmouse) (0) | 2016.07.08 |
마우스 컨트롤(Command) (0) | 2016.07.08 |
UNIX signal
.core 덤프를 찾기 위해서
ulimit -c unlimited 를 실행하게 되면 core가 떨어지게 되며 해당 코어에 대해서 gdb 실행 실행.core 로
segv를 확인할 수 있다.
1. SIGHUP: 연결된terminal이hangup하였을때(terminate)
2. SIGINT: interrupt key(^C)를입력하였을때(terminate)
3. SIGQUIT: quit key(^\)를입력하였을때(terminate+core)
4. SIGILL: illegal instruction을수행하였을때(terminate+core)
5. SIGTRAP: implementation defined hardware fault (terminate+core)
6. SIGABRT: abort시스템호출을불렀을때(terminate+core)
7. SIGBUS: implementation defined hardware fault (terminate+core)
8. SIGFPE: arithmetic exception, /0, floating-point overflow (terminate+core)
9. SIGKILL: process를kill하기위핚signal, catch 혹은ignore될수없는signal임(terminate)
10. SIGUSR1: user defined signal 1 (terminate)
11. SIGSEGV: invalid memory reference (terminate+core)
12. SIGUSR2: user defined signal 2 (terminate)
13. SIGPIPE: reader가terminate된pipe에write핚경우발생(terminate)
14. SIGALRM: alarm시스템호출후timer가expire된경우(terminate)
15. SIGTERM: kill시스템호출이보내는software termination signal (terminate)
16. SIGCHLD: child가stop or exit되었을때parent에게전달되는신호(ignore)
17. SIGCONT: continue a stopped process (continue/ignore)
18. SIGSTOP: sendable stop signal, cannot be caught or ignored (stop process)
19. SIGTSTP: stop key(^Z)를입력하였을때(stop process)
20. SIGTTIN: background process가control tty로부터read핛경우(stop process)
21. SIGTTOU: background process가control tty로write핛경우(stop process)
22. SIGURG: urgent condition on IO, socket의OOB data (ignore)
23. SIGXCPU: exceeded CPU time limit (terminate+core/ignore)
24. SIGXFSZ: exceeded file size limit (terminate+core/ignore)
25. SIGVTALRM: virtual time alarm, setitimer, (terminate)
26. SIGPROF: profiling time alarm, setitimer, (terminate)
27. SIGWINCH: terminal window size changed, (ignore)
28. SIGIO: 어떤fd에서asynchronous I/O event가발생하였을경우(terminate/ignore)
29. SIGPWR: system power fail (terminate/ignore)
30. SIGSYS: bad argument to system call (terminate+core)
기본적인 Signal 처리 방식은 아래와 같다.
1. SIG_DFL (SIG_PF)0
2. SIG_ERR (SIG_PF)-1
3. SIG_IGN (SIG_PF)1
4. SIG_HOLD (SIG_PF)2
'QA > 테스팅 관련 툴' 카테고리의 다른 글
[TestTool] Windows Memory Monitoring - VMMap 사용후기 (윈도우 메모리 모니터링 툴) (0) | 2018.09.20 |
---|---|
vscode remote 사용 후기 (0) | 2018.06.27 |
QA_테스팅의 종류 (0) | 2016.06.21 |
Segmentation Fault
세그멘테이션 결함(Segmentation Fault)
세그멘테이션 결함 은 소프트웨어의 실행 중에 나타날 수 있는 오류 이며 세그폴트(SegFault)로 줄여서 쓰기도 한다.
이 오류에 핵심은 프로그램이
(1) 허용되지 않은 메모리 영역에 접근을 시도하거나
(2) 허용되지 않은 방법으로 메모리 영역에 접근을 시도할 경우 발생한다.
세그멘테이션은 OS에서 사용하는 메모리 관리 및 보호의 한 기법이다.
이것은 페이징으로 대부분 대체 되었지만 세그폴트의 용어는 여전히 사용된다.
주로 사용 되는 메모리 관리 정책은 페이징 이지만 몇몇 OS에서는 여전히 일부 논리 레벨에서 세그멘테이션을 사용한다.
UNIX 계열 운영 체제들에서는 잘못된 메모리에 접근하는 프로세스는 SIGSEGV 신호를 받는다.
(signal 에 대해서는 각 운영체제 별로 따로 조사)
MS 윈도우에서는 STATUS_ACCESS_VIOLATION 예외 처리를 받는다.
ex) : 세그폴트의 예제 코드 (ANI C)
const char *s = "hello world";
*s = 'H';
// 이 경우의 const char *s 는 읽기 전용으로 프로그램이 되지만 프로그램이 로드 되었을때 이 OS는 문자열과 상수 데이터를 메모리의 읽기 전용 세그먼트에 배치하며 프로그램 실행시 변수 s는 문자열의 위치를 가리키게 되고 'H'라는 문자열을 변수 s를 통해 메모리에 기록하려는 시도는 곧 세그멘테이션 결함을 일으킨다.
'GNU > LINUX' 카테고리의 다른 글
[Centos 7] TUI (TextMode) 에서 터미널 꺼짐 막기 (0) | 2018.08.07 |
---|---|
[CentOS7] TextMode 에서 한글 깨짐 현상 (0) | 2018.08.06 |
[Centos 7] 호스트 네임 변경 sethostname (hostnamectl) (0) | 2018.06.25 |
COMMAND - alias, unalias (0) | 2016.06.24 |
COMMAND - SCP(Secure Copy) (0) | 2016.06.23 |
dlopen , dlsym, dlclose
유닉스 에서는 공유 라이브러리(shared library) 혹은 shared Object (공유 객체)를 컴파일이 아닌
실행 시간에 동적으로 메모리에 올려서 사용할 수 있다. 이것을 하기 위해 도와주는것이
dlopen, dlsym, dlclose가 있다.
우선 dlopen
void *dlopen(const char *filename,int flag);
const char * filename : 공유 라이브러리 파일명을 의미하며 전체 경로 혹은 LD_LIBRARY_PATH 에 분리된 디렉토리중 에 존재하여야 한다.
int flag :
-> RTLD_LAZY : 실제로 사용되는 시점에 불러옴 ( dlsym 이 호출되어 함수등을 바인한 시점이 되었을때)
-> RTLD_NOW : dlopen 함수내에서 로딩을 끝냄
return values : 정상적으로 공유 라이브러리가 로딩되면 NULL 이 아닌 handle이 반환된다.
비정상적인 경우에 NULL이 반환
dlopen 함수는 정상적인 호출시마다 공유 라이브러리에 대한 참조 count를 1증가 시킨다. 0 ~ 1로 증가할때애 메모리에 로딩 되어진다.
void *handle = NULL;
handle = dlopen("libmouse.so",RTLD_LAZY);
if(handle==NULL){
printf("%s Error -> Number is :%d\n", errno);
return 0;
}
void *dlsym(void *handle, const char *symbol);
void *handle : dlopen 이 반환한 핸들 값
const char *symbol : 찾으려는 symbol(함수명)
return values : symbol 에 대한 위치 (Pointer)
공유 라이브러리에 해당 함수가
int init(mouse_t *mouse, int a, char **b) 로 선언이 되어있다면
사용해야되는 곳에서 받는 방법은
int (*init)(mouse_t *,int,char**) 로 바꿔서 쓴다.
원래 함수에서
함수명을 *로 묶는다.
int (*init)(mouse_t *mouse,int a, char **b)
이 후에 -> 해당 가변인자들을 없앤다.
int (*init)(mouse_t, int, char** )
이렇게 선언하고
init = init로 받으면댐 ! 냐하핳
Example
void handler(mouse_t* mouse)
를 참조할 때에는
void(*handler)(mouse_t *)
dlclose는 아직 나중에
'GNU > FreeBSD' 카테고리의 다른 글
종료 (0) | 2016.07.20 |
---|---|
마우스 컨트롤(mousesystem.c) (0) | 2016.07.08 |
마웅스 컨트롤(ums) (0) | 2016.07.08 |
마우스 컨트롤(sysmouse) (0) | 2016.07.08 |
마우스 컨트롤(Command) (0) | 2016.07.08 |
마우스 제어 하고싶다
아 마우스 제어하고 싶다. 대강 통신까지는 되는거같은데 내가 자유자재로 조절하고싶다.
moused와 ioctl과 consolectl 몇개면 되는줄알았던 통신이 어느새 fd_set까지 와버렸다.
make에 대한 지식이 없어서 일단 코드를 한곳에 때려박아서 작성중에 있다.
절차 지향적인 이 C코드가 되는것을 확인한후에
make 지식을 습득하고 모듈화를 진행해야겠다...
'비공개 카테고리 및 미사용 카테고리 > 옛날 일기장' 카테고리의 다른 글
파이썬 (0) | 2016.07.27 |
---|---|
마우스저거 참 (0) | 2016.07.20 |
혜민 스님 - 이타의 마음 (0) | 2016.06.27 |
QA 입지는 정말 좋지않다. (0) | 2016.06.24 |
오전 회의 (0) | 2016.06.23 |
2016-07-12
3층? 으로 보이는 곳에서 내려간다. 내려가는길에 문이열려있었고 누가 사는지 궁금하여 문을 잠시 처다봤는데 남자 2명이
살고있는 방이였다. 빤쓰 바람에 있는거 확인하고 혹여나 처다볼까 1층으로 빠르게 내려갔다.
1층에도 문이 열려있었다.
그리고 난 나갔다.
마우스 컨트롤(mousesystem.c)
LIB=moused_mousesystems
SRCS=moused_mousesystems.c ../../moused.h
# This is needed to convince bsd.lib.mk to build a shared library
SHLIB_MAJOR=1
.include <bsd.lib.mk>
/*
* new moused module for ums(4) mice
*
*/
#include <sys/types.h>
#include <sys/mouse.h>
#include <sys/consio.h>
#include <fcntl.h>
#include <stdio.h>
#include <err.h>
#include <errno.h>
#include "../../moused.h"
static void (*logmsg)(int, int, const char *, ...) = NULL;
static void activity(rodent_t *rodent, char *packet);
static void printbits(char packet);
MOUSED_INIT_FUNC {
logmsg = rodent->logmsg;
}
MOUSED_PROBE_FUNC {
int level = 0;
rodent->mfd = open(rodent->device, O_RDWR);
if (-1 == rodent->mfd)
logfatal(1, "Unable to open %s", rodent->device);
for (level = 0; level < 3; level++) {
/* Set the driver operation level */
ioctl(rodent->mfd, MOUSE_SETLEVEL, &level);
ioctl(rodent->mfd, MOUSE_GETMODE, &(rodent->mode));
if (MOUSE_PROTO_MSC == rodent->mode.protocol)
break;
}
if (MOUSE_PROTO_MSC != rodent->mode.protocol)
return MODULE_PROBE_FAIL;
return MODULE_PROBE_SUCCESS;
}
MOUSED_RUN_FUNC {
char *packet;
ioctl(rodent->mfd, MOUSE_GETHWINFO, &(rodent->hw));
printf("NumButtons: %d\n", rodent->hw.buttons);
packet = malloc(rodent->mode.packetsize);
for (;;) {
int bytes, x;
bytes = read(rodent->mfd, packet, rodent->mode.packetsize);
if (bytes < 0)
logfatal(1, "Error reading from mousey");
if (bytes == rodent->mode.packetsize)
activity(rodent, packet);
}
}
static void activity(rodent_t *rodent, char *packet) {
mouse_info_t delta;
int x;
delta.operation = MOUSE_ACTION;
delta.u.data.buttons = 0;
delta.u.data.x = delta.u.data.y = delta.u.data.z = 0;
/*
for (x = 0; x < 8; x++)
printf("%02x ", (*(packet + x) & 0xff));
printf("\n");
*/
//printbits(*packet);
/* mouse(4) details what is in the 5-byte packets */
delta.u.data.buttons |= NBIT(*packet, 3)
| NBIT(*packet, 2) << 1
| NBIT(*packet, 1) << 2;
/* Bytes 2 and 4 are horizontal */
delta.u.data.x = (*(packet + 1) + *(packet + 3));
/* Bytes 3 and 5 are vertical */
delta.u.data.y = 0 - (*(packet + 2) + *(packet + 4));
//printf("(%d,%d) ", delta.u.data.x, delta.u.data.y);
//printbits(delta.u.data.buttons);
rodent->update(&delta);
}
static void printbits(char byte) {
int x;
for (x = 1; x <= 8; x++) {
printf("%d", BIT(byte, x));
}
printf("\n");
}
'GNU > FreeBSD' 카테고리의 다른 글
종료 (0) | 2016.07.20 |
---|---|
dlopen , dlsym, dlclose (0) | 2016.07.12 |
마웅스 컨트롤(ums) (0) | 2016.07.08 |
마우스 컨트롤(sysmouse) (0) | 2016.07.08 |
마우스 컨트롤(Command) (0) | 2016.07.08 |
마웅스 컨트롤(ums)
sysmouse랑 같이 쓰는 메이크파일
LIB=moused_sysmouse
SRCS=moused_sysmouse.c ../../moused.h
# This is needed to convince bsd.lib.mk to build a shared library
SHLIB_MAJOR=1
.include <bsd.lib.mk>
/*
* new moused module for ums(4) mice
*
*/
#include <sys/types.h>
#include <sys/mouse.h>
#include <sys/consio.h>
#include <fcntl.h>
#include <stdio.h>
#include <err.h>
#include <errno.h>
#include "../../moused.h"
MOUSED_PROBE_FUNC {
rodent->mfd = open(rodent->device, O_RDWR);
if (-1 == rodent->mfd)
logfatal(1, "Unable to open %s", rodent->device);
return MODULE_PROBE_SUCCESS;
}
'GNU > FreeBSD' 카테고리의 다른 글
dlopen , dlsym, dlclose (0) | 2016.07.12 |
---|---|
마우스 컨트롤(mousesystem.c) (0) | 2016.07.08 |
마우스 컨트롤(sysmouse) (0) | 2016.07.08 |
마우스 컨트롤(Command) (0) | 2016.07.08 |
마우스 컨트롤 (moused) 출처 git hub 분석중 (0) | 2016.07.08 |