frame = new Frame("frame");
frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e){
System.exit(0);
}
});
String (byte[] bytes, int offset, int length)
플랫폼의 디폴트 캐릭터 세트를 사용해, 지정된 바이트 부분 배열을 복호화(decode) 하는 것에 의해, 새로운 String 를 구축합니다.
String (char[] value)
새로운String
를 할당해, 이것이 캐릭터 배열 인수에 현재 포함되어 있는 캐릭터 순차 순서를 나타내도록(듯이) 합니다.
char |
charAt (int index) 지정된 인덱스 위치에 있는 캐릭터를 돌려줍니다. |
int |
compareTo (Object o) 이 String 를 다른 Object 와 비교합니다. |
int |
compareTo (String anotherString) 2 개의 캐릭터 라인을 사전식과 비교합니다. |
String |
concat (String str) 지정된 캐릭터 라인을 이 캐릭터 라인의 마지막에 연결합니다. |
MMDB 서버 클라이언트 테스트 프로그램 Client (테스트 용이기때문에 소스가 불안정함)
TestCase :
more..
#define MAXLINE 512
#define BUFSIZE 513
//commend string
char *EXIT_STRING = "exit";
char *EXIT ="exit";
char *COMMIT ="end";
char *START ="start";
char *SHOW ="show";
char *DROP ="drop";
char *RESTORE ="restore";
char *DISK ="commit";
char *NOIMAGE ="noimage";
char *IMAGE ="image";
char *IMAGEEND ="imageend";
char *SEARCH ="search";
char *SQL = "sql";
int recv_and_print(int sd);
bool exits = false;
int input_and_send(int sd);
FILE* file;
FILE* image_file;
int sock;
void catch_sigint(int signum){ //signal handler
close(sock);
exit(0);
return;
}
struct sigaction act;
int main(int argc, char *argv[]) {
pid_t pid;
static int s;
static struct sockaddr_in servaddr;
sigset_t masksets;
sigfillset(&masksets);
act.sa_handler = catch_sigint;
act.sa_mask = masksets;
act.sa_flags=0;
//act.sa_handler = catch_sigint;
sigaction(SIGUSR1,&act,NULL);
sigaction(SIGINT,&act,NULL);
if (argc != 3) {
printf("usage: %s server_ip port \n", argv[0]);
exit(0);
}
// socket
if((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
printf("Client: Can't open stream socket.\n");
exit(0);
}
int val,val1;
// socket buffer resize
val = BUFSIZE;
val1= BUFSIZE;
setsockopt(s,SOL_SOCKET,SO_RCVBUF,&val,sizeof(val));
setsockopt(s,SOL_SOCKET,SO_SNDBUF,&val1,sizeof(val1));
// '0' init
bzero((char *)&servaddr, sizeof(servaddr));
// servaddr
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
servaddr.sin_port = htons(atoi(argv[2]));
// connect
if(connect(s,(struct sockaddr *)&servaddr,sizeof(servaddr)) <
0) {
printf("Client: can't connect to server.\n");
exit(0);
}
sock = s;
if( (pid=fork())>0) // parent process
input_and_send(s); // send to server
else if(pid==0) // child process
recv_and_print(s); // recv to server
kill(0,SIGUSR1); // kill child
usleep(1000);
return 0;
}
// send message for server
int input_and_send(int sd) {
char filename[50];
char search_id[10];
char query[50];
char buf[MAXLINE];
char str[1024];
int pstate;
int j= 1;
int nbyte;
int totalsize = 0;
act.sa_handler = catch_sigint;
sigaction(SIGINT,&act,NULL);
while(1){ // prompt while
if(exits) // exit call
break;
fflush(stdin);
printf("MMDB >> "); // small shell prompt
fflush(stdout);
while(fgets(buf, MAXLINE, stdin) != NULL){
if(buf[1] == '\0') // enter press
break;
if (strstr(buf, "help") != NULL ){ // help commend
printf(" send : send file and insert MMDB\n");
printf(" show : show all data in table\n");
printf(" search : search for dxpid\n");
printf(" sql : user query send (select only) \n");
printf(" commit : backup data in Disk \n");
printf(" drop : drop table in Memory \n");
printf(" exit : exit program \n");
fflush(stdin);
break;
}
// send commend
if (strstr(buf, "send") != NULL ){
printf(" Data File Path : ");
scanf("%s",filename);
file = fopen(filename, "rt");
if(file == NULL){ // file name not exist error
printf(" file open error. incorrect name\n");
continue;
}
memset(buf,0,512);
strcpy(buf,START);
// write(sd,buf, strlen(buf));
send(sd,buf,sizeof(buf),0);
usleep(50000);
while(1){ // send to server from file
memset(&buf,0,512);
fgets(str, sizeof(str), file);
if(feof(file)!=0) break;
nbyte = strlen(str);
strcpy(buf,str);
write(sd, buf, BUFSIZE);
//send(sd,buf,1024,0);
buf[MAXLINE] = 0;
usleep(15000);
fflush(stdin);
}
// if send to server successfully, commit request send
pstate=fclose(file);
strcpy(buf,COMMIT);
write(sd,buf,strlen(buf));
// send(sd,buf,sizeof(buf),0);
}
// show request
if (strstr(buf, "show") != NULL ){
strcpy(buf,SHOW);
write(sd,buf, strlen(buf));
}
// drop request
if (strstr(buf, "drop") != NULL ){
strcpy(buf,DROP);
write(sd,buf, strlen(buf));
}
// restore request
if (strstr(buf, "restore") != NULL ){
strcpy(buf,RESTORE);
write(sd,buf, strlen(buf));
}
// commit request
if (strstr(buf, "commit") != NULL ){
strcpy(buf,DISK);
write(sd,buf, strlen(buf));
}
// search id
if (strstr(buf, "search") != NULL ){
strcpy(buf,SEARCH);
write(sd,buf, strlen(buf));
printf(" Search dxpid : ");
scanf("%s",search_id);
strcpy(buf,search_id);
write(sd,buf, strlen(buf));
}
// send query
if (strstr(buf, "sql") != NULL ){
strcpy(buf,SQL);
write(sd,buf, strlen(buf));
printf("SQL >> ");
fgets(query,BUFSIZE,stdin);
strcpy(buf,query);
write(sd,buf, strlen(buf));
}
// exit from server and client
if (strstr(buf, EXIT_STRING) != NULL ) {
puts("Good bye.");
exits = true;
break;
}
} // end of while
} // end of whie 1
return 0;
}
int recv_and_print(int sd) {
char buf[MAXLINE];
int nbyte;
act.sa_handler = catch_sigint;
sigaction(SIGUSR1,&act,NULL);
sigaction(SIGINT,&act,NULL);
while(1) {
memset(&buf,0,BUFSIZE);
if( (nbyte=recv(sd, buf, BUFSIZE,0))<0) {
perror("read fail");
close(sd);
exit(0);
}
buf[nbyte] = 0;
// exit
if (strstr(buf, EXIT_STRING) != NULL )
break;
printf("%s", buf); // print
}
return 0;
}
import java.util.List; import java.util.LinkedList; import java.util.Iterator; import java.util.ListIterator; import java.util.Collections; import java.util.Random; public class LinkedListExample { public static void main(String[] args) { // LinkedList Creation List linkedListA = new LinkedList(); List linkedListB = new LinkedList(); // Adding elements to the LinkedList for (int i = 0; i < 5; i++) { linkedListA.add(new Integer(i)); } linkedListB.add("beginner"); linkedListB.add("java"); linkedListB.add("tutorial"); linkedListB.add("."); linkedListB.add("com"); linkedListB.add("java"); linkedListB.add("site"); // Iterating through the LinkedList to display the Contents. Iterator i1 = linkedListA.iterator(); System.out.print("LinkedList linkedListA --> "); while (i1.hasNext()) { System.out.print(i1.next() + " , "); } System.out.println(); System.out.print("LinkedList linkedListA --> "); for (int j = 0; j < linkedListA.size(); j++) { System.out.print(linkedListA.get(j) + " , "); } System.out.println(); Iterator i2 = linkedListB.iterator(); System.out.println("LinkedList linkedListB --> "); while (i2.hasNext()) { System.out.print(i2.next() + " , "); } System.out.println(); System.out.println(); System.out .println("Using ListIterator to retrieve LinkedList Elements"); System.out.println(); ListIterator li1 = linkedListA.listIterator(); // next(), hasPrevious(), hasNext(), hasNext() nextIndex() can be used with a // ListIterator interface implementation System.out.println("LinkedList linkedListA --> "); while (li1.hasNext()) { System.out.print(li1.next() + " , "); } System.out.println(); // Searching for an element in the LinkedList int index = linkedListB.indexOf("java"); System.out.println("'java' was found at : " + index); int lastIndex = linkedListB.lastIndexOf("java"); System.out.println("'java' was found at : " + lastIndex + " from the last"); System.out.println(); // Getting the subList from the original List List subList = linkedListA.subList(3, linkedListA.size()); System.out.println("New Sub-List(linkedListA) from index 3 to " + linkedListA.size() + ": " + subList); System.out.println(); // Sort an LinkedList System.out.print("Sorted LinkedList linkedListA --> "); Collections.sort(linkedListA); System.out.print(linkedListA); System.out.println(); // Reversing an LinkedList System.out.print("Reversed LinkedList linkedListA --> "); Collections.reverse(linkedListA); System.out.println(linkedListA); System.out.println(); // Checking emptyness of an LinkedList System.out.println("Is linkedListA empty? " + linkedListA.isEmpty()); System.out.println(); // Checking for Equality of LinkedLists LinkedList LinkedListC = new LinkedList(linkedListA); System.out.println("linkedListA.equals(LinkedListC)? " + linkedListA.equals(LinkedListC)); System.out.println(); // Shuffling the elements of an LinkedList in Random Order Collections.shuffle(linkedListA, new Random()); System.out .print("LinkedList linkedListA after shuffling its elements--> "); i1 = linkedListA.iterator(); while (i1.hasNext()) { System.out.print(i1.next() + " , "); } System.out.println(); System.out.println(); // Converting an LinkedList to an Array Object[] array = linkedListA.toArray(); for (int i = 0; i < array.length; i++) { System.out.println("Array Element [" + i + "] = " + array[i]); } System.out.println(); // Clearing LinkedList Elements linkedListA.clear(); System.out.println("linkedListA after clearing : " + linkedListA); System.out.println(); } }
Output
LinkedList linkedListA --> 0 , 1 , 2 , 3 , 4 ,
LinkedList linkedListA --> 0 , 1 , 2 , 3 , 4 ,
LinkedList linkedListB -->
beginner , java , tutorial , . , com , java , site ,
Using ListIterator to retrieve LinkedList Elements
LinkedList linkedListA -->
0 , 1 , 2 , 3 , 4 ,
'java' was found at : 1
'java' was found at : 5 from the last
New Sub-List(linkedListA) from index 3 to 5: [3, 4]
Sorted LinkedList linkedListA --> [0, 1, 2, 3, 4]
Reversed LinkedList linkedListA --> [4, 3, 2, 1, 0]
Is linkedListA empty? false
linkedListA.equals(LinkedListC)? true
LinkedList linkedListA after shuffling its elements--> 3 , 2 , 4 , 0 , 1 ,
Array Element [0] = 3
Array Element [1] = 2
Array Element [2] = 4
Array Element [3] = 0
Array Element [4] = 1
linkedListA after clearing : []
출처: http://www.javabeginner.com/java-linkedlist.htm
Master Thread | | pthread_create() 에 의해서 worker 생성 | +---+----+---+ worker 시작 | | | | | | | | 각각의 worker는 그들의 작업을 수행한다. | | | | +---+----+---+ worker 를 종료한다. | | pthread_join()에 의해서 worker 를 join 한다. | Master Thread
#include <stdio.h> #include <unistd.h> #include <pthread.h> void* do_loop(void *data) { int i; int me = *((int *)data); for (i = 0; i < 10; i++) { printf("%d - Got %d\n", me, i); sleep(1); } } int main() { int thr_id; pthread_t p_thread[3]; int status; int a = 1; int b = 2; int c = 3; thr_id = pthread_create(&p_thread[0], NULL, do_loop, (void *)&a); thr_id = pthread_create(&p_thread[1], NULL, do_loop, (void *)&b); thr_id = pthread_create(&p_thread[2], NULL, do_loop, (void *)&c); pthread_join(p_thread[0], (void **) &status); pthread_join(p_thread[1], (void **) &status); pthread_join(p_thread[2], (void **) &status); printf("programing is end\n"); return 0; }
[yundream@localhost test]# gcc -o thread thread.c -lpthread최초에 main() 쓰레드가 시작되고 나서 pthread_create 를 이용해서 3개의 쓰레드를 생성 시켯다. 각각의 쓰레드는 do_loop 코드를 실행한다. 쓰레드가 모든 작업을 마쳤다면, pthread_join 을 이용해서 다른 쓰레드가 종료될때까지 기다리고, 모든 쓰레드가 종료되었다면, main()쓰레드가 종료되고 프로세스는 완전히 끝나게 된다.
vi 편집기 사용법
vi 시작 | 텍스트 삭제 | ||||
| vi filename | 파일열기, 작성 |
| x | 문자 삭제 |
| vi +18 filename | 18행으로 파일 열기 |
| dw | 단어 삭제 |
| vi +/"string" fn | "string"의 처음 발생 단어부터 |
| dd | 행 삭제 |
| vi -r filename | 손상된 파일 회복 |
| D | 커서 오른쪽 행 삭제 |
| view filename | 읽기 전용으로 파일 열기 |
| :5,10 d | 5-10 번째 행 삭제 |
커서명령(이동) | 텍스트 복사 및 이동 | ||||
| h(←) | 왼쪽으로 커서 이동 |
| yy | 행 yank 또는 복사 |
| j(↓) | 아래로 커서 이동 |
| Y | 행 yank 또는 복사 |
| k(↑) | 위로 커서 이동 |
| dd | 행 삭제 |
| l(→) | 오른쪽으로 커서 이동 |
| P | yank되거나 삭제된 행 현재 행 위에 삽입 |
| w | 한 단어 오른 쪽으로 커서 이동 |
| p | yank되거나 삭제된 행 현재 행 아래에 삽입 |
| b | 한 단어 왼쪽으로 커서 이동 |
| :1,2 co 3 | 1-2행을 3행 다음으로 복사 |
| Return | 한 행 아래로 커서 이동 |
| :4,5 m 6 | 4-5행을 6행 위로 이동 |
| Back Space | 한 문자 왼쪽으로 커서 이동 | 행 번호 설정 | ||
| Space Bar | 한 문자 오른 쪽으로 커서 이동 |
| :set nu | 행 번호 표시 |
| H | 화면의 맨위로 이동 |
| :set nonu | 행 번호 숨기기 |
| M | 화면의 중간으로 이동 | 행 찾기 | ||
| L | 화면의 맨 아래로 이동 |
| G | 파일의 마지막 행으로 가기 |
| Ctrl + F | 한 화면 앞으로 이동 |
| 21G | 파일의 21번째 행을 가기 |
| Ctrl + D | 반 화면 앞으로 이동 | 탐사 및 대체 | ||
| Ctrl + B | 한 화면 뒤로 이동 |
| /string/ | string 탐색 |
| Ctrl + U | 반 화면 뒤로 이동 |
| ?string? | string 역방향 탐색 |
문자와 행 삽입 |
| n(N) | string의 다음(이전) 계속 탐색 | ||
| a | 커서 오른쪽에 문자 삽입 |
| :g/search-string/s//replace-string/gc | |
| A | 커서 오른쪽, 행의 끝에 문자 삽입 |
|
| 각 발생 탐색 후 확인하고 대체 |
| i | 커서 왼쪽에 문자 삽입 |
| :s/srt/rep | 현재 행의 str을 rep로 대체 |
| I | 커서 왼쪽, 행의 처음에 문자 삽입 |
| :1,.s/str/rep/ | 1부터 현재 행의 str을 rep로 대체 |
| o | 커서 아래에 행 삽입 |
| :%s/str/rep/g | 파일 전체 str을 rep로 전부 대체 |
| O | 커서 위에 행 삽입 |
|
|
|
텍스트 변경 | 화면정리 | ||||
| cw (종료:ESC) | 단어변경 |
| :Ctrl-1 | 불필요한 화면정리 후 다시 표시 |
| cc (종료:ESC) | 행 변경 | 파일을 파일로 삽입 | ||
| C (종료:ESC) | 커서 오른쪽의 행 변경 |
| :r filename | 커서 다음에 파일 삽입 |
| s (종료:ESC) | 커서가 위치한 문자열 대체 |
| :34 r filename | 파일을 34번째 행 다음에 삽입 |
| r | 커서 위치의 문자를 다른 문자로 대체 | 보관 및 종료 | ||
| r - Return | 행 분리 |
| :w | 변경사항 보관 |
| J | 현재 행과 아래 행 결합 |
| :w filename | 버퍼를 파일로 보관 |
| xp | 커서 위치 문자와 오른쪽 문자 교환 |
| :wq | 변경사항 보관 후 vi 종료 |
| ~ | 문자형(대.소문자)변경 |
| ZZ | 변경사항 보관 후 vi 종료 |
| u | 이전 명령 취소 |
| :q! | 변경사항 보관하지 않고 종료 |
| U | 행 변경 사항 취소 |
|
|
|
| :u | 이전의 최종 행 취소 |
|
|
|
| . | 이전 최종 명령 반복 |
|
|
|
$ svn checkout svn://svn.berlios.de/linux-uvc/linux-uvc/trunk
$ cd trunk
$ make ; make install
If you have to reset you cam for any reason, do:
unplug your cam
depmod
modprobe -r uvcvideo
modprobe -r snd_usb_audio
replug your cam
(not sure if step 1 and 4 are really necessary, or if 2 and 3 would be sufficient)
Noob question
Hi there. I've downloaded the subversion repository, run make and make install. How do I get Linux to "see" and use this new driver? I'm running Ubuntu 7.10 at present. /dev/video0 does not exist yet. I've been reading through the driver instructions but I don't know how to create /dev/video0 and link it to the driver. Thanks for any help. BTW, lsusb does not at present see the camera, but it is seen in the device manager. Ubuntu 7.10 seems to come with the uvcvideo driver preinstalled:
locate uvcvideo
/lib/modules/2.6.22-10-generic/ubuntu/media/usbvideo/uvcvideo.ko
/lib/modules/2.6.22-11-generic/ubuntu/media/usbvideo/uvcvideo.ko
/lib/modules/2.6.22-11-generic/kernel/ubuntu/media/usbvideo/uvcvideo.ko
this location is difference [fedora 8]
cp /lib/modules/2.6.23.1-49.fc8/uvcvideo.ko
cp /lib/modules/2.6.23.1-49.fc8/updates/uvcvideo.ko
and .. make again
$ make ; make install
$ modprobe -r uvcvideo
case error : invaild format
and then
$ depmod
$ modprobe -f uvcvideo
------------------------------------------------------------------------
http://linux-uvc.berlios.de/
http://openfacts.berlios.de/index-en.phtml?title=Linux+UVC
1. Flag 에 의한 Interrupt
public static void main(String[] args) { ThreadStart threads = new ThreadStart(); // 스레드 생성Thread thread = new Thread(threads);thread.start(); // 스레드 시작// TODO ...threads.stop(); // 스레드 종료}
class ThreadStart implements Runnable {
private boolean interruption = false; // Flag
public void run(){
while (!interruption){ // Flag 가 True 때 루프를 빠져 나옴
// TODO ...
}
public void stop(){
interruption = true; // Flag 를 true 로 셋팅
}
}
2. 직접 thread.interrupt() 호출에 의한 방법
public static void main(String[] args) { ThreadStart threads = new ThreadStart(); // 스레드 생성Thread thread = new Thread(threads);thread.start(); // 스레드 시작// TODO ...thread.interrupt(); // 스레드 인터럽트호출}
class ThreadStart implements Runnable {
public void run(){
try{
while (!Thread.currentThread().isInterrupted()){
// isInterrupted() 는 스레드의 인터럽트 간섭을 확인하는 Flag
}
}catch (InterruptedException e) {}
}finally {
// TODO ...
}
3. Thread.stop,Thread.suspend
,Thread.resume 는 권장하지 않는 방식임
영 문 : http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html
한글번역본 : http://pllab.kw.ac.kr/j2seAPI/guide/misc/threadPrimitiveDeprecation.html
4. Thread 상태
file_select.java
more..
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Rectangle;
import java.io.IOException;
import java.awt.event.*;
import javax.media.*;
import javax.media.protocol.*;
import javax.tv.xlet.*;
import org.havi.ui.*;
import org.havi.ui.HStaticText;
import org.havi.ui.HDefaultTextLayoutManager;
import org.havi.ui.event.*;
import java.awt.Container.*;
import java.io.File;
public class file_select
extends HContainer {
private int focous_pos;
private MenuItemBox tempBox;
private String f_list[] = null;
public int pos;
private File f = new File("./files/");
private int itemHeight;
public file_select(){
super();
pos = 0;
setSize(720, 576);
setLocation(0,0);
f_list = f.list(null);
//int itemHeight = height/ f_list.length;
try{
for(int i = 0; i < f_list.length ; i++){
tempBox = new MenuItemBox(100,i*45+2,500,35,f_list[i]);
//tempBox.setSize(500,35);
add(tempBox);
//tempBox.setVisible(true);
}
((MenuItemBox)getComponent(0)).setFocused(true);
tempBox.setVisible(true);
setVisible(true);
}catch (NullPointerException e)
{
}
}
public String get_filename(){
return f_list[pos];
}
public void pos_up(){
f_list = f.list(null);
pos = (pos + f_list.length - 1 ) % f_list.length ;
moving();
}
public void pos_down(){
//pos--;
f_list = f.list(null);
pos = (pos + f_list.length + 1 ) % f_list.length ;
moving();
}
public void moving(){
for(int i = 0; i < f_list.length ; i++){
((MenuItemBox)getComponent(i)).setFocused(false);
tempBox.setVisible(true);
}
((MenuItemBox)getComponent(pos)).setFocused(true);
this.repaint();
}
}// class
MenuItemBox.java
more..
import java.awt.*;
public class MenuItemBox extends Component {
private int width = 0;
private int height = 0;
private boolean focused = false;
public String getname;
public MenuItemBox(int x,int y,int w, int h, String setname) {
super();
setLocation(x,y);
setSize(w,h);
width = w;
height = h;
getname = setname;
//paint(null);
//focused = focuse;
}
public void paint(Graphics g) {
g.setColor(Color.black);
g.fillRect(0,0,width,height);
if (focused) {
g.setColor(new Color(0xff, 0xff, 0xff));
g.fillRect(2,2,width-4,height-4);
g.setColor(Color.black);
} else {
g.setColor(new Color(0x55,0x55,0x55));
g.fillRect(2,2,width-4,height-4);
g.setColor(Color.white);
}
g.setFont(new Font("Tireasias",Font.PLAIN,20));
FontMetrics fm = g.getFontMetrics();
int txtHeight = fm.getHeight();
int txtWidth = fm.stringWidth(getname);
g.drawString(getname,(width-txtWidth)/2,height/2+(int)(txtHeight/3));
}
public void setFocused(boolean b) {
if (b) {
focused = true;
} else {
focused = false;
}
}
}