Presentation is loading. Please wait.

Presentation is loading. Please wait.

Unix 教學. Unix-like System Linux FreeBSD Solaris Mac OS X …

Similar presentations


Presentation on theme: "Unix 教學. Unix-like System Linux FreeBSD Solaris Mac OS X …"— 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/te chdoc/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/hi story/linux/linux.tnc.edu.tw/techdoc/shell/book1.html http://www.csie.nctu.edu.tw/~tsaiwn/course/introcs/hi story/linux/linux.tnc.edu.tw/techdoc/shell/book1.html http://linux.vbird.org/linux_basic/redhat6.1/linux_06co mmand.php http://linux.vbird.org/linux_basic/redhat6.1/linux_06co mmand.php

11 ee/edit BSD only Start ee : % ee Usage – edit mode like notepad – ESC-ENTER : save/exit

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

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 #include 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 */ } } % 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 fork() - example1

18 fork() – example2 #include 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 */ } % gcc fork2.c -o fork2 %./fork2 & [1] 16423 % my child is 36845 daemon on duty! I am the daemon! … (loop) … 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 – Command line: % g++ threads.cpp -lpthread -o threads

23 pthread() – example1 #include #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 #include 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); } pthread() – example2 void *doSomething(void *arg) { for (;;) { int tmp = *((int *)arg); cout << tmp; cout.flush(); sleep(tmp); } return NULL; }

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 the buffer is full. Consumer: Take out the numbers in the buffer, you can’t take more number out when the buffer 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 7 th. 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 #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


Download ppt "Unix 教學. Unix-like System Linux FreeBSD Solaris Mac OS X …"

Similar presentations


Ads by Google