반응형 C23 strrstr 함수 구현 (문자열 역순 탐색 함수) -strstr 함수와 유사하게 문자열을 탐색하나 역순으로 탐색한다. #include #include char* strrstr(char* str,char* ptn){ unsigned int ptnlen=0; unsigned int i=0; unsigned int j=0; char* offset=-1; //패턴 문자열 길이 획득 (인덱스로 사용하기 위해 1 감소) ptnlen=strlen(ptn)-1; //문자열의 오른쪽부터 비교 시작 for(i=strlen(str)-1;i != 0;i--){ //문자열의 현재 위치 문자가 패턴 문자열의 마지막 문자와 일치 하는지 확인 if(str[i] == ptn[ptnlen]){ //패턴 문자열이 1 글자이면 오프셋 값 저장하고 리턴 if(ptnlen == 0){ off.. 2011. 7. 20. 프로세스 리스트 얻기 -프로세스 리스트를 얻어와 프로세스 리스트를 구조체에 저장한다. -PLIST : 프로세스 경로, PID 값을 가지는 간단한 이중 연결리스트 구조체 -DeleteProcessList : 프로세스 리스트를 제거한다. -GetProcessList_TI : TlHelp32를 이용한 프로세스 리스트 획득 함수 (히든 프로세스 탐지 불가능) -GetProcessList_BF : Psapi를 이용한 프로세스 리스트 획득 함수 (Brute Force식 PID 탐색을 통한 히득 프로세스 탐지 가능) #include #include #include #define BUFSIZE 512 /** 프로세스 리스트 저장 구조체 **/ struct _PLIST{ char path[BUFSIZE]; int pid; struct _PL.. 2011. 7. 4. 프로세스 제거하기 -인자로 전달된 PID를 가지는 프로세스를 종료한다. #include int KillProcess(int pid){ HANDLE hProc; hProc=OpenProcess(PROCESS_TERMINATE,FALSE,pid); if(!hProc){ return GetLastError(); } TerminateProcess(hProc,0); CloseHandle(hProc); return 0; } 2011. 7. 4. 프로세스 생성하기 -인자로 전달된 파일을 실행시킨다. #include void createPS(char* path){ STARTUPINFO si; PROCESS_INFORMATION pi; int state=0; si.cb=sizeof(STARTUPINFO); si.lpReserved=NULL; si.lpReserved2=NULL; si.cbReserved2=NULL; si.lpDesktop=NULL; si.lpTitle=NULL; si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; si.dwX=0; si.dwY=0; si.dwFillAttribute=0; si.wShowWindow=SW_HIDE; state=CreateProcess(NULL,path,NULL,NULL,TRUE.. 2011. 7. 4. 레지스트리 삭제하기 -RegDeleteValue로 레지스트리 값 제거가 가능하고 RegDeleteKey로 레지스트리 키 제거가 가능하다. #include int main(){ HKEY hkey; int result=0; RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hkey); //레지스트리 값 삭제 if(RegDeleteValue(hkey,"StartUPProgram") == ERROR_SUCCESS){ result++; } //레지스트리 키 삭제 if(RegDeleteKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\SafeBoot\\Minimal\\SVCWI.. 2011. 7. 4. 윈도우 서비스 제거하기 -인자로 전달된 서비스명의 윈도우 서비스를 제거한다. #include #define BUFSIZE 512 void RemoveService(char* sc_name){ SC_HANDLE hManager; SC_HANDLE hService; SERVICE_STATUS sStat; char path[BUFSIZE]; hManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); hService=OpenService(hManager,sc_name,SERVICE_ALL_ACCESS); if(hService){ //서비스 실행 중지 ControlService(hService,SERVICE_CONTROL_STOP,&sStat); while(QueryServiceStatus(h.. 2011. 7. 4. 파일 탐색하기 -인자로 전달된 디렉토리 경로로부터 파일을 탐색한다. ex:)SearchFile("C:\\*.*"); //C드라이브의 모든 파일을 탐색한다. #include #include #include #define BUFSIZE 512 void SearchFile(char* pPath){ struct _finddatai64_t c_file; intptr_t hFile; char dirPath[BUFSIZE]; char tempPath[BUFSIZE]; int i; //디렉토리 경로명만 추출하는 작업(현재 경로명에서 *.* 제거) strncpy(dirPath,pPath,BUFSIZE-1); i=strlen(dirPath)-4; dirPath[i]=0; //파일 탐색 시작 hFile=_findfirsti64(pPath.. 2011. 7. 4. 호스트 IP 주소 얻기 -인자로 전달한 문자열 포인터에 호스트 IP 주소를 저장한다. #include #include void GetHostIP(char* ip){ WORD wVersionRequested; WSADATA wsaData; char name[255]; PHOSTENT hostinfo; wVersionRequested = MAKEWORD(2,0); if(WSAStartup(wVersionRequested,&wsaData) == 0){ if(gethostname(name,sizeof(name)) ==0){ if((hostinfo = gethostbyname(name)) != NULL){ strcpy(ip,inet_ntoa(*(struct in_addr*)*hostinfo->h_addr_list)); } } } WSA.. 2011. 7. 4. 파일 다운로드 하기 -인자로 전달받은 URL로부터 파일을 다운로드 받습니다. ex:)GetFile("http://localhost/file.exe","c:\\file.exe"); //http://localhost/file.exe 에서 파일을 다운받아 c:\file.exe에 저장 #include #include BOOL GetFile(char* url,char* dstPath){ HRESULT hr; hr=URLDownloadToFile(NULL,url,dstPath,0,NULL); if(hr == S_OK){ return TRUE; } return FALSE; } 2011. 7. 4. 시스템 드라이브 목록 얻기 -현재 시스템의 드라이브 목록을 얻습니다. #include #include int main(){ int cnt; int i; int drvType; char drvRoot[104]; char path[7]="A:/*.*"; //드라이브 목록을 불러옴 cnt=GetLogicalDriveStrings(104,drvRoot); for(i=0;i 2011. 7. 4. 운영체제 정보 얻기 -현재 실행중인 운영체제의 정보를 얻습니다. #include #include void printOSInfo(){ OSVERSIONINFO info; info.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); GetVersionEx(&info); printf("Major : %d\n",info.dwMajorVersion); printf("Minor : %d\n",info.dwMinorVersion); printf("ServicePack : %s\n",info.szCSDVersion); } 2011. 7. 4. 콘솔 텍스트 출력하기 -콘솔의 원하는 위치에 텍스트를 출력합니다. ex:) printText("Hello World!!",3,DEFAULT,RIGHT); //오른쪽 정렬로 우측 3칸을 비우고 현재 라인에 문자열 출력 #include #include //텍스트 출력 정렬 #define LEFT -1 #define CENTER 0 #define RIGHT 1 //기본 좌표 #define DEFAULT -1 void printText(char* buffer,int x,int y,int align){ COORD cr; CONSOLE_SCREEN_BUFFER_INFO info; int width; //콘솔 너비 int height; //콘솔 높이 GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPU.. 2011. 7. 4. 콘솔 창 숨기기 -현재 실행중인 콘솔 창을 보이지 않게 숨긴다. #include #define BUFSIZE 512 int main(){ HWND hwnd; char title[BUFSIZE]="My Title"; SetConsoleTitle(title); //타이틀 설정 hwnd=FindWindow(NULL,title); //타이틀에 해당하는 윈도우 핸들 얻기 ShowWindow(hwnd,SW_HIDE); //숨김 옵션 설정 return 0; } 2011. 7. 4. C에서 입력 버퍼를 비울 때 피해야할 방법 [강좌] C에서 입력 버퍼를 비울 때 피해야할 방법 (C언어를 배우자) |작성자 네가티브 #include int main(int argc, char *argv[]) { int d; while(1) { scanf("%d", &d); printf("%d\n", d); } return 0; } 실행해보시면 숫자를 입력할 시 그 숫자가 화면에 출력되는 형태로 무한 반복됨을 알 수 있습니다. 그런데, 여기에 문자를 입력하면 무한 루프에 빠지게 됩니다. 이걸 방지하고자 초보자들은 아래와 같은 코드를 작성하기도 합니다. #include int main(int argc, char *argv[]) { int d; while(1) { fflush(stdin); // 입력 버퍼를 비운다. scanf("%d", &d); pr.. 2010. 8. 11. readn() & writen() 코드, unpipc.h 파일 unpipc.h 를 include 하고 사용한다. 일반 read()&write() 함수와 사용법은 같다. readn ssize_t readn(int fd, void *vptr, size_t n) { size_t nleft; ssize_t nread; char *ptr; ptr = vptr; nleft = n; while (nleft > 0) { if ( (nread = read(fd, ptr, nleft)) < 0) { if (errno == EINTR) nread = 0; /* and call read() again */ else return(-1); } else if (nread == 0) break; /* EOF */ nleft -= nread; ptr += nread; } return(n - nl.. 2010. 8. 11. curses.h,ncurses.h 가 없을 경우 yum install ncurses-devel 2010. 8. 11. gcc mysql.h 컴파일 gcc -o test -I/usr/local/mysql/include -L/usr/local/mysql/lib/mysql -lmysqlclient test.cpp 2010. 8. 11. 리눅스 로케일 세팅 http://kldp.org/node/59797 gcc aa.c -o aa -lncursesw 쉘에서의 로케일과 프로그램의 로케일이 다르기 때문에, 프로그램 안에서도 로케일을 세팅해 줘야 한글이 제대로 나오게 됩니다. 또, 라이브러리의 차이점은 ncursesw -> utf8, euckr 둘다 지원 ncurses -> euckr 지원 wchar를 지원해주고 않해주고의 차이입니다. 따라서 ncursesw 는 utf8이 지원이 되고, ncurses는 utf8이 지원이 않되는 것입니다. 따라서 코딩은 다음과 같이 해주면 해결이 될것입니다. getenv("LANG" )으로 쓰시면 편할것으로 예상됩니다. ko_KR.utf8 로 하시면 utf8로 나올것이고, ko_KR.eucKR 로 하시면 euckr로 나올것입니다... 2010. 8. 11. 리눅스 curses.h 설명 [리눅스프로그래밍]6.Curses Curses Curses를 사용한 프로그램의 컴파일 방법 끝에 '-lncurses'를 추가해서 컴파일한다. 개념 stdscr구조체는 표준화면이다. stdout와 비슷하다고 할 수 있다. 윈도우에 대한 출력은 refresh를 호출하기 전까지는 실제 화면에 나타나지 않는다. curses 라이브러리는 stdscr과 curscr을 비교해서 수행한다. curses 프로그램에서 문자출력처리는 (1)curses함수를 사용하여 논리적인 화면을 갱신하고, (2)curses에게 요청하여 물리적인 화면을 refresh로 갱신한다. curses 프로그램은 실제 사용 이전에 initscr로 라이브러리를 초기화하여야 하며, 사용 이후에는 endwin으로 설정을 복구하도록 해야 한다. 기본적인 출.. 2010. 8. 11. 리눅스 curses.h 사용 예 curses 의 간단한 사용예 #include #include #include #include #include //이동 삽입 특성 등의 실습 예 int main() { const char witch_one[]=" First Witch "; const char witch_Two[]=" Second Witch "; const char * scan_ptr; int i,j; initscr(); move(5,15); //=========문자의 특성을 켠다 attron(A_BOLD);// 2010. 8. 11. 이전 1 2 다음 반응형