본문 바로가기

Programming123

Java newline characters 개행문자로 Unix 는 '\n' 을 쓰고 Windows 는"\r\n" 을쓰고 Mac 은 과거에 '\r' 만 썻었는데 unix 로 옮겨가면서(System X) '\n'도 허용한다고 하는데 이를 한방에 해결해 주는 녀석도 역시나 자바에 있다. System 요녀석을 잘보면 유용한 정보들을 얻을 수 있다. String newline = System.getProperty("line.separator"); 2010. 1. 15.
Java string comparison C++에 익숙한 사람들이 자주 저지른 실수중에 하나는, 자바에서 string 비교시 == 를 사용한다는 점이다. 하지만 이런경우 동일한 문자열을 지니고 있어도 어쩔때는 true, 어쩔때는 false 를 리턴하는데, 그 이유는 java 안에서의 == 에 있다. C++ 에서 string 에 대해 == 를 쓰는경우, string 클래스의 operator 를 이용하는 것이며, java 에서의 == 는, system operator 로서 string object 를 하나의 변수로 보고 그 안의 값을 통채로 비교하게 되는 것이다. 따라서 동일한 문자열을 지니고 있어도 그 이외의 내부 변수는 다를 수 있으므로 자바에서 == 는 문자열을 비교하는데에는 적합하지 않다. 결론. 자바에서 문자열이 같은지를 비교할 경우에는 .. 2010. 1. 7.
gdb 에서 signal 무시하기 gdb 에서 프로그램보다 먼저 signal을 잡기 때문에 간혹 디버깅하기 힘들때가 있다. 아래 명령어는 gdb shell 에 들어가서 사용하는 것이다. 시그날에는 SIGSEGV SIG32 등등 형식에 맞게 써준다. gdb> handle 시그날 nostop gdb> handle 시그날 noprint 참고로 argument 가 필요한 실행파일을 gdb 선언시 사용하고자 할때 --args 를 이용하면 된다. 만일 실행을 ./a.out 3 2 test.txt 로 해야한다면, 아래와 같이 선언후 gdb 모드에서 run을 해주면 된다. $ gdb --args ./a.out 3 2 test.txt 2010. 1. 6.
서버에서 SIGPIPE 처리하기 클라이언트가 연결을 종료했을때, 서버가 전에 사용했던 소켓으로 데이터를 전송하려고하면 SIGPIPE 가 발생한다. 기본적으로 서버는 "프로그램을 종료" 하므로 이를 막기 위해선 핸들링 함수를 연결하거나 신호를 무시해야 한다. SIGPIPE 무시하기 signal (SIGPIPE , SIG_IGN); SIGPIPE HANDLER 이용하기 : 핸들러는 void형에 int형 인자 한개를 받아야 한다. void signal_handler(int signo) { // do.. something } .... int main() { signal(SIGPIPE, signal_handler); } 2009. 11. 24.