pdf80.zip


1. 압축 풀고 난 뒤 PDFDriverReset.exe 실행.

2. 한컴에서 '인쇄'(Ctrl+P)하고 Hancom PDF 로 인쇄.



참고 사이트 링크


#include <WinSock2.h>
#include <stdio.h>

#define BUFMAX 1024
#define GET_MSG "GET /index.html HTTP/1.0\n\n"
#define PORT 80

void printIPAddrs(char **h_addr_list);
// A. 실행인자로 도메인 이름을 받는다.
int main(int argc, char **argv) {
	WSADATA		WSAData;
	struct hostent *myent;
	SOCKADDR_IN addr;
	SOCKET s;
	char buffer[BUFMAX];
	int readbytes = 0;


	// B. 인터넷 주소를 가져오지 못할 경우 에러 처리.
	if(argc != 2) {
		printf("Usage : %s [ineternet address]\n", argv[0]);
		WSACleanup();
		return 1;
	}

	if (WSAStartup (MAKEWORD(2,2), &WSAData) != 0) {
		printf("WSAStartup failed\n");
		return 1;
	}

	myent = gethostbyname(argv[1]);
	if(myent == NULL) {
		printf("Not Found Domain Name.\n");
		return;
	}

	printf("Host Name : %s\n", myent->h_name);

	printIPAddrs(myent->h_addr_list);

	printf("=====================================================\n");

	s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(s == INVALID_SOCKET) {
		return 1;
	}

	addr.sin_family = AF_INET;
	addr.sin_port = htons(PORT);
	addr.sin_addr.S_un.S_addr = inet_addr(inet_ntoa(*(struct in_addr *)*myent->h_addr_list));
	
	printf("%s %d\n", inet_ntoa(*(struct in_addr *)*myent->h_addr_list), PORT);
	printf("%s\n", GET_MSG);

	printf("=====================================================\n");
	// D. 인터넷 주소 중 하나를 선택해서 웹 서버에 연결해서 웹페이지를 요청한다.(HTTP 프로토콜의 GET Method 이용)
	if(connect(s, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR) {
		printf("fail to connect\n");
		closesocket(s);
		return 1;
	}
	
	send(s, GET_MSG, sizeof(GET_MSG), 0);
	
	while(1){
		int i = 0;
		ZeroMemory(buffer, BUFMAX);
		i = recv(s, buffer, BUFMAX, 0);
		if(i <= 0) {
			break;
		}
		readbytes += i;
		printf("%s", buffer);	
	}
	printf("\ntotal length : %d\n", readbytes);

	closesocket(s);
	WSACleanup();
	return 0;

}

// C. 여러 개의 인터넷 주소가 있을 때, 이를 모두 출력한다.
void printIPAddrs(char **h_addr_list) {
	while(*h_addr_list != NULL) {
		printf("%s\n", inet_ntoa(*(struct in_addr *)*h_addr_list));	
		h_addr_list++;
	}
}


서버 실행환경

 

 학과 서버 사용

 OS

 SunOS 5.10

 GCC

 3.4.6

 Java

 1.5.0_16


클라이언트 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz 3.40GHz

 Memory

 8.00 GB

 OS

 Windows 7 Professional K 64bit

 Java

 1.8.0_05

 MySQL

 Ver 14.14 Distrib 5.6.19, for Win64

 Web Server

 Apache Tomcat 7.0.51


서버 프로그램

#include <stdio.h>
#include <sys/types.h> 	// socket, bind, accept, open
#include <sys/socket.h> // socket, bind, listen, accept
#include <unistd.h>		// read, write
#include <sys/stat.h> 	// open
#include <fcntl.h>		// open
#include <errno.h>

#include <string.h>

#define PORT	5500
#define MAXBUF	1024

int main() {
	int server_sockfd;
	int client_sockfd;
	int des_fd;	// file num
	struct sockaddr_in serveraddr, clientaddr;
	int client_len, read_len, file_read_len;	// length
	char buf[MAXBUF];
	
	
	int check_bind;
	

	client_len = sizeof(clientaddr);

	/* socket() */
	server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if(server_sockfd == -1) {
		perror("socket error : ");
		exit(0);
	}

	/* bind() */
	bzero(&serveraddr, sizeof(serveraddr));
	serveraddr.sin_family		= AF_INET;
	serveraddr.sin_addr.s_addr	= htonl(INADDR_ANY);
	serveraddr.sin_port			= htons(PORT);

	if(bind(server_sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) > 0) {
		perror("bind error : ");
		exit(0);
	}

	/* listen */
	if(listen(server_sockfd, 5) != 0) {
		perror("listen error : ");
	}

	while(1) {
		char file_name[MAXBUF]; // local val
		memset(buf, 0x00, MAXBUF);
		
		/* accept() */
		client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr, &client_len);
		printf("New Client Connect : %s\n", inet_ntoa(clientaddr.sin_addr));

		/* file name */
		read_len = read(client_sockfd, buf, MAXBUF);
		if(read_len > 0) {
			strcpy(file_name, buf);
			printf("%s > %s\n", inet_ntoa(clientaddr.sin_addr), file_name);
		} else {
			close(client_sockfd);
			break;
		}

		/* create file */
FILE_OPEN:
		des_fd = open(file_name, O_WRONLY | O_CREAT | O_EXCL, 0700);
		if(!des_fd) {
			perror("file open error : ");
			break;
		}
		if(errno == EEXIST) {
			close(des_fd);
			size_t len = strlen(file_name);
			file_name[len++] = '_';
			file_name[len++] = 'n';
			file_name[len] = '\0';
			goto FILE_OPEN;
		}
		
		/* file save */
		while(1) {
			memset(buf, 0x00, MAXBUF);
			file_read_len = read(client_sockfd, buf, MAXBUF);
			write(des_fd, buf, file_read_len);

			if(file_read_len == EOF | file_read_len == 0) {
				printf("finish file\n");
				break;
			}


		}


		close(client_sockfd);
		close(des_fd);
	}
	close(server_sockfd);
	return 0;
}


클라이언트 프로그램

#include <WinSock2.h>
#include <stdio.h>
#include <sys/types.h>
#include <io.h>
#include <sys/stat.h>
#include <fcntl.h>


#define PORT	5500
#define IP		"127.0.0.1"
#define MAXBUF	1024

int main() {
	WSADATA		WSAData;
	SOCKADDR_IN	addr;
	SOCKET		s;
	int			sourse_fd;
	char		buf[MAXBUF];
	int			file_name_len, read_len;
	
	if(WSAStartup(MAKEWORD(2,2), &WSAData) != 0) {
		return 1;
	}

	/* socket() */
	s = socket(AF_INET, SOCK_STREAM, 0);
	if(s == INVALID_SOCKET) {
		return 1;
	}

	addr.sin_family				= AF_INET;
	addr.sin_addr.S_un.S_addr	= inet_addr(IP);
	addr.sin_port				= htons(PORT);
	if(connect(s, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR) {
		perror("connect : ");
		printf("fail to connect.\n");
		closesocket(s);
		return 1;
	}

	memset(buf, 0x00, MAXBUF);
	printf("전송할 파일명 : ");
	scanf("%s", buf);

	printf(" > %s\n", buf);
	file_name_len = strlen(buf);

	send(s, buf, file_name_len, 0);
	sourse_fd = _open(buf, _O_RDONLY);
	if(!sourse_fd) {
		perror("Error : ");
		return 1;
	}
	
	while(1) {
		memset(buf, 0x00, MAXBUF);
		read_len = _read(sourse_fd, buf, MAXBUF);
		send(s, buf, read_len, 0);
		if(read_len == 0) {
			break;
		}
		
	}

	return 0;
}


서버 실행환경

 

 학과 서버 사용

 OS

 SunOS 5.10

 GCC

 3.4.6

 Java

 1.5.0_16


클라이언트 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz 3.40GHz

 Memory

 8.00 GB

 OS

 Windows 7 Professional K 64bit

 Java

 1.8.0_05

 MySQL

 Ver 14.14 Distrib 5.6.19, for Win64

 Web Server

 Apache Tomcat 7.0.51


서버 프로그램

#include <sys/socket.h>
#include <sys/stat.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>

#define PORT	5555
#define MAXBUF	1024 /* 클라이언트와 길이를 맞추어준다. */
int main(int argc, char **argv) {
	int server_sockfd, client_sockfd; // 소켓
	int client_len, n;
	int file_read_len;
	char buf[MAXBUF];
	char file_name[MAXBUF];
	struct sockaddr_in clientaddr, serveraddr;
	int source_fd; // 파일 번호
	int chk_bind; // 연결 확인 변수
	int chk_write;
	int read_len;

	client_len = sizeof(clientaddr);

	/* socket() */
	server_sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(server_sockfd == -1) {
		perror("socket error : ");
		exit(0);
	}

	/* bind() */
	bzero(&serveraddr, sizeof(serveraddr)); // 해당 메모리 영역 초기화
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
	serveraddr.sin_port = htons(PORT);

	chk_bind = bind(server_sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
	if(chk_bind > 0) {
		perror("bind error : ");
		exit(0);
	}

	/* listen() */
	if(listen(server_sockfd, 5)) {
		perror("listen error : ");
	}

	/* 클라이언트 연결 대기 */
	while(1) {
		memset(buf, 0x00, MAXBUF);
		/* accept() */
		client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr, &client_len);
		printf("New Client Connect: %s\n", inet_ntoa(clientaddr.sin_addr));
		
		/* 파일명 받기 */
		read_len = read(client_sockfd, buf, MAXBUF);
		if(read_len > 0) {
		    memset(file_name, 0x00, MAXBUF);
			strcpy(file_name, buf);
			printf("%s > %s\n", inet_ntoa(clientaddr.sin_addr), file_name);
		} else {
			close(client_sockfd);
			break;
		}

		/* 파일 열기  */
		source_fd = open(file_name, O_RDONLY); 
		if(!source_fd) {
			perror("file open error : ");
			break ;
		}
		printf("before while\n");
		while(1) {
			memset(buf, 0x00, MAXBUF);
			file_read_len = read(source_fd, buf, MAXBUF);
			printf("\nread : %s",buf); 
			chk_write = write(client_sockfd, buf, MAXBUF);
			if(file_read_len == EOF | file_read_len == 0) {
				printf("finish file\n");
				break;
			}
		}
		close(client_sockfd);
		close(source_fd);
	}
	close(server_sockfd);
	return 0;
}


클라이언트 프로그램

#include <WinSock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h> // _open(), _read() 사용하기 위해서
#include <fcntl.h> // O_CREATIO, _O_RDONLY 사용하기 위해
#include <sys/types.h>
#include <errno.h>
#include <sys/stat.h> // _S_IWRITE 사용하기 위해

#define PORT	5555
#define IP		"127.0.0.1"
#define MAXBUF	1024

int main() {
	WSADATA		WSAData;
	SOCKADDR_IN addr;
	SOCKET		s;
	char buffer[1024];
	char file_name[1024];
	int readbytes;
	int i, len;
	int dest_fd;
	int recv_len;
	int totaln = 0;

	if (WSAStartup (MAKEWORD(2,2), &WSAData) != 0) {
		return 1;
	}

	s = socket(AF_INET, SOCK_STREAM, 0);

	if (s == INVALID_SOCKET) {
		return 1;
	}

	addr.sin_family = AF_INET;
	addr.sin_port = htons(PORT);
	addr.sin_addr.S_un.S_addr = inet_addr(IP);

	if (connect(s, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR) {
		printf("fail to connect\n");
		closesocket(s);
		return 1;
	}

	printf("전송받을 파일명 : ");
	scanf("%s", file_name);

	printf("입력한 파일명 : %s", file_name);
	len = strlen(file_name);
	
	send(s, file_name, len, 0);
	
	// 파일 생성
	dest_fd = _open(file_name, _O_CREAT | _O_EXCL | _O_WRONLY,_S_IWRITE);
	if(!dest_fd) {
		perror("Error ");
		return 1;
	}
	
	if(errno == EEXIST) {
		perror("Error ");
		_close(dest_fd);
		return 1;
	}
	printf("파일 생성 완료\n");


	while(1) {
		memset(buffer, 0x00, MAXBUF);
		recv_len = recv(s, buffer, MAXBUF, 0);
		if(recv_len == 0) {
			printf("finish file\n");
			break;
		}
		totaln += _write(dest_fd, buffer, recv_len);
	}
	_close(dest_fd);
	 
	closesocket(s);
	WSACleanup();

	//system("pause");
	return 0;

}




라이브러리 ws2_32.lib 추가해주고 실행해야한다.

#include <WinSock2.h>
#include <stdio.h>

void ptintMyent(struct hostent *myent);

int main(int argc, char **argv) {
	WSADATA		WSAData;

	if (WSAStartup (MAKEWORD(2,2), &WSAData) != 0) {
		return 1;
	}

	ptintMyent(gethostbyname("web.dongguk.ac.kr"));
	ptintMyent(gethostbyname("www.naver.com"));
	ptintMyent(gethostbyname("www.hanb.co.kr"));

	WSACleanup();
	return 0;

}

void ptintMyent(struct hostent *myent) {
	long int *add;
	SOCKADDR_IN myen;

	if(myent == NULL) {
		return;
	}

	printf("Host name : %s\n", myent->h_name);

	while(*myent->h_addr_list != NULL) {
		add = (long int*)*myent->h_addr_list;
		myen.sin_addr.S_un.S_addr = *add;
		
		printf("%d -> %s\n", add, inet_ntoa(myen.sin_addr));
		myent->h_addr_list++;
	}
	printf("\n");
}


Boolean 객체의 사용법

인스턴스화하지 않고 static 필드인 TURE, FALSE를 사용한다.

public class BooleanExample {
    public static void main(String[] args) {
        // Boolean bool = new Boolean(ture);
        // Boolean bool2  = Boolean.valueOf(false);

        Boolean bool = Boolean.TRUE;
        Boolean bool2 = Boolean.FALSE;
     }
}

문자 -> 숫자

#include 
char *str = NULL;
int result;
str = "1234";
result = atoi(str);

숫자 -> 문자

atoi()와 달리 itoa()는 표준이아니다. 그렇기때문에 itoa()는 유닉스에서 사용할 수가 없다. 유닉스에서는 sprintf()를 사용한다.

(여담이지만 네트워크 프로그래밍 중간 시험에서 서버에서 숫자로 된 값을 클라이언트(window)로 전송해야하는데 itoa() 밖에 몰라서 한 문제를 날려먹었다... '아는 것이 힘이다.'라는 것을 느낀 시험이었다.)

WINDOW
int val = 1234;
char* str = NULL;
_itoa(val, str, 10)
UNIX
char str[512];
int val = 1234;
sprintf(str, "%d", val);


채팅 : talk 사용자명

$ talk username

메시지 전달 : write 사용자명

$ write username
$ input message
ctrl + D 전송

접속한 모두에게 메시지 전달 : wall

$ wall
$ input message
ctrl + D 전송

메시지 수신, 허용/거부

거부
$ mesg n
허용
$ mesg y
확인
$ mesg


'System > Linux, unix' 카테고리의 다른 글

Linux OS 확인  (0) 2017.11.29
[UNIX] session 죽이기(kill)  (0) 2014.11.16
[ubuntu] ssh server 설치  (0) 2014.07.02
[ubuntu] JAVA JDK 설치하기  (0) 2014.04.06


파이썬 웹 프로그래밍

저자
주성식, 홍성민 지음
출판사
위키북스 | 2014-01-28 출간
카테고리
컴퓨터/IT
책소개
파이썬으로 쉽고 재미있게 웹 프로그래밍을 시작하세요![파이썬 웹...
가격비교

데이터베이스 처리

연결

connect_db()를 통해 데이터베이스의 연결을 반환 값으로 받는다.

from sqlite3 import dbapi2 as sqlite3
...
DATABASE = '/tmp/minitwit.db'
...
def connect_db():
    return sqlite3.connect(app.config['DATABASE'])

연결과 종료

연결과 종료를 before_request()와 teardown_request() 데코레이터를 이용해 좀 더 모듈화한다. 

before_request()는 요청에 앞서서 실행되는 함수 정의.

teardown_request()는 응답이 생성된 후에 실행되는 함수 정의.

g 객체는 전역(global) 객체를 의미하며 한 번의 요청에 대해서만 같은 값을 유지하고 스레드에 대해 안전하다는 전제 조건이 있다.

@app.before_request
def before_request():
    g.db = connect_db()
    g.user = None
    if 'user_id in session:
        g.user = query_db('select * from user where user_id = ?', [session['user_id']], one=True)

@app.teardown_request
def teardown_request(exception):
    if hasattr(g, 'db'):
        g.db.close()

질의 처리

세 가지 인자로 1. 실행할 질의문, 2. 바인딩 변수라 불리는 질의문에 들어갈 인자(튜플 형태), 3. 결과값으로 리스트 전체를 받을 것인지 리스트의 첫 번째 요소만을 받을 것인지 결정하는 불린(boolean) 값

g 객체에 설정한 데이터베이스 연결을 이용해서 질의문과 바인딩 변수를 실행하고 결과에 대한 커서(cursor)를 얻는다. 그 결과 커서에서 전체 레코드를 꺼내(fetch) 로우(row)를 한 줄씩 읽으면서 그 로우에 있는 컬림(column)의 이름과 값을 dict 형태로 변환한다. 세 번째 인자에 True가 넘어오면 딕셔너리 형태로 변환된 한 개의 로우만 반환되고, False가 넘어오면 전체 로우가 반환된다.

def query_db(query, args=(), one=False):
    cur = g.db.execute(quert, args)
    rv = [dict((cur.description[idx][0], value)
                    for idx, value in enumerate(row)) for row in cur.fetchall()]
    return (rv[0] if rv else None) if one else rv


데이터베이스 초기화

데이터베이스 초기화함수

def init_db():
    with closing(connect_db()) as db:
        with app.open_resource('schema.sql') as f:
            db.cursor().executescript(f.read())
        db.commit()


2의 보수로 나눗셈

  1 #include <stdio.h>
  2
  3 int main() {
  4     int val1;
  5     int val2;
  6     int answer = 0; // 몫
  7     int remainder = 0; // 나머지
  8
  9     val1 = 198;
 10     val2 = 75;
 11     printf("%d / %d =\n", val1, val2);
 12
 13     val2 = ~val2 + 1; // 2의 보수
 14     printf("%d\n", val2);
 15
 16     while(1) {
 17         val1 += val2;
 18         if(val1 < 0)
 19             break;
 20         answer++;
 21         remainder = val1;
 22     }
 23     printf("answer is %d, remainder %d\n", answer, remainder);
 24
 25     return 0;
 26 }


유닉스에서 파일 목록 출력하기

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <error.h>
 
int main()
{
    DIR *dir;
    struct dirent *ent;
    dir = opendir ("./");
    if (dir != NULL) {
 
    /* print all the files and directories within directory */
    while ((ent = readdir (dir)) != NULL) {
        printf ("%s\n", ent->d_name);
    }
    closedir (dir);
    } else {
         /* could not open directory */
         perror ("");
        return EXIT_FAILURE;
    }
}


윈도우에서 파일 목록 출력하기

#include <stdio.h>
#include <io.h>
#include <conio.h>
 
void main()
{
    _finddata_t fd;
    long handle;
    int result = 1;
    handle = _findfirst(".\\*.*", &fd);  //현재 폴더 내 모든 파일을 찾는다.
 
    if (handle == -1)
    {
        printf("There were no files.\n");
        return;
    }
 
    while (result != -1)
    {
        printf("File: %s\n", fd.name);
        result = _findnext(handle, &fd);
    }
 
    _findclose(handle);
    return;
}

출처 링크, 링크


문제점

Microsoft Visual Studio 2010 컴파일시 에러 발생

"COFF로 변환하는 동안 오류가 발생했습니다. 파일이 잘못되었거나 손상되었습니다."


해결방안

프로젝트 속성 > 구성 속성 > 링커 > 일반 > 중분 링크 사용 > 아니요(/INCREMENTAL:NO)
혹은
프로젝트 속성 > 구성 속성> 매니페스트 도구 > 입력 및 출력 > 매니페스트 포함 > 아니요
영구적으로 해결하는 방법
-> Visual Studio 서비스팩 1 다운로드




i n v i t a t i o n

티스토리 초대장

+ 남은 초대장 수 : 00

안녕하세요!

티스토리에 보금자리를 마련하시려는 여러분께 초대장을 배포해 드리려고 합니다.

나만의, 내 생각을, 내 기억을 담는 소중한 블로그를 만들고 싶다면 티스토리로 시작해보세요!

티스토리 블로그는 초대에 의해서만 가입이 가능합니다. 원하시는 분은 댓글에 운영목적과 E-mail 주소 남겨주시면 초대장을 보내드립니다. 남겨주실 때에는 꼭 비밀댓글로 남겨주세요!

초대장을 보내드리고 바로 개설하시지 않으신 분들은 초대장을 회수할 수도 있으니 바로 개설해주세요!

Yes
이런 분들께 드립니다!
1. 다른 블로그를 사용해보셨던 분
2. 이메일 주소가 정상적인 분
3. 블로그를 시작하려는 이유를 남겨주신 분!
No
이런 분들께 드리지 않아요!
1. 이메일 주소가 의심되는 분!
2. 이메일 주소를 남기지 않으신 분
3. 이유도 없이 달라고 하시는 분!
티스토리 이래서 좋아요!
1. 이미지, 동영상, 오디오, 파일까지! 무한 용량과 강력한 멀티미디어를 올릴 수 있어요!
2. 스킨위자드로 스킨을 내맘대로~ 거기에 기능 확장 플러그인까지!
3. 내가 원하는대로 myID.com으로 블로그 주소를 만들 수 있어요!


 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz 3.40GHz

 Memory

 8.00 GB

 OS

 Windows 7 Professional K 64bit

 Java

 1.8.0_05

 MySQL

 Ver 14.14 Distrib 5.6.19, for Win64

 Web Server

 Apache Tomcat 7.0.51


문제점

컴파일시 아래와 같은 에러 중 어느 한가지라도 발생했을 경우.(확실치는 않다.)

Warning    2    warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    336    1    Programa 3205
Warning    3    warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    363    1    Programa 3205
Warning    4    warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    369    1    Programa 3205
Warning    5    warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    371    1    Programa 3205
Warning    6    warning C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    374    1    Programa 3205
Warning    7    warning C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    375    1    Programa 3205
Warning    9    warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    718    1    Programa 3205
Warning    10    warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    727    1    Programa 3205
Warning    11    warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    729    1    Programa 3205
Warning    12    warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    754    1    Programa 3205
Warning    13    warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    766    1    Programa 3205
Warning    14    warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    768    1    Programa 3205
Warning    15    warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    792    1    Programa 3205
Warning    16    warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    806    1    Programa 3205
Warning    17    warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    808    1    Programa 3205
Warning    18    warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    830    1    Programa 3205
Warning    19    warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    842    1    Programa 3205
Warning    20    warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    844    1    Programa 3205
Warning    21    warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    866    1    Programa 3205
Warning    22    warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    911    1    Programa 3205
Warning    23    warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    f:\fernando luiz\teste-3205\ps3000.c    939    1    Programa 3205

해결방안


Project properties > Configuration Properties > C/C++ > Preprocessor > Preprocessor Definitions > _CRT_SECURE_NO_WARNINGS
프로젝트 오른쪽 클릭 > 속성 > 구성 속성 > C/C++ > 전처리기 > 전처리기 정의 > _CRT_SECURE_NO_WARNINGS 추가.

보안상의 문제로 다른 함수를 사용하라는 것인데 설정 추가로 해결할 수 있다.

 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz 3.40GHz

 Memory

 8.00 GB

 OS

 Windows 7 Professional K 64bit

 Java

 1.8.0_05

 MySQL

 Ver 14.14 Distrib 5.6.19, for Win64

 Web Server

 Apache Tomcat 7.0.51


문제점

유닉스에서 사용하던 함수 open(), close(), write(), read()를 window Visual Studio 에서 사용하려하는데 에러 발생.

해결방안

_open()을 사용한다. 다른 함수 모두 앞에 '_'를 붙혀 사용한다. 아래 코드는 MS Developer Network C 라이브러리에서 참고하였다.

#include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <io.h> #include <stdio.h> int main( void ) { int fh1, fh2; fh1 = _open( "CRT_OPEN.C", _O_RDONLY ); // C4996 // Note: _open is deprecated; consider using _sopen_s instead if( fh1 == -1 ) perror( "Open failed on input file" ); else { printf( "Open succeeded on input file\n" ); _close( fh1 ); } fh2 = _open( "CRT_OPEN.OUT", _O_WRONLY | _O_CREAT, _S_IREAD | _S_IWRITE ); // C4996 if( fh2 == -1 ) perror( "Open failed on output file" ); else { printf( "Open succeeded on output file\n" ); _close( fh2 ); } }


참고 사이트 링크


Servlet 디렉토리 구조 생성 방법



1. Tomcat/webapps 디렉토리 밑에 새로운 애플리케이션(폴더)을 생성한다.

2. 새로운 애플리케이션 안에 WEB-INF, WEB-INF/classes, WEB-INF/lib 를 생성한다.

3. classes 안에는 컴파일한 class 파일을 넣는다.

4. lib 에는 각종 라이브러리 파일을 넣는다.

5. src 에는 작성한 코드파일을 넣는다.



 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz 3.40GHz

 Memory

 8.00 GB

 OS

 Windows 7 Professional K 64bit

 Java

 1.8.0_05

 MySQL

 Ver 14.14 Distrib 5.6.19, for Win64

 Web Server

 Apache Tomcat 7.0.51


문제점

서블릿에서 DB 연결시 NullPointerException 발생하고 연결 실패.(이 문제 하나로 몇일을 삽질하였다...)

해결방안

서블릿은 JDBC를 Properties에서 가져오지 않는다. 서블릿의 디렉토리 구조안에 라이브러리 파일을 넣어야 하는데, 위치는 'WEB-INF/lib'에 넣어주면 된다.

이클립스에서 생성한 프로젝트에서는 WebContent/WEB-INF/lib 에 넣어준다.





참고 링크

MySQL 테이블내 데이터 모두 삭제하기

truncate [table name]; ex) truncate students;


MySQL 워크벤치 Read Only 테이블 변경하기


The table has no unique row identifier (primary key or a NOT NULL unique index)

현재 테이블에 PK(primary key)나 NOT NULL, unique index 속성이 없으므로 Read Only가 된다.

## 컬럼 추가 ALTER TABLE 테이블명 ADD 컬럼명 타입, 속성; ## 컬럼 속성 수정 mysql > ALTER TABLE 테이블명 MODIFY 컬럼명 타입,속성; # 속성 : NOT NULL / AUTO_INCREMENT / PRIMARY KEY / FIRST / AFTER 컬럼명); # ex) ALTER TABLE 테이블명 MODIFY 컬럼명 INT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; ## 컬럼 삭제 mysql > ALTER TABLE 테이블명 DROP 컬럼명; ## primary key 속성 삭제 mysql > ALTER TABLE 테이블명 DROP PRIMARY KEY; ## 테이블 내용 전체 삭제 mysql > TRUNCATE TABLE 테이블명;

참고사이트 [1]


MySQL Reserved Words

MySQL doc 링크

 Reserved Words in MySQL 5.6.22

ACCESSIBLEADDALL
ALTERANALYZEAND
ASASCASENSITIVE
BEFOREBETWEENBIGINT
BINARYBLOBBOTH
BYCALLCASCADE
CASECHANGECHAR
CHARACTERCHECKCOLLATE
COLUMNCONDITIONCONSTRAINT
CONTINUECONVERTCREATE
CROSSCURRENT_DATECURRENT_TIME
CURRENT_TIMESTAMPCURRENT_USERCURSOR
DATABASEDATABASESDAY_HOUR
DAY_MICROSECONDDAY_MINUTEDAY_SECOND
DECDECIMALDECLARE
DEFAULTDELAYEDDELETE
DESCDESCRIBEDETERMINISTIC
DISTINCTDISTINCTROWDIV
DOUBLEDROPDUAL
EACHELSEELSEIF
ENCLOSEDESCAPEDEXISTS
EXITEXPLAINFALSE
FETCHFLOATFLOAT4
FLOAT8FORFORCE
FOREIGNFROMFULLTEXT
GETGRANTGROUP
HAVINGHIGH_PRIORITYHOUR_MICROSECOND
HOUR_MINUTEHOUR_SECONDIF
IGNOREININDEX
INFILEINNERINOUT
INSENSITIVEINSERTINT
INT1INT2INT3
INT4INT8INTEGER
INTERVALINTOIO_AFTER_GTIDS
IO_BEFORE_GTIDSISITERATE
JOINKEYKEYS
KILLLEADINGLEAVE
LEFTLIKELIMIT
LINEARLINESLOAD
LOCALTIMELOCALTIMESTAMPLOCK
LONGLONGBLOBLONGTEXT
LOOPLOW_PRIORITYMASTER_BIND
MASTER_SSL_VERIFY_SERVER_CERTMATCHMAXVALUE
MEDIUMBLOBMEDIUMINTMEDIUMTEXT
MIDDLEINTMINUTE_MICROSECONDMINUTE_SECOND
MODMODIFIESNATURAL
NOTNO_WRITE_TO_BINLOGNULL
NUMERICONOPTIMIZE
OPTIONOPTIONALLYOR
ORDEROUTOUTER
OUTFILEPARTITIONPRECISION
PRIMARYPROCEDUREPURGE
RANGEREADREADS
READ_WRITEREALREFERENCES
REGEXPRELEASERENAME
REPEATREPLACEREQUIRE
RESIGNALRESTRICTRETURN
REVOKERIGHTRLIKE
SCHEMASCHEMASSECOND_MICROSECOND
SELECTSENSITIVESEPARATOR
SETSHOWSIGNAL
SMALLINTSPATIALSPECIFIC
SQLSQLEXCEPTIONSQLSTATE
SQLWARNINGSQL_BIG_RESULTSQL_CALC_FOUND_ROWS
SQL_SMALL_RESULTSSLSTARTING
STRAIGHT_JOINTABLETERMINATED
THENTINYBLOBTINYINT
TINYTEXTTOTRAILING
TRIGGERTRUEUNDO
UNIONUNIQUEUNLOCK
UNSIGNEDUPDATEUSAGE
USEUSINGUTC_DATE
UTC_TIMEUTC_TIMESTAMPVALUES
VARBINARYVARCHARVARCHARACTER
VARYINGWHENWHERE
WHILEWITHWRITE
XORYEAR_MONTHZEROFILL


New Reserved Words in MySQL 5.6

GETIO_AFTER_GTIDSIO_BEFORE_GTIDS
MASTER_BINDONE_SHOTPARTITION
SQL_AFTER_GTIDSSQL_BEFORE_GTIDS 


접속 방법

오라클 접속방법

cmd > sqlplus

오라클 관리자 접속방법 

cmd > sqlplus sys/password as sysdba

잠금, 락 해제하기

// 사용자 ID가 hr이라고 가정
sql > alter user hr account unlock;


계정 관리

사용자 추가, 확인, 권한 부여

// 추가
sql > create user 사용자명 identified by 비밀번호;
// 비밀번호 변경
sql > alter user 사용자ID identified by 비밀번호
// 확인
sql > select username from dba_users;
// 권한 부여
sql > grant connect, resource to 사용자명;

사용자 접속

sql > conn 사용자ID/비밀번호;
sql > conn sys/관리자비밀번호 as sysdba;



 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz 3.40GHz

 Memory

 8.00 GB

 OS

 Windows 7 Professional K 64bit

 Java

 1.8.0_05

 MySQL

 Ver 14.14 Distrib 5.6.19, for Win64


JAVA 1.8에서 GTPLookAndFeel() 대체 방법

PSSAV 에서 실행이 안되서 코드 확인해보니 한 문장에 에러가 있었다. com.sun.java.swing.plaf.gtk.GTKLookAndFeel() 인데 아마도 1.8에서는 없는 클래스 인것 같다. 그래서 다음과 같은 코드로 변경하여 해결하였다.

// 변경 전
UIManager.setLookAndFeel(new com.sun.java.swing.plaf.gtk.GTKLookAndFeel());
// 변경 후
UIManager.setLookAndFeel("Javax.swing.plaf.metal.metalLookAndFeel");



xpopup.exe


SoftrosLANMessengerSetup.exe



 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz 3.40GHz

 Memory

 8.00 GB

 OS

 Windows 7 Professional K 64bit

 Java

 1.8.0_05

 MySQL

 Ver 14.14 Distrib 5.6.19, for Win64

Handler 사용하기

안드로이드에서는 메인스레드가 아닌 다른 스레드(백그라운드)에서 UI를 건들였을 때 에러가 발생한다. 이는 서로 변경하는 것을 허용하게 되면 동기화 문제가 발생하기 때문이다. 그렇기 때문에 핸들러(Handler)를 사용해서 스레드간에 통신을 할 수 있다.


방법 1

방법 2


방법 3


설치방법

먼저 GitHub에 가입이 되어있어야 하고, Sublime Text 2 에는 Package Contorl 이 설치되어 있어야한다.

이제 Sublime Text 2 에서 gist를 설치하고 계정을 설정하면 된다.

 



설치가 완료되면 Perferences - Package Settings - Gist - Settings User 를 클릭하고 GitHub 계정을 저장한다.



아래와 같이 계정 아이디와 패스워드 토큰을 입력한다.

{
	// Github user ID
	"username" : "id",
	// Gitjub password
	"password" : "pw",
	// Your Github API token
	"token" : "token"
}

토큰을 생성하는 방법은 GitHub 홈페이지에서 로그인한 후 Account settings - Applications 에서 Personal access tokens 옆에 Generate new token 으로 생성한다.



사용방법

업로드하기

다음과 같은 코드를 작성한뒤 gist에 Ctrl+Shift+P 를 입력하고 Gist: Create Public Gist 를 선택한다.

그리고 하단에 입력창이 보이는데 첫 번째 파일 설명과, 두 번째 파일명을 입력하면 파일이 업로드된다.

단축키 Ctrl+K, I(순서대로 K와 I를 입력해야한다.)를 이용하면 훨씬 빠르게 사용할 수 있다.





불러오기

Ctrl+k,o 마찬가지로 단축키를 이용할 수 있다.




업데이트하기

Gist: Update File 로 업데이트 한다. 마찬가지로 단축키 Ctrl+K, S 가 있다.





+ Recent posts