'보고서작성tip' 카테고리의 다른 글
| [Excel/엑셀] 앞 뒤 공백 지우기 함수 (0) | 2014.07.22 |
|---|---|
| '~으로서'와 '~으로써'의 차이 (1) | 2014.03.02 |
| [한글] 페이지번호 만들기 / 쪽번호 감추기 (0) | 2013.11.11 |
| [한글] 몇 글자 작성했는지 궁금할 땐? (0) | 2013.05.29 |
| [Excel/엑셀] 앞 뒤 공백 지우기 함수 (0) | 2014.07.22 |
|---|---|
| '~으로서'와 '~으로써'의 차이 (1) | 2014.03.02 |
| [한글] 페이지번호 만들기 / 쪽번호 감추기 (0) | 2013.11.11 |
| [한글] 몇 글자 작성했는지 궁금할 땐? (0) | 2013.05.29 |
#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++;
}
}| [C] UDP 채팅 프로그램(단순 주고받는 핑퐁) - 네트워크 과제 (0) | 2014.11.19 |
|---|---|
| [C] 소켓 파일 전송 프로그램 (클라이언트 > 서버) (0) | 2014.11.05 |
| [C] 소켓 파일 전송 프로그램 (서버 > 클라이언트) (0) | 2014.10.29 |
| [C] 도메인 주소 변환 예제 (0) | 2014.10.29 |
|
서버 실행환경 |
|
|
|
학과 서버 사용 |
|
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;
}
| [C] UDP 채팅 프로그램(단순 주고받는 핑퐁) - 네트워크 과제 (0) | 2014.11.19 |
|---|---|
| [C] HTTP client 예제 (0) | 2014.11.05 |
| [C] 소켓 파일 전송 프로그램 (서버 > 클라이언트) (0) | 2014.10.29 |
| [C] 도메인 주소 변환 예제 (0) | 2014.10.29 |
|
서버 실행환경 |
|
|
|
학과 서버 사용 |
|
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;
}| [C] HTTP client 예제 (0) | 2014.11.05 |
|---|---|
| [C] 소켓 파일 전송 프로그램 (클라이언트 > 서버) (0) | 2014.11.05 |
| [C] 도메인 주소 변환 예제 (0) | 2014.10.29 |
| [C] 문자, 숫자 변환 함수 (0) | 2014.10.22 |
라이브러리 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");
}
| [C] 소켓 파일 전송 프로그램 (클라이언트 > 서버) (0) | 2014.11.05 |
|---|---|
| [C] 소켓 파일 전송 프로그램 (서버 > 클라이언트) (0) | 2014.10.29 |
| [C] 문자, 숫자 변환 함수 (0) | 2014.10.22 |
| [C] 2의 보수 나누기 (0) | 2014.10.15 |
인스턴스화하지 않고 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;
}
}| [JAVA 코딩습관] BigInteger 객체 사용법 (0) | 2014.12.03 |
|---|---|
| [Servlet] template servlet - db server (0) | 2014.11.26 |
| [JAVA] Swing GTKLookAndFeel JAVA1.8에서 실행할 때 (0) | 2014.09.26 |
| [JAVA] 데몬 스레드(Daemon Thread) (0) | 2014.09.06 |
#includechar *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);
| [C] 소켓 파일 전송 프로그램 (서버 > 클라이언트) (0) | 2014.10.29 |
|---|---|
| [C] 도메인 주소 변환 예제 (0) | 2014.10.29 |
| [C] 2의 보수 나누기 (0) | 2014.10.15 |
| [C] 파일 목록 가져오기(출력) 예제 (0) | 2014.10.15 |
$ talk username
$ write username $ input message ctrl + D 전송
$ wall $ input message ctrl + D 전송
거부 $ mesg n 허용 $ mesg y 확인 $ mesg
| 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 |
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()
| [Django] 장고 시작하기(설치, 생성, 실행) (0) | 2015.12.04 |
|---|---|
| [Python 3] 팩토리얼(factorial) 구하기 (0) | 2014.08.22 |
| [Python] 파이썬 예약어 (0) | 2014.08.02 |
| [Python] 더 좋은 assert() : assertEqual() (0) | 2014.03.14 |
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 }
| [C] 도메인 주소 변환 예제 (0) | 2014.10.29 |
|---|---|
| [C] 문자, 숫자 변환 함수 (0) | 2014.10.22 |
| [C] 파일 목록 가져오기(출력) 예제 (0) | 2014.10.15 |
| [VS] COFF로 변환하는 동안 오류가 발생했습니다. 파일이 잘못되었거나 손상되었습니다. (0) | 2014.10.15 |
#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 다운로드
| [C] 2의 보수 나누기 (0) | 2014.10.15 |
|---|---|
| [C] 파일 목록 가져오기(출력) 예제 (0) | 2014.10.15 |
| [C] warning C4996: '_open()': This function or variable may be unsafe. Consider using _sopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. (0) | 2014.10.11 |
| [C] 유닉스의 open()를 대신하는 메서드 (0) | 2014.10.09 |
안녕하세요!
티스토리에 보금자리를 마련하시려는 여러분께 초대장을 배포해 드리려고 합니다.
나만의, 내 생각을, 내 기억을 담는 소중한 블로그를 만들고 싶다면 티스토리로 시작해보세요!
티스토리 블로그는 초대에 의해서만 가입이 가능합니다. 원하시는 분은 댓글에 운영목적과 E-mail 주소를 남겨주시면 초대장을 보내드립니다. 남겨주실 때에는 꼭 비밀댓글로 남겨주세요!
초대장을 보내드리고 바로 개설하시지 않으신 분들은 초대장을 회수할 수도 있으니 바로 개설해주세요!
|
Yes
이런 분들께 드립니다!
1. 다른 블로그를 사용해보셨던 분
2. 이메일 주소가 정상적인 분
3. 블로그를 시작하려는 이유를 남겨주신 분! |
No
이런 분들께 드리지 않아요!
1. 이메일 주소가 의심되는 분!
2. 이메일 주소를 남기지 않으신 분
3. 이유도 없이 달라고 하시는 분! |
| [진행] 11월 티스토리 초대장 배포합니다. (0) | 2015.11.16 |
|---|---|
| [마감] 6월 티스토리 초대장 배포합니다. (23) | 2014.06.26 |
| [마감] 5월 티스토리 초대방 배포합니다. (53) | 2014.05.07 |
| [마감] 4월 티스토리 초대장 배포합니다. (56) | 2014.04.08 |
|
실행환경 |
|
|
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 추가.
보안상의 문제로 다른 함수를 사용하라는 것인데 설정 추가로 해결할 수 있다.
| [C] 파일 목록 가져오기(출력) 예제 (0) | 2014.10.15 |
|---|---|
| [VS] COFF로 변환하는 동안 오류가 발생했습니다. 파일이 잘못되었거나 손상되었습니다. (0) | 2014.10.15 |
| [C] 유닉스의 open()를 대신하는 메서드 (0) | 2014.10.09 |
| [C] 연산자 우선순위 (0) | 2014.05.02 |
|
실행환경 |
|
|
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 ); } }
참고 사이트 링크
1. Tomcat/webapps 디렉토리 밑에 새로운 애플리케이션(폴더)을 생성한다.
2. 새로운 애플리케이션 안에 WEB-INF, WEB-INF/classes, WEB-INF/lib 를 생성한다.
3. classes 안에는 컴파일한 class 파일을 넣는다.
4. lib 에는 각종 라이브러리 파일을 넣는다.
5. src 에는 작성한 코드파일을 넣는다.
| [Servlet] 서블릿 DB 연결 문제 (0) | 2014.10.07 |
|---|---|
| [tomcat] 톰캣 루트 폴더 변경하기 (1) | 2014.04.29 |
| [Apache Tomcat] localhost:8080 접속시 인증 필요 문제(XDB) (0) | 2014.02.09 |
| [JSP] 정수,실수,문자열에 콤마찍기 NumberFormat (0) | 2013.07.10 |
|
실행환경 |
|
|
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 에 넣어준다.
참고 링크
| [Servlet] 서블릿 디렉토리(패키지) 구조 생성 (0) | 2014.10.07 |
|---|---|
| [tomcat] 톰캣 루트 폴더 변경하기 (1) | 2014.04.29 |
| [Apache Tomcat] localhost:8080 접속시 인증 필요 문제(XDB) (0) | 2014.02.09 |
| [JSP] 정수,실수,문자열에 콤마찍기 NumberFormat (0) | 2013.07.10 |
truncate [table name]; ex) truncate students;
| [MySQL] MySQL 설정(사용자 추가, 변경, 디렉토리 변경) (0) | 2015.02.04 |
|---|---|
| [MySQL] workbench read only table 해결하기 (0) | 2014.09.29 |
| [MySQL] MySQL 예약어(reserved word) (0) | 2014.09.29 |
| [MySQL] utf-8 설정하기 (0) | 2014.09.03 |
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] MySQL 설정(사용자 추가, 변경, 디렉토리 변경) (0) | 2015.02.04 |
|---|---|
| [MySQL] 테이블내 데이터 모두 삭제, truncate (0) | 2014.10.06 |
| [MySQL] MySQL 예약어(reserved word) (0) | 2014.09.29 |
| [MySQL] utf-8 설정하기 (0) | 2014.09.03 |
Reserved Words in MySQL 5.6.22
ACCESSIBLE | ADD | ALL |
ALTER | ANALYZE | AND |
AS | ASC | ASENSITIVE |
BEFORE | BETWEEN | BIGINT |
BINARY | BLOB | BOTH |
BY | CALL | CASCADE |
CASE | CHANGE | CHAR |
CHARACTER | CHECK | COLLATE |
COLUMN | CONDITION | CONSTRAINT |
CONTINUE | CONVERT | CREATE |
CROSS | CURRENT_DATE | CURRENT_TIME |
CURRENT_TIMESTAMP | CURRENT_USER | CURSOR |
DATABASE | DATABASES | DAY_HOUR |
DAY_MICROSECOND | DAY_MINUTE | DAY_SECOND |
DEC | DECIMAL | DECLARE |
DEFAULT | DELAYED | DELETE |
DESC | DESCRIBE | DETERMINISTIC |
DISTINCT | DISTINCTROW | DIV |
DOUBLE | DROP | DUAL |
EACH | ELSE | ELSEIF |
ENCLOSED | ESCAPED | EXISTS |
EXIT | EXPLAIN | FALSE |
FETCH | FLOAT | FLOAT4 |
FLOAT8 | FOR | FORCE |
FOREIGN | FROM | FULLTEXT |
GET | GRANT | GROUP |
HAVING | HIGH_PRIORITY | HOUR_MICROSECOND |
HOUR_MINUTE | HOUR_SECOND | IF |
IGNORE | IN | INDEX |
INFILE | INNER | INOUT |
INSENSITIVE | INSERT | INT |
INT1 | INT2 | INT3 |
INT4 | INT8 | INTEGER |
INTERVAL | INTO | IO_AFTER_GTIDS |
IO_BEFORE_GTIDS | IS | ITERATE |
JOIN | KEY | KEYS |
KILL | LEADING | LEAVE |
LEFT | LIKE | LIMIT |
LINEAR | LINES | LOAD |
LOCALTIME | LOCALTIMESTAMP | LOCK |
LONG | LONGBLOB | LONGTEXT |
LOOP | LOW_PRIORITY | MASTER_BIND |
MASTER_SSL_VERIFY_SERVER_CERT | MATCH | MAXVALUE |
MEDIUMBLOB | MEDIUMINT | MEDIUMTEXT |
MIDDLEINT | MINUTE_MICROSECOND | MINUTE_SECOND |
MOD | MODIFIES | NATURAL |
NOT | NO_WRITE_TO_BINLOG | NULL |
NUMERIC | ON | OPTIMIZE |
OPTION | OPTIONALLY | OR |
ORDER | OUT | OUTER |
OUTFILE | PARTITION | PRECISION |
PRIMARY | PROCEDURE | PURGE |
RANGE | READ | READS |
READ_WRITE | REAL | REFERENCES |
REGEXP | RELEASE | RENAME |
REPEAT | REPLACE | REQUIRE |
RESIGNAL | RESTRICT | RETURN |
REVOKE | RIGHT | RLIKE |
SCHEMA | SCHEMAS | SECOND_MICROSECOND |
SELECT | SENSITIVE | SEPARATOR |
SET | SHOW | SIGNAL |
SMALLINT | SPATIAL | SPECIFIC |
SQL | SQLEXCEPTION | SQLSTATE |
SQLWARNING | SQL_BIG_RESULT | SQL_CALC_FOUND_ROWS |
SQL_SMALL_RESULT | SSL | STARTING |
STRAIGHT_JOIN | TABLE | TERMINATED |
THEN | TINYBLOB | TINYINT |
TINYTEXT | TO | TRAILING |
TRIGGER | TRUE | UNDO |
UNION | UNIQUE | UNLOCK |
UNSIGNED | UPDATE | USAGE |
USE | USING | UTC_DATE |
UTC_TIME | UTC_TIMESTAMP | VALUES |
VARBINARY | VARCHAR | VARCHARACTER |
VARYING | WHEN | WHERE |
WHILE | WITH | WRITE |
XOR | YEAR_MONTH | ZEROFILL |
New Reserved Words in MySQL 5.6
GET | IO_AFTER_GTIDS | IO_BEFORE_GTIDS |
MASTER_BIND | ONE_SHOT | PARTITION |
SQL_AFTER_GTIDS | SQL_BEFORE_GTIDS |
| [MySQL] 테이블내 데이터 모두 삭제, truncate (0) | 2014.10.06 |
|---|---|
| [MySQL] workbench read only table 해결하기 (0) | 2014.09.29 |
| [MySQL] utf-8 설정하기 (0) | 2014.09.03 |
| [MySQL] 오토커밋(autocommit) 상태 확인하기 (0) | 2014.09.01 |
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;
| [Oracle] ORA-28002 : the password will expired within N days. (0) | 2014.07.17 |
|---|---|
| [Oracle]OJDBC.jar 드라이버 다운로드 (0) | 2014.01.17 |
| [Oracle]ORA-00904 : invalid identifier (0) | 2014.01.17 |
|
실행환경 |
|
|
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 |
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");| [Servlet] template servlet - db server (0) | 2014.11.26 |
|---|---|
| [JAVA 코딩습관] Boolean 객체 사용법 (0) | 2014.10.24 |
| [JAVA] 데몬 스레드(Daemon Thread) (0) | 2014.09.06 |
| [JAVA] MySQL 이클립스에서 Java 로 연동하기 (0) | 2014.08.15 |
| 스톱워치 프로그램 - FreeStopwatch (작성중) (0) | 2014.04.24 |
|---|---|
| 바탕화면 정리 - Fence(작성중) (0) | 2014.03.26 |
| iso 파일 간단 실행하기 - WinCDEmu (0) | 2014.02.12 |
| 크롬 IE 확장 프로그램 - IE Tab Multi (0) | 2014.02.03 |
|
실행환경 |
|
|
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 |
안드로이드에서는 메인스레드가 아닌 다른 스레드(백그라운드)에서 UI를 건들였을 때 에러가 발생한다. 이는 서로 변경하는 것을 허용하게 되면 동기화 문제가 발생하기 때문이다. 그렇기 때문에 핸들러(Handler)를 사용해서 스레드간에 통신을 할 수 있다.
| [Android] AutoCompleteTextView Text Color 버그 (0) | 2014.11.17 |
|---|---|
| [Android] the method setbackgrounddrawable(drawable) from the type view is deprecated (0) | 2014.11.14 |
| [Android][DB] 엑셀파일 변환해서 SQLite DB에 넣기 (0) | 2014.08.06 |
| [Android] 생명주기(Life Cycle) (0) | 2014.06.30 |
먼저 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 가 있다.
| 언론사/포탈 뉴스 RSS 목록 (0) | 2014.11.18 |
|---|---|
| 주요 RSS 목록 (0) | 2014.11.18 |
| [운영체제]병행성, 임계구역, 상호배제, 교착상태 (0) | 2014.06.02 |
| Bitbucket 무료 gif 사이트 (0) | 2014.05.20 |