1 / 33

Unix 教學

Unix 教學. Unix-like System. Linux FreeBSD Solaris Mac OS X …. Tools. Login in tools Putty / pietty Editor ee(Easy Editor) vi FTP tools WinSCP FileZilla Client. How to use putty/pietty?. Putty http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html Pietty

austin
Download Presentation

Unix 教學

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Unix 教學

  2. Unix-like System • Linux • FreeBSD • Solaris • Mac OS X • …

  3. Tools • Login in tools • Putty / pietty • Editor • ee(Easy Editor) • vi • FTP tools • WinSCP • FileZilla Client

  4. How to use putty/pietty? • Putty • http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html • Pietty • http://www.csie.ntu.edu.tw/~piaip/pietty/

  5. Login in • the default for SSH service is port 22 • bsd1.cs.nctu.edu.tw –bsd5.cs.nctu.edu.tw • linux1.cs.nctu.edu.tw – linux6.cs.nctu.edu.tw • …

  6. Unix-like command - Shell • Command • ls - list directory contents • mv - move files or directories • mkdir - make directories • rm - remove files or directories • cd - change directory • man - format and display the on-line manual pages • chmod - change file system modes of files and directories. • … Reference: http://www.csie.nctu.edu.tw/~tsaiwn/course/introcs/history/linux/linux.tnc.edu.tw/techdoc/shell/book1.html

  7. Unix-like command - Shell • Command • ls -a • Include directory entries whose names begin with a dot (`.'). • ls -l • (The lowercase letter ``ell''.) List files in the long format, as described in the The Long Format subsection below. • man ls

  8. Unix-like command - Shell • Command • mkdir [folder_name] (create folder) • rmdir [folder_name] (delete folder) • rm [file_name] (delete file) • mv [source] [target] (move files or folder)

  9. Unix-like command - Shell • Command • cd [directory] (change the working directory) • pwd (return working directory name) • chmod [mode] [file] (change file modes) • Mode : [user][group][guest] -rwxrwxrwx 1 user group 1 Sep 28 2010 test.txt Ex. chmod 644 test.txt -rw-r--r-- 1 user group 1 Sep 28 2010 test.txt

  10. Unix-like command - Shell • Command • man man • (format and display the on-line manual pages) • Other: • Reference: • http://www.csie.nctu.edu.tw/~tsaiwn/course/introcs/history/linux/linux.tnc.edu.tw/techdoc/shell/book1.html • http://linux.vbird.org/linux_basic/redhat6.1/linux_06command.php

  11. ee/edit • BSD only • Start ee : % ee <input filename> • Usage • edit mode like notepad • ESC-ENTER : save/exit

  12. vi • Vi editor have two modes • Command mode • Edit mode • start vi: %vi <filename> Command mode Edit mode Insert Delete Replace Copy ..... Command mode Exit Edit mode [Esc] Reference: http://www.csie.nctu.edu.tw/~tsaiwn/course/introcs/history/linux/linux.tnc.edu.tw/techdoc/vi.htm

  13. FTP - WinSCP • Add new account • 使用工作站帳號密碼 • Port 22 • SFTP

  14. FTP - FileZilla • 開啓站台管理員 • 新增站台 • 選SFTP • 登入型式(一般)

  15. Fork & thread 教學

  16. fork • fork - create a new process • The new process (child process) shall be an exact copy of the calling process (parent process) • The child process shall have a unique process ID(different parent process ID). • The return value in the child is 0,whereas the return value in the parent is the process ID of the new child. • It return only -1 when fork failed.

  17. fork() - example1 % gcc fork1.c -o fork1 % ./fork1 & [1] 16444 % my child is 16445 I am child! % ps PID TTY TIME CMD 16212 pts/18 00:00:00 tcsh 16444 pts/18 00:00:05 fork1 16445 pts/18 00:00:05 fork1 16446 pts/18 00:00:00 ps % killall -v fork1 Killed fork1(16444) with signal 15 Killed fork1(16445) with signal 15 [1] + Terminated ./fork1 #include <stdio.h> #include<stdlib.h> #include <unistd.h> int main(void) { pid_t pid; pid = fork(); switch (pid) { case -1: printf("failure!\n"); break; case 0: printf("I am child!\n"); break; default: printf("my child is %d\n",pid); break; } for (;;) { /* do something here */ } }

  18. fork() – example2 % gcc fork2.c -o fork2 % ./fork2 & [1] 16423 % my child is 36845 daemon on duty! I am the daemon! I am the daemon! … (loop) … #include <stdio.h> #include<stdlib.h> #include <unistd.h> int main(void) { pid_t pid; pid = fork(); if (pid>0) { printf("my child is %d\n",pid); printf("daemon on duty!\n"); /* do something here */ exit(0); } else if (pid<0) { printf("Can't fork!\n"); exit(-1); } for (;;) { printf("I am the daemon!\n"); usleep(300000); //sleep 0.3 seconds /* do something here */ } } Open a new window to kill it % killall -v fork2 Or Direct input in the window to kill it Hint : we can use copy-paste to do it % killall -v fork2

  19. Thread • Light weight process • Share resources • Own private data • Synchronization

  20. Pthread API • int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); • create a new thread with given attributes • int pthread_join(pthread_t thread, void **status); • suspend caller until thread argument ends • void pthread_exit(void *status); • terminate calling thread • int pthread_equal(pthread_t t1, pthread_t t2) • test if two thread IDs are to same thread • int pthread_cancel(pthread_t thread) • start cleanup and termination of given thread • int pthread_kill(pthread_t thread, int sig) • send given signal to specified thread • pthread_t pthread_self(void) • return ID of calling thread

  21. Pthread API cont. • pthread_mutex_destroy() • destroy a mutex • pthread_mutex_init() • initialise a mutex • pthread_mutex_lock() • get mutex lock blocking while already locked • pthread_mutex_trylock() • try to get mutex lock, fail if already locked • pthread_mutex_unlock() • release lock on a mutex

  22. How to create Pthread in unix-like OS? • Linux, BSD, Saloris…etc • Include: • #include <pthread.h> • Command line: • % g++ threads.cpp -lpthread -o threads

  23. pthread() – example1 #include<pthread.h> #include<stdio.h> #include <unistd.h> #define NUM_THREADS 5 void *PrintHello(void *); int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc , t; for(t=0;t<NUM_THREADS;t++) { printf("In main: creating thread %d\n", t); rc = pthread_create(&threads[t] , NULL , PrintHello , (void *)&t); usleep(1000); if(rc) { printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1); } } } void *PrintHello(void *threadid) { int tid = *((int *)threadid); printf("Hello World! thread #%d\n", tid); pthread_exit(NULL); }

  24. pthread() – example1 cont. % g++ threads1.cpp -o threads1 -lpthread % ./thread1 In main: creating thread 0 Hello World! thread #0 In main: creating thread 1 Hello World! thread #1 In main: creating thread 2 Hello World! thread #2 In main: creating thread 3 Hello World! thread #3 In main: creating thread 4 Hello World! thread #4

  25. pthread() – example2 void *doSomething(void *arg) { for (;;) { int tmp = *((int *)arg); cout << tmp; cout.flush(); sleep(tmp); } return NULL; } #include <iostream> #include <pthread.h> using namespace std; void *doSomething(void * arg); int main() { int tmp1=1, tmp2=2; pthread_t t1; if ( pthread_create(&t1, NULL, doSomething, (int *)&tmp1) != 0 ) { cout << "pthread_create() error" << endl; exit(-1); } doSomething((int *)&tmp2); }

  26. pthread() – example2 cont. % g++ threads2.cpp -o threads2 -lpthread % ./thread2 211211211211211…(loop)…

  27. Assignment

  28. 1-1: try to use fork() and Pthread • Just “rand()” two global integer between 1~10, then add them up • VER. Fork: create a child process, then child rand() int1, parent rand() int2, child add up int1 and int2(YES! communication between process!) • VER. Thread: create two threads, thread1 rand() int1,then sleep(int1), thread2 rand() int2, then sleep(int2); then main process add up int1 and int2.

  29. 1-2: producer and consumer • First,build a GLOBAL BUFFER,it’s a queue(only need FIFO array,don’t need to creat a queue) • Build a producer thread and consumer thread • Producer: put numbers by rand() into buffer,you can’t put more number when thebuffer is full. • Consumer: Take out the numbers in the buffer, you can’t take more number out when thebuffer is empty. • Print out the number and its location in buffer from Producer,and Print out the number and its location in buffer from Consumer (see textbook 7th. Edition Ch3-4)

  30. 1-2: producer and consumer • 先建立一個GLOBAL的BUFFER,它是一個queue(只需有FIFO效果的array,不用真的實作queue) • 建立producer thread與consumer thread • Producer的工作是把rand()出來的數字放入buffer中,如果buffer已經滿了就不能再放 • Consumer的工作是把buffer中的數字取出,如果buffer是空的就不能取 • 印出Producer放入幾號buffer跟放入的數字,同理consumer印出取出的數字跟buffer的號碼 • (詳見恐龍本第7版3-4)

  31. 1-2 cont. • Buffer size=5 • Number of consumer and producer =12 • Simple Output: • producer(1)-producer put [208] in buffer[0] • producer(2)-producer put [142] in buffer[1] • consumer(1)-consumer get [208] in buffer[0] is • producer(3)-producer put [66] in buffer[2] • producer(4)-producer put [241] in buffer[3] • producer(5)-producer put [164] in buffer[4] • consumer(2)-consumer get [142] in buffer[1] • producer(6)-producer put [7] in buffer[0] ……………..

  32. 1-2 cont. #include<stdio.h> #include<pthread.h> #include <time.h> #define BUFFER_SIZE 5 int buffer[BUFFER_SIZE]; void * consumer(void *argv){ for (int num=0;num<12;num++){ sleep(rand()%10); //write here } } void * producer(void *argv){ for (int num=0;num<12;num++){ sleep(rand()%5); //write here } } int main(){ int errno; srand((int)time(0)); pthread_t p_tid, c_tid; pthread_create(&c_tid, NULL, consumer, NULL); pthread_create(&p_tid, NULL, producer, NULL); pthread_join(c_tid ,NULL); pthread_join(p_tid ,NULL); }

  33. Q & A

More Related