第一篇:Linux編程培訓(xùn)哪個(gè)好
中國(guó)IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
Linux編程培訓(xùn)哪個(gè)好
想知道Linux編程培訓(xùn)哪個(gè)好?先來了解一下什么是Linux編程吧!
Linux編程,比需要了解線程的問題。線程間通信之信號(hào)量
線程的信號(hào)量主要就是實(shí)現(xiàn)對(duì)公共資源的一種控制管理。當(dāng)公共資源增加時(shí),信號(hào)量的值增加;當(dāng)公共資源減少時(shí),信號(hào)量的值減少;只有信號(hào)量的值大于0時(shí),才能訪問信號(hào)量所代表的公共資源。其實(shí)功能和之前的ucos的信號(hào)量功能類似。線程信號(hào)量初始化sem_init
intsem_init(sem_t *sem, intpshared, unsigned int value);功能介紹:
該函數(shù)主要的功能是創(chuàng)建一個(gè)信號(hào)量,設(shè)置該信號(hào)量的值,并且設(shè)置信號(hào)量的使用范圍。信號(hào)量創(chuàng)建成功后,可以對(duì)其進(jìn)行加減操作。參數(shù)說明:
千鋒教育004km.cn
中國(guó)IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
第一個(gè)參數(shù)sem是一個(gè)指向信號(hào)量結(jié)構(gòu)的指針,當(dāng)信號(hào)量初始化成功后,可以的這個(gè)信號(hào)量指針進(jìn)行加減操作;第二個(gè)參數(shù)表示信號(hào)量的共享屬性,當(dāng)其值不為0時(shí),信號(hào)量可以在進(jìn)程間共享,如果等于0,則只能在同一個(gè)進(jìn)程中的多個(gè)線程間共享;第三個(gè)參數(shù)用于設(shè)置信號(hào)量初始化時(shí)候的值。2 線程信號(hào)量增加函數(shù)sem_post
intsem_post(sem_t *sem);功能介紹:
該函數(shù)用于增加信號(hào)量的值,每次增加值為1。當(dāng)有線程在等待該信號(hào)量,則等待信號(hào)量返回,不增加信號(hào)量的值。參數(shù)說明:
sem參數(shù)是初始化時(shí)候創(chuàng)建的信號(hào)量結(jié)構(gòu)體,用于記錄信號(hào)量值得參數(shù)。3 線程信號(hào)量減少函數(shù)sem_wait
intsem_wait(sem_t *sem);功能介紹:
該函數(shù)用于減少信號(hào)量的值,每次減少值為1。當(dāng)信號(hào)量的值為0,則線程會(huì)阻塞一直等待信號(hào)量的值大于0為止,當(dāng)值為0時(shí),不在減少。參數(shù)說明:
sem參數(shù)是初始化時(shí)候創(chuàng)建的信號(hào)量結(jié)構(gòu)體。4 線程信號(hào)量的銷毀函數(shù)sem_destroy
intsem_destroy(sem_t *sem);功能介紹:
函數(shù)用于釋放創(chuàng)建的信號(hào)量。
千鋒教育004km.cn
中國(guó)IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
參數(shù)說明:
sem參數(shù)是初始化時(shí)候創(chuàng)建的信號(hào)量結(jié)構(gòu)體。
使用線程的信號(hào)量進(jìn)行通信,可以有效的對(duì)線程資源進(jìn)行合理的分配,同時(shí)可以使線程以一個(gè)合理的方式進(jìn)行調(diào)度。下面的代碼是一個(gè)小小的實(shí)例,用很常規(guī)的方法來使用信號(hào)量,當(dāng)線程獲得獲得信號(hào)量之后,在處理完相應(yīng)的操作之后會(huì)主動(dòng)的釋放掉信號(hào)量。其實(shí)可以根據(jù)信號(hào)量的wait和post自己設(shè)計(jì)使用信號(hào)量。不過需要注意的是在wait和post函數(shù)分開使用時(shí),可能會(huì)因?yàn)榫€程優(yōu)先級(jí)等問題,post和wait被調(diào)用的次數(shù)不是對(duì)等的,這時(shí)候這時(shí)候可能出現(xiàn)的問題是不可控的,在這種方式設(shè)計(jì)程序時(shí),需要把大部分的情況考慮進(jìn)去,當(dāng)然可能出現(xiàn)的情況的種數(shù)也是從0到1質(zhì)變,從1到n量變得過程。
#include sem_tsem;7 intsemValue;8 void *pthread_wait(void *argv)10 { 11 while(1) 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 { 13 sem_wait(&sem);14 sem_getvalue(&sem, &semValue);15 printf(“This is in phtread WAIT function!sem = %dn”, semValue);16 sem_post(&sem);17 sleep(1);18 } 19 pthread_exit(“exit wait pthread!n”);20 } 21 void *pthread_post(void *argv)23 { 24 while(1)25 { 26 sem_wait(&sem);27 sem_getvalue(&sem, &semValue);28 printf(“This is in phtread POST function!sem = %dn”, semValue);29 sem_post(&sem);30 sleep(1);31 } 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 pthread_exit(“exit post pthread!”);33 } 34 intmain(void)36 { 37 pthread_tpt[2];38 void *ret;39 sem_init(&sem,0,2);41 pthread_create(&pt[0], NULL, &pthread_wait, NULL);42 pthread_create(&pt[1], NULL, &pthread_post, NULL);43 pthread_join(pt[0], &ret);44 printf(“return value %s”, ret);45 pthread_join(pt[1], &ret);46 printf(“return value %s”, ret);47 return 0;49 } 上面代碼的運(yùn)行結(jié)果如下,因?yàn)槭蔷€程采用了無限循環(huán)的方式,所以pthread_exit和pthread_join不會(huì)執(zhí)行到。 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 如果將上面代碼中的第26行注釋掉,運(yùn)行結(jié)果如下,可以看到信號(hào)量的值一直在增加,就如上面提到的因?yàn)閟em_wait函數(shù)和sem_post函數(shù)不能同時(shí)使用時(shí),會(huì)出現(xiàn)一些不可控的運(yùn)行結(jié)果。也可以利用這種情況,設(shè)計(jì)程序。 以上就是千鋒Linux學(xué)院的學(xué)習(xí)筆記。另附心得體會(huì)一篇: 從零基礎(chǔ)開始學(xué)Linux或者是轉(zhuǎn)行學(xué)習(xí)Linux,參加培訓(xùn)會(huì)保證你在單位時(shí)間內(nèi)學(xué)到更多,畢竟隨著Linux行業(yè)的快速發(fā)展,未來必將會(huì)面臨更多的競(jìng)爭(zhēng),所以只有不遺余力的把自己打造成一把利劍,從專業(yè)度到職業(yè)素質(zhì),只有比別人更突出和優(yōu)秀,才能夠在這個(gè)相互選擇的世界當(dāng)中擁有更多的選擇權(quán)利?,F(xiàn)在想要學(xué)習(xí)Linux技術(shù),只有通過參加培訓(xùn)才可以保證快速掌握所學(xué)知識(shí)和技能,所 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 以培訓(xùn)是比較靠譜的。 Linux編程培訓(xùn)哪個(gè)好?千鋒教育的Linux課程專注于當(dāng)前熱門的Linux相關(guān)技術(shù),就Linux而言,內(nèi)容全面而細(xì)致的。Linux教學(xué)團(tuán)隊(duì)由眾多名師打造,擁有多年教學(xué)經(jīng)驗(yàn)和高超的Linux授課技巧和實(shí)戰(zhàn)視野,讓你理論和實(shí)戰(zhàn)兼得。 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 Linux網(wǎng)絡(luò)編程培訓(xùn)哪個(gè)好 Linux下的網(wǎng)絡(luò)編程培訓(xùn)哪個(gè)好?先來了解一下什么事Linux下的網(wǎng)絡(luò)編程吧! Linux下的網(wǎng)絡(luò)編程指的是socket套接字編程,入門比較簡(jiǎn)單。在學(xué)校里學(xué)過一些皮毛,平時(shí)就是自學(xué)玩,沒有見識(shí)過真正的socket編程大程序,比較遺憾??偢杏X每次看的時(shí)候都有收獲,但是每次看完了之后,過段時(shí)間不看,重新拾起這些知識(shí)的時(shí)候又要從頭開始,所以,在這里做個(gè)筆記也算是做個(gè)模板,以后可以直接從某一個(gè)階段開始接著玩…… socket套接字基本函數(shù)介紹 1 創(chuàng)建socket套接字 int socket(int family, int type, int protocol);功能介紹: 在Linux操作系統(tǒng)中,一切皆文件,這個(gè)大家都知道,個(gè)人理解創(chuàng)建socket的過程其實(shí)就是一個(gè)獲得文件描述符的過程,當(dāng)然這個(gè)過程會(huì)是比較復(fù)雜的??梢詮膬?nèi)核中找到創(chuàng)建socket的代碼,并且socket的創(chuàng)建和其他的listen,bind等操作分離開來。socket函數(shù)完成正確的操作是返回值大于0的文件描述符,當(dāng)返回小于0的值時(shí),操作錯(cuò)誤。同樣是返回一個(gè)文件描述符,但是會(huì)因?yàn)槿齻€(gè)參數(shù)組合不同,對(duì)于數(shù)據(jù)具體的工作流程不同,對(duì)于應(yīng)用層編程來說,這些也是不可見的。參數(shù)說明: 從socket創(chuàng)建的函數(shù)可以看出,socket有三個(gè)參數(shù),family代表一個(gè)協(xié) 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 議族,比較熟知的就是AF_INET,PF_PACKET等;第二個(gè)參數(shù)是協(xié)議類型,常見類型是SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_PACKET等;第三個(gè)參數(shù)是具體的協(xié)議,對(duì)于標(biāo)準(zhǔn)套接字來說,其值是0,對(duì)于原始套接字來說就是具體的協(xié)議值。2 地址端口綁定函數(shù)bind int bind(intsockfd, conststructsockaddr *myaddr, socklen_taddrlen);功能介紹: bind函數(shù)主要應(yīng)用于服務(wù)器模式一端,其主要的功能是將addrlen長(zhǎng)度 structsockaddr類型的myaddr地址與sockfd文件描述符綁定到一起,在sockaddr中主要包含服務(wù)器端的協(xié)議族類型,網(wǎng)絡(luò)地址和端口號(hào)等。在客戶端模式中不需要使用bind函數(shù)。當(dāng)bind函數(shù)返回0時(shí),為正確綁定,返回-1,則為綁定失敗。參數(shù)說明: bind函數(shù)的第一個(gè)參數(shù)sockfd是在創(chuàng)建socket套接字時(shí)返回的文件描述符。 bind函數(shù)的第二個(gè)參數(shù)是structsockaddr類型的數(shù)據(jù)結(jié)構(gòu),由于structsockaddr數(shù)據(jù)結(jié)構(gòu)類型不方便設(shè)置,所以通常會(huì)通過對(duì)tructsockaddr_in進(jìn)行地質(zhì)結(jié)構(gòu)設(shè)置,然后進(jìn)行強(qiáng)制類型轉(zhuǎn)換成structsockaddr類型的數(shù)據(jù),下面是兩種類型數(shù)據(jù)結(jié)構(gòu)的定義和對(duì)應(yīng)關(guān)系圖。 typedef unsigned short sa_family_t;structin_addr { __be32 s_addr; 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 }; structsockaddr { sa_family_tsa_family; /* address family, AF_xxx */ charsa_data[14]; /* 14 bytes of protocol address */ }; /* Structure describing an Internet(IP)socket address.*/ #define __SOCK_SIZE__ /* sizeof(structsockaddr) */ structsockaddr_in { sa_family_tsin_family; /* Address family */ __be16 sin_port; /* Port number */ structin_addrsin_addr; /* Internet address */ /* */ unsigned char __pad[__SOCK_SIZE__sizeof(unsigned short int)-sizeof(structin_addr)];}; 千鋒教育004km.cn Pad to size of `structsockaddr'.中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 圖5 structsockaddr_in和structsockaddr的映射關(guān)系 bind函數(shù)的第三個(gè)參數(shù)是指定structsockaddr類型數(shù)據(jù)的長(zhǎng)度,因?yàn)榍懊嬷v過bind函數(shù)的第二個(gè)參數(shù)是通過設(shè)置一個(gè)較容易的數(shù)據(jù)結(jié)構(gòu),然后通過強(qiáng)制類型轉(zhuǎn)換成structsockaddr,實(shí)際上,第二個(gè)參數(shù)具體的數(shù)據(jù)結(jié)構(gòu)的長(zhǎng)度會(huì)根據(jù)socket創(chuàng)建時(shí),設(shè)置的family協(xié)議族的不同而不同,像AF_UNIX協(xié)議族的bind函數(shù)第二個(gè)參數(shù)的數(shù)據(jù)結(jié)構(gòu)應(yīng)該是structsockaddr_un,其大小和structsockaddr_in不同。3 監(jiān)聽本地端口listen int listen(intsockfd, int backlog);功能介紹: 剛開始理解listen函數(shù)會(huì)有一個(gè)誤區(qū),就是認(rèn)為其操作是在等在一個(gè)新的connect的到來,其實(shí)不是這樣的,真正等待connect的是accept操作,listen的操作就是當(dāng)有較多的client發(fā)起connect時(shí),server端不能及時(shí)的處理已經(jīng)建立的連接,這時(shí)就會(huì)將connect連接放在等待隊(duì)列中緩存起來。這個(gè)等待隊(duì)列的長(zhǎng)度有l(wèi)isten中的backlog參數(shù)來設(shè)定。listen和accept函數(shù)是服務(wù)器模 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 式特有的函數(shù),客戶端不需要這個(gè)函數(shù)。當(dāng)listen運(yùn)行成功時(shí),返回0;運(yùn)行失敗時(shí),返回值位-1.參數(shù)說明: sockfd是前面socket創(chuàng)建的文件描述符;backlog是指server端可以緩存連接的最大個(gè)數(shù),也就是等待隊(duì)列的長(zhǎng)度。4 接受網(wǎng)絡(luò)請(qǐng)求函數(shù)accept int accept(intsockfd, structsockaddr *client_addr, socklen_t *len);功能介紹: 接受函數(shù)accept其實(shí)并不是真正的接受,而是客戶端向服務(wù)器端監(jiān)聽端口發(fā)起的連接。對(duì)于TCP來說,accept從阻塞狀態(tài)返回的時(shí)候,已經(jīng)完成了三次握手的操作。Accept其實(shí)是取了一個(gè)已經(jīng)處于connected狀態(tài)的連接,然后把對(duì)方的協(xié)議族,網(wǎng)絡(luò)地址以及端口都存在了client_addr中,返回一個(gè)用于操作的新的文件描述符,該文件描述符表示客戶端與服務(wù)器端的連接,通過對(duì)該文件描述符操作,可以向client端發(fā)送和接收數(shù)據(jù)。同時(shí)之前socket創(chuàng)建的sockfd,則繼續(xù)監(jiān)聽有沒有新的連接到達(dá)本地端口。返回大于0的文件描述符則表示accept成功,否則失敗。參數(shù)說明: sockfd是socket創(chuàng)建的文件描述符;client_addr是本地服務(wù)器端的一個(gè)structsockaddr類型的變量,用于存放新連接的協(xié)議族,網(wǎng)絡(luò)地址以及端口號(hào)等;第三個(gè)參數(shù)len是第二個(gè)參數(shù)所指內(nèi)容的長(zhǎng)度,對(duì)于TCP來說其值可以用sizeof(structsockaddr_in)來計(jì)算大小,說要說明的是accept的第三個(gè)參數(shù)要是指針的形式,因?yàn)檫@個(gè)值是要傳給協(xié)議棧使用的。 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 連接目標(biāo)服務(wù)器函數(shù)connect int connect(intsock_fd, structsockaddr *serv_addr,intaddrlen);功能介紹: 連接函數(shù)connect是屬于client端的操作函數(shù),其目的是向服務(wù)器端發(fā)送連接請(qǐng)求,這也是從客戶端發(fā)起TCP三次握手請(qǐng)求的開始,服務(wù)器端的協(xié)議族,網(wǎng)絡(luò)地址以及端口都會(huì)填充到connect函數(shù)的serv_addr地址當(dāng)中。當(dāng)connect返回0時(shí)說明已經(jīng)connect成功,返回值是-1時(shí),表示connect失敗。參數(shù)說明: connect的第一個(gè)參數(shù)是socket創(chuàng)建的文件描述符;第二個(gè)參數(shù)是一個(gè)structsockaddr類型的指針,這個(gè)參數(shù)中設(shè)置的是要連接的目標(biāo)服務(wù)器的協(xié)議族,網(wǎng)絡(luò)地址以及端口號(hào);第三個(gè)參數(shù)表示第二個(gè)參數(shù)內(nèi)容的大小,與accept不同,這個(gè)值不是一個(gè)指針。 在服務(wù)器端和客戶端建立連接之后是進(jìn)行數(shù)據(jù)間的發(fā)送和接收,主要使用的接收函數(shù)是recv和read,發(fā)送函數(shù)是send和write。因?yàn)閷?duì)于socket套接字來說,最終實(shí)際操作的是文件描述符,所以可以使用對(duì)文件進(jìn)行操作的接收和發(fā)送函數(shù)對(duì)socket套接字進(jìn)行操作。對(duì)于UDP編程來說,其服務(wù)器端和客戶端之間沒有三次握手建立連接,所以服務(wù)器端沒有l(wèi)isten和accept函數(shù),客戶端沒有connect函數(shù)。所以對(duì)于服務(wù)器端來說,沒有accept函數(shù),所以使用recvfrom函數(shù)來獲取數(shù)據(jù)的同時(shí)獲得客戶端的協(xié)議族,網(wǎng)絡(luò)地址以及端口號(hào);對(duì)于客戶端來說,沒有connect函數(shù),所以使用sendto函數(shù)發(fā)送數(shù)據(jù)的同時(shí)設(shè)置服務(wù)器端的協(xié)議族,網(wǎng)絡(luò)地址以及端口;同理如果recvfrom用在客戶端,則 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 是接收服務(wù)器端數(shù)據(jù)和地址,sendto用在服務(wù)器端,則是發(fā)送到客戶端網(wǎng)絡(luò)地址以及端口數(shù)據(jù)。6 接收數(shù)據(jù)函數(shù)recvfrom ssize_trecvfrom(intsockfd, void *buf, size_tlen, int flags, structsockaddr *from, socklen_t *fromlen);功能介紹: 對(duì)于該函數(shù)主要的功能是,從客戶端或者服務(wù)器端接收數(shù)據(jù)以及發(fā)送方的地址信息存儲(chǔ)到本地的structsockaddr類型參數(shù)變量當(dāng)中,如果函數(shù)返回-1,所說明接收數(shù)據(jù)失敗,如果返回的是大于等于0的值,則說明函數(shù)接收到的數(shù)據(jù)的大小。因?yàn)榭梢栽O(shè)置文件描述符的狀態(tài)為阻塞模式,所以在沒有接收到數(shù)據(jù)時(shí),recvfrom會(huì)一直處于阻塞狀態(tài),直到有數(shù)據(jù)接收到。參數(shù)說明: sockfd是創(chuàng)建socket時(shí)的文件描述符;buf用于存儲(chǔ)接收到的數(shù)據(jù)緩沖區(qū),接收的數(shù)據(jù)將放到這個(gè)指針?biāo)赶虻膬?nèi)容的空間中;len是接收緩沖區(qū)的大?。籪rom是指向structsockaddr的指針,接收發(fā)送方地址信息;fromlen是表示第5個(gè)參數(shù)所指向內(nèi)容的長(zhǎng)度,可以使用sizeof(structsockaddr)來定義大小,不過因?yàn)槭且獋鹘o內(nèi)核協(xié)議棧,所以使用了指針類型。7 發(fā)送數(shù)據(jù)函數(shù)sendto sizeof_tsendto(intsockfd, const void *buf, size_tlen, int flag, conststructsockaddr *to, socklen_ttolen);功能介紹: sendto函數(shù)主要根據(jù)填充的接收方的地址信息向客戶端或者服務(wù)器端發(fā) 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 送數(shù)據(jù),接收方的地址信息會(huì)提前設(shè)置在structsockaddr類型的參數(shù)指針中,當(dāng)返回值-1時(shí),表明發(fā)送失敗,當(dāng)返回值大于等于0時(shí),表示發(fā)送成功,并且發(fā)送數(shù)據(jù)的大小會(huì)通過返回值傳遞回來。參數(shù)說明: sockfd是有socket創(chuàng)建的文件描述符;buf是發(fā)送數(shù)據(jù)緩沖區(qū),要發(fā)送的數(shù)據(jù)會(huì)放在這個(gè)指針指向的內(nèi)容空間中;len是發(fā)送緩沖區(qū)的大?。籺o是一個(gè)structsockaddr類型的指針,其指向地址的內(nèi)容是接收方地址信息;tolen表示第5個(gè)參數(shù)指向的數(shù)據(jù)內(nèi)容的長(zhǎng)度,傳遞的是值,可以用sizeof(structsockaddr)計(jì)算。 以上就是千鋒Linux學(xué)院的學(xué)習(xí)筆記。另附心得體會(huì)一篇: 從零基礎(chǔ)開始學(xué)Linux或者是轉(zhuǎn)行學(xué)習(xí)Linux,參加培訓(xùn)會(huì)保證你在單位時(shí)間內(nèi)學(xué)到更多,畢竟隨著Linux行業(yè)的快速發(fā)展,未來必將會(huì)面臨更多的競(jìng)爭(zhēng),所以只有不遺余力的把自己打造成一把利劍,從專業(yè)度到職業(yè)素質(zhì),只有比別人更突出和優(yōu)秀,才能夠在這個(gè)相互選擇的世界當(dāng)中擁有更多的選擇權(quán)利?,F(xiàn)在想要學(xué)習(xí)Linux技術(shù),只有通過參加培訓(xùn)才可以保證快速掌握所學(xué)知識(shí)和技能,所以培訓(xùn)是比較靠譜的。 Linux下的網(wǎng)絡(luò)編程培訓(xùn)哪個(gè)好?千鋒教育的Linux課程專注于當(dāng)前熱門的Linux相關(guān)技術(shù),就Linux而言,內(nèi)容全面而細(xì)致的。Linux教學(xué)團(tuán)隊(duì)由眾多名師打造,擁有多年教學(xué)經(jīng)驗(yàn)和高超的Linux授課技巧和實(shí)戰(zhàn)視野,讓你理論和實(shí)戰(zhàn)兼得。 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 學(xué)習(xí)Linux編程哪個(gè)好 想知道Linux編程培訓(xùn)哪家好?先來了解一下什么是Linux編程吧!Linux下的網(wǎng)絡(luò)編程指的是socket套接字編程,入門比較簡(jiǎn)單。在學(xué)校里學(xué)過一些皮毛,平時(shí)就是自學(xué)玩,沒有見識(shí)過真正的socket編程大程序,比較遺憾??偢杏X每次看的時(shí)候都有收獲,但是每次看完了之后,過段時(shí)間不看,重新拾起這些知識(shí)的時(shí)候又要從頭開始,所以,在這里做個(gè)筆記也算是做個(gè)模板,以后可以直接從某一個(gè)階段開始接著玩…… IO復(fù)用之select函數(shù) select函數(shù)用于IO復(fù)用,它用于監(jiān)視多個(gè)文件描述符集合,看規(guī)定時(shí)間內(nèi)有沒有事件產(chǎn)生。 int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout);功能介紹: 該函數(shù)主要的功能是對(duì)需要操作的文件描述符集合進(jìn)行查詢,目標(biāo)文件描述符中有可以讀,寫或者異常錯(cuò)誤操作的情況時(shí),會(huì)返回一個(gè)大于0的整數(shù)值,表示可以對(duì)該文件描述符進(jìn)行操作。select函數(shù)返回0,表示超時(shí);返回-1,表示發(fā)生錯(cuò)誤;返回大于0的整數(shù)值,表示有符合要求的文件描述事件產(chǎn)生。當(dāng)不需要監(jiān)視某種文件描述符時(shí),設(shè)置參數(shù)為NULL。參數(shù)說明: nfds:是一個(gè)整型變量,其值是加入到后面三個(gè)文件描述符集合中的最大文件描 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 述符的值加1。 readfds:可讀文件描述符集合,通過FD_SET向該文件描述符集合中加入需要監(jiān)視的目標(biāo)文件描述符,當(dāng)有符合要求的文件描述符時(shí),select會(huì)返回一個(gè)大于0的值,同時(shí)會(huì)把原來集合中的不可讀的文件描述符清掉,如果想在次監(jiān)視可讀文件描述,需要重新FD_SET。 writefds:可寫文件描述符集合,同樣通過FD_SET函數(shù)向結(jié)合中加入需要被監(jiān)視的目標(biāo)文件描述符,select返回時(shí),同樣會(huì)把不可寫文件描述符清掉,如果需要重新監(jiān)視文件描述符,需要重新FD_SET設(shè)置。 exceptfds:該描述符集合是用于監(jiān)視文件描述符集合中的任何文件是否發(fā)生錯(cuò)誤。 timeout:用于設(shè)置超時(shí)的最長(zhǎng)等待時(shí)間,如果在該規(guī)定時(shí)間內(nèi)沒有返回一個(gè)大于0的值,則返回0,表示超時(shí)。如果超時(shí)間設(shè)置為NULL,表示阻塞等待,直到符合條件的文件描述符在集合中出現(xiàn),當(dāng)timeout的值為0時(shí),select會(huì)立即返回。 timeout的數(shù)據(jù)結(jié)構(gòu)如下: struct timeval { time_t tv_sec; /*秒*/ long tv_usec; /*微秒*/ };有4個(gè)宏可以操作文件描述符集合: FD_ZERO: 用于清空文件描述符集合,F(xiàn)D_ZERO(&fds)。 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 FD_SET:向某個(gè)文件描述符結(jié)合中加入文件描述符, FD_SET(fd, &fds)。FD_CLR:從某個(gè)文件描述符結(jié)合中取出某個(gè)文件描述符, FD_CLR(fd, &fds)。FD_ISSET:測(cè)試某個(gè)文件描述符是否在某個(gè)文件描述符集合中, FD_ISSET(fd, &fds)。 下面是本實(shí)用socket編程,并且利用select IO實(shí)現(xiàn)的一個(gè)server和client實(shí)時(shí)通信的例子,為了顯示更直觀,加了一些打印以及接收數(shù)據(jù)上的操作,程序還有bug,希望閱讀的人不要介意,或者自行修改。代碼如下,可以作為學(xué)習(xí)socket和select的一個(gè)實(shí)例。server.c文件源碼如下: #include int main(void)13 { 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 int sockfd, clientfd; struct sockaddr_in sockServer, sockClient;16 struct timeval tv;17 fd_set readfds, writefds;18 int readlen, writelen;19 char buffer[SIZE];20 sockfd = socket(AF_INET, SOCK_STREAM, 0);22 if(sockfd < 0)23 { 24 perror(“create socket failed!n”);25 return-1;26 } 27 bzero(&sockServer, 0);29 sockServer.sin_family = AF_INET;30 sockServer.sin_port = htons(SPORT);31 sockServer.sin_addr.s_addr = htonl(INADDR_ANY);32 if(bind(sockfd,(struct sockaddr *)&sockServer, sizeof(struct sockaddr_in))< 0)34 { 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 perror(“bind socket failed!n”);36 return-1;37 } 38 if(listen(sockfd, BACKLOG)< 0)40 { 41 perror(“l(fā)isten failed!n”);42 } 43 printf(“Server is listening......n”);45 while(1)47 { 48 int len = sizeof(struct sockaddr_in);49 int ret;50 time_t timet;51 clientfd = accept(sockfd,(struct sockaddr *)&sockClient, &len);53 if(clientfd < 0)54 { 55 perror(“accept failed!n”); 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 return-1;57 } 58 for(;;)60 { 61 FD_ZERO(&readfds);FD_SET(1, &readfds);FD_SET(clientfd, &readfds);tv.tv_usec = 0;tv.tv_sec = 60; ret = select(clientfd+1, &readfds, NULL, NULL, &tv);switch(ret){ case 0: printf(“select timeout!n”); break; case-1: perror(“select return failed!n”); goto closesocket; default: if(FD_ISSET(clientfd, &readfds)> 0) 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 { 79 memset(buffer, 0, SIZE);80 readlen = read(clientfd, buffer, SIZE);81 if(readlen < 0)82 { 83 ctime(&timet));88 perror(“read data failed!n”); goto closesocket; } time(&timet); printf(“Opposite: %d %s”, clientfd,strcat(buffer, “n”); writelen = write(0, buffer, readlen+1); if(writelen < 0) { perror(“write data failed!n”); goto closesocket; } } if(FD_ISSET(1, &readfds)> 0){ time(&timet); 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 printf(“Owner: %d %sn”, sockfd, ctime(&timet));100 memset(buffer, 0, SIZE);101 readlen = read(1, buffer, SIZE);102 if(readlen < 0)103 112 113 } 114 } 115 } 116 closesocket: 117 close(clientfd);118 } 119 close(sockfd); { perror(“read data failed!n”); goto closesocket;} writelen = write(clientfd, buffer, readlen);if(writelen < 0){ perror(“write data failed!n”); goto closesocket;} 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 120 121 return 0;122 } client.c文件源碼如下: #include int main(void)12 { 13 int sockfd, clientfd; struct sockaddr_in sockServer;15 struct timeval tv;16 fd_set readfds;17 int readlen, writelen; 精品課程 全程面授 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 char buffer[SIZE];19 time_t timet;20 sockfd = socket(AF_INET, SOCK_STREAM, 0);22 if(sockfd < 0)23 { 24 perror(“create socket failed!n”);25 return-1;26 } 27 bzero(&sockServer, 0);29 sockServer.sin_family = AF_INET;30 sockServer.sin_port = htons(SPORT);31 sockServer.sin_addr.s_addr = htonl(INADDR_ANY);32 if(connect(sockfd,(struct sockaddr *)&sockServer, sizeof(struct sockaddr_in))< 0)34 { 35 perror(“connect failed!n”);36 close(sockfd);37 } 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 while(1)40 { 41 int ret;42 FD_ZERO(&readfds);44 FD_SET(1, &readfds);45 FD_SET(sockfd, &readfds);46 tv.tv_usec = 0;47 tv.tv_sec = 60;48 ret = select(sockfd+1, &readfds, NULL, NULL, &tv);50 switch(ret)51 { 52 case 0: 53 printf(“select timeout!n”);54 break;55 case-1: 56 perror(“select return failed!n”);57 goto closesocket;58 default: 59 if(FD_ISSET(sockfd, &readfds)> 0)60 { 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 memset(buffer, 0, SIZE);62 readlen = read(sockfd, buffer, SIZE);63 if(readlen < 0)64 { 65 perror(“read data failed!n”);66 ctime(&timet));70 goto closesocket; } time(&timet); printf(“Opposite: %s %s”, “Server”,strcat(buffer, “n”); writelen = write(0, buffer, readlen + 1); if(writelen < 0) { perror(“write data failed!n”); goto closesocket; } } if(FD_ISSET(1, &readfds)> 0){ time(&timet); printf(“Owner: %d %sn”, sockfd,千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 ctime(&timet));82 memset(buffer, 0, SIZE);83 readlen = read(1, buffer, SIZE);84 if(readlen < 0)85 { 86 perror(“read data failed!n”);87 goto closesocket;88 } 89 writelen = write(sockfd, buffer, readlen);90 if(writelen < 0)91 { 92 perror(“write data failed!n”);93 goto closesocket;94 } 95 } 96 } 97 closesocket: 99 close(clientfd);100 } 101 close(sockfd);102 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 return 0;104 } 運(yùn)行結(jié)果如下所示: 以上就是千鋒Linux學(xué)院的學(xué)習(xí)筆記。另附心得體會(huì)一篇: 從零基礎(chǔ)開始學(xué)Linux或者是轉(zhuǎn)行學(xué)習(xí)Linux,參加培訓(xùn)會(huì)保證你在單位時(shí)間內(nèi)學(xué)到更多,畢竟隨著Linux行業(yè)的快速發(fā)展,未來必將會(huì)面臨更多的競(jìng)爭(zhēng),所以只有不遺余力的把自己打造成一把利劍,從專業(yè)度到職業(yè)素質(zhì),只有比別人更突出和優(yōu)秀,才能夠在這個(gè)相互選擇的世界當(dāng)中擁有更多的選擇權(quán)利?,F(xiàn)在想要學(xué)習(xí)Linux技術(shù),只有通過參加培訓(xùn)才可以保證快速掌握所學(xué)知識(shí)和技能,所以培訓(xùn)是比較靠譜的。 學(xué)習(xí)Linux編程哪個(gè)好?千鋒教育的Linux課程專注于當(dāng)前熱門的Linux相關(guān)技術(shù),就Linux而言,內(nèi)容全面而細(xì)致的。Linux教學(xué)團(tuán)隊(duì)由眾多名師打造,擁有多年教學(xué)經(jīng)驗(yàn)和高超的Linux授課技巧和實(shí)戰(zhàn)視野,讓你理論和實(shí)戰(zhàn)兼得。 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 千鋒教育004km.cn 英語口語培訓(xùn)機(jī)構(gòu)哪個(gè)好及外教費(fèi)用 外教公司哪家好? 外教公司可分為為學(xué)校公司服務(wù)的以及為個(gè)人服務(wù)的外教公司。有些學(xué)校在把英語外教課程外包給某家外教公司的越來越多,這樣學(xué)習(xí)省去了招聘外教,辦理手續(xù)等繁雜的工作,而且教學(xué)的專業(yè)化程度會(huì)更高一些,但是北京市場(chǎng)上由于各方面的原因沒有幾家資深為學(xué)習(xí)服務(wù)的外教公司。 為個(gè)人服務(wù)的外教公司已經(jīng)和英語培訓(xùn)公司非常的接近,只是不提供硬性的教學(xué)設(shè)施例如教室。但是如果可以在家里或公共地點(diǎn)上課的同學(xué)來說是個(gè)非常不錯(cuò)的選擇。不僅降低了學(xué)費(fèi)的成本,而且能節(jié)省很多的上課路上奔波的時(shí)間。北京市場(chǎng)上提高此類服務(wù)的公司比較典型的是速恩英語,對(duì)教師資質(zhì)要求比較高而且課時(shí)費(fèi)可以按次結(jié)算。 外教價(jià)格/外教費(fèi)用是多少? 是和很多因素相關(guān)的,例如外教老師的資質(zhì),外教上課的地點(diǎn):外教上門和在公共地點(diǎn)上課費(fèi)是不一樣的,外教上課的時(shí)間,外教上課的頻率,外教的教學(xué)內(nèi)容,例如日??谡Z相對(duì)容易,但是雅思托福、SAT,商務(wù)英語等專業(yè)的課程外教老師的備課時(shí)間會(huì)更多,所以收費(fèi)也會(huì)有所增長(zhǎng),如果需要詳細(xì)了解可以電話咨詢 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 Linux編程培訓(xùn)哪家好 想知道Linux編程培訓(xùn)哪家好?先來了解一下什么是Linux編程吧!Linux下的網(wǎng)絡(luò)編程指的是socket套接字編程,入門比較簡(jiǎn)單。在學(xué)校里學(xué)過一些皮毛,平時(shí)就是自學(xué)玩,沒有見識(shí)過真正的socket編程大程序,比較遺憾。總感覺每次看的時(shí)候都有收獲,但是每次看完了之后,過段時(shí)間不看,重新拾起這些知識(shí)的時(shí)候又要從頭開始,所以,在這里做個(gè)筆記也算是做個(gè)模板,以后可以直接從某一個(gè)階段開始接著玩…… Linux線程介紹 通過socket機(jī)制建立起的連接,僅僅實(shí)現(xiàn)的是服務(wù)器端和客戶端之間的通信,數(shù)據(jù)的傳輸。但是要使網(wǎng)絡(luò)編程實(shí)現(xiàn)性能更優(yōu)的話,少不了使用線程,線程間通信以及IO函數(shù),接下來就簡(jiǎn)單講一下線程,線程間通信,以及IO函數(shù)中的select函數(shù)。 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 Linux下的線程,線程是進(jìn)程中的一個(gè)運(yùn)行單元,進(jìn)程fork子進(jìn)程的過程是對(duì)父進(jìn)程進(jìn)程copy的過程,然后緊緊改變子進(jìn)程本身的一些變量,之后各自的進(jìn)程運(yùn)行屬于自己進(jìn)程空間的內(nèi)容;而線程的創(chuàng)建則不然,線程創(chuàng)建在進(jìn)程中有自己固定的創(chuàng)建函數(shù),在同一個(gè)進(jìn)程中創(chuàng)建的所有線程會(huì)共用所在進(jìn)程的全局變量,信號(hào)句柄,文件描述符和當(dāng)前的目錄狀態(tài),但是每個(gè)線程又會(huì)有屬于自己的線程棧等私有的屬性。進(jìn)程獲得的使用資源被分給了每個(gè)線程,除公共部分外每個(gè)線程之間的運(yùn)行又是相對(duì)獨(dú)立的。Linux下線程的基本函數(shù): 1 線程創(chuàng)建函數(shù)pthread_create intpthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);功能介紹: 該函數(shù)是用于在進(jìn)程中創(chuàng)建線程,線程在進(jìn)程中創(chuàng)建有固定的形式。個(gè)人理解,線程的創(chuàng)建就是圈起了一段代碼作為一個(gè)線程,這段被圈起來的函數(shù)作為線程函數(shù),線程開始運(yùn)行就是從線程函數(shù)開始運(yùn)行,線程函數(shù)也有固定的格式,因?yàn)楦袷焦潭?,線程的創(chuàng)建把單獨(dú)作為參數(shù)的線程函數(shù)和線程函數(shù)參數(shù)整合到一起,形成一個(gè)線程。當(dāng)然在創(chuàng)建的同時(shí),會(huì)設(shè)置當(dāng)前線程的屬性,以及用于操作的線程標(biāo)識(shí)符。參數(shù)說明: thread:第一個(gè)參數(shù)是一個(gè)pthread_t類型的線程標(biāo)識(shí)符,可以通過操作該標(biāo)識(shí)符,實(shí)現(xiàn)對(duì)線程的操作; attr:第二個(gè)參數(shù)是用來設(shè)置線程的屬性,包括線程優(yōu)先級(jí)等屬性; 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 start_routine:第三個(gè)參數(shù)是指當(dāng)線程成功創(chuàng)建后,開始運(yùn)行的一個(gè)單元,該單元需要自己編寫,一般會(huì)使用無限循環(huán)來實(shí)現(xiàn); arg:第四個(gè)參數(shù)是第三個(gè)參數(shù)線程函數(shù)運(yùn)行時(shí)傳入的參數(shù),為了防止每個(gè)線程函數(shù)輸入?yún)?shù)不同而難以操作,所以線程創(chuàng)建講兩者分開,這樣更靈活,便于操作。線程結(jié)束函數(shù)pthread_join和pthread_exit 2.1 線程函數(shù)結(jié)束pthread_exit void pthread_exit(void *retval);功能介紹: 該函數(shù)主要的功能是從被圈起來的線程函數(shù)中退出,退出過程中會(huì)通過函數(shù)的參數(shù)指針帶出一個(gè)對(duì)象,當(dāng)?shù)却€程結(jié)束函數(shù)pthread_join的第二個(gè)參數(shù)不是NULL時(shí),會(huì)傳給這個(gè)參數(shù)做相應(yīng)的處理。參數(shù)說明: 函數(shù)的參數(shù)是一個(gè)指針,通過該指針可以傳遞出當(dāng)前進(jìn)程結(jié)束時(shí)的相關(guān)信息,這個(gè)值會(huì)被pthread_join捕捉到。2.2 等待線程結(jié)束pthread_join int pthread_join(pthread_t th,void **return_value);功能介紹: 函數(shù)主要功能是等待線程結(jié)束,pthread_exit是主動(dòng)結(jié)束線程,該函數(shù)是被動(dòng)等待線程結(jié)束。函數(shù)會(huì)處于等待狀態(tài),如果函數(shù)的第二個(gè)參數(shù)沒有設(shè)置為NULL,則會(huì)捕捉到從exit傳遞回的信息。參數(shù)說明: 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 第一個(gè)參數(shù)是要等待的線程的標(biāo)識(shí)符,有phread_create函數(shù)第一個(gè)參數(shù)指定其值是多少;第二個(gè)參數(shù)是一個(gè)二維指針,用于等待從pthread_exit返回值。當(dāng)然,如果不適用pthread_exit結(jié)束線程函數(shù)的話,線程函數(shù)結(jié)束,也就是調(diào)用函數(shù)的線程結(jié)束。當(dāng)線程函數(shù)運(yùn)行結(jié)束時(shí),該函數(shù)用于回收線程的資源。 對(duì)于講理論來說,大家往往更喜歡實(shí)例,下面是一個(gè)線程的小例子。 #include pthread_tpth[2];6 void *print_message(void *argv)8 { 9 printf(“This is in thread %x!n”, *((pthread_t *)argv));10 if(&pth[0] == argv)12 { 13 sleep(1);14 pthread_exit(“1 thread exit!”);15 } 16 else 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 { 18 sleep(10);19 pthread_exit(“2 thread exit!”);20 } 21 } 22 intmain(void)24 { 25 void *returnValue;26 printf(“This is in main function BEFORE pthread create!n”);28 pthread_create(&pth[0], NULL, &print_message, &pth[0]);29 pthread_create(&pth[1], NULL, &print_message, &pth[1]);30 printf(“This is in main function AFTER pthread create %x!n”, pth[0]);31 pthread_join(pth[0], &returnValue);32 printf(“This is in main function AFTER pthread join 1n”);33 pthread_join(pth[1], &returnValue);34 printf(“This is in main function returnValue=%sn”, returnValue);35 printf(“This is in main function AFTER pthread joinn”);36 return 0;37 } 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 下面是運(yùn)行結(jié)果: 這個(gè)只是運(yùn)行結(jié)果,其實(shí)一些動(dòng)態(tài)的東西,也看不到,因?yàn)閜thread_join是阻塞等待線程結(jié)束的,所以說這個(gè)代碼是線程1等待一秒首先結(jié)束線程運(yùn)行,pthread_join會(huì)捕捉到線程結(jié)束,線程2會(huì)在線程1結(jié)束運(yùn)行后約9s然后結(jié)束運(yùn)行,這時(shí)候線程2的pthread_join才會(huì)捕捉到線程結(jié)束并釋放資源。所以如果是使用多線程并且在同一個(gè)地方統(tǒng)一使用pthread_join釋放資源時(shí),最好先釋放首先結(jié)束運(yùn)行的線程,然后在釋放后結(jié)束的線程。否則的話如果使用pthread_join先釋放后結(jié)束運(yùn)行的線程,先結(jié)束運(yùn)行的線程資源因?yàn)榈却懊鎝thread_join結(jié)束而得不到釋放。 因?yàn)榫€程是在進(jìn)程中創(chuàng)建的,線程公用進(jìn)程中的資源,所以線程資源的釋放非常重要。主要的線程資源釋放的方法有下面三種: 1)在線程函數(shù)中調(diào)用pthread_detach(pthread_self()),主動(dòng)釋放線程資源; 2)向上面介紹的pthread_join函數(shù),被動(dòng)釋放線程資源; 3)通過設(shè)置線程屬性中的__detachstate屬性,在線程函數(shù)運(yùn)行完,或者pthread_exit退出時(shí),自動(dòng)釋放線程資源,設(shè)置線程屬性通過下面方式,pthread_attr_tatt;//線程屬性 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 pthread_attr_init(&att);//初始化線程屬性 pthread_attr_setdetachstate(&att, PTHREAD_CREATE_DETACHED);//設(shè)置線程屬性 pthread_create(pthread_t *pthread, &att, void *(*thread_function)(void *),(void *argv));//建立線程 3 線程的屬性 線程創(chuàng)建函數(shù)pthread_create的第二個(gè)參數(shù)是指線程的屬性,當(dāng)該參數(shù)設(shè)置為NULL時(shí),表示使用了線程的默認(rèn)屬性。其實(shí)我們可以通過設(shè)置第二個(gè)參數(shù)來設(shè)置線程的屬性。線程屬性的改變有屬于自己的結(jié)構(gòu)體和函數(shù)。線程屬性的結(jié)構(gòu)體 typedefstruct __pthread_attr_s { int __detachstate; /*線程的終止?fàn)顟B(tài)*/ int __schedpolicy; /*調(diào)度優(yōu)先級(jí)*/ int __sched_param __shedparam; /*參數(shù)*/ int __inheritsched; /*繼承*/ int __scope; /*范圍*/ int __guardsize; /*保證尺 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 寸*/ int __stackaddr_set /*運(yùn)行棧*/ void *__stackaddr; /*線程運(yùn)行棧地址*/ size_t __stacksize; /*線程運(yùn)行棧大小*/ }pthread_attr_t; 線程主要的屬性對(duì)象包括上面提到的這幾種,線程的屬性不可以直接設(shè)置,需要通過特定的函數(shù)來實(shí)現(xiàn),可以通過函數(shù)對(duì)上面這幾種線程屬性進(jìn)行修改。并且線程屬性的修改要在創(chuàng)建線程之前完成。線程屬性的初始化函數(shù)為pthread_attr_init,通過如下所示的函數(shù)可以說明線程的屬性參數(shù)都可以做修改,需要再次強(qiáng)調(diào)的是這些參數(shù)的修改需要在創(chuàng)建線程之前完成,將修改后的屬性參數(shù)通過pthead_create的第二個(gè)參數(shù)傳入到線程中,具體函數(shù)如下:(具體如何使用可參考http://blog.csdn.net/hudashi/article/details/7709413)1).線程優(yōu)先級(jí)設(shè)置屬性,需要先獲得線程當(dāng)前屬性優(yōu)先級(jí),然后通過設(shè)置操作修改屬性優(yōu)先級(jí) intpthread_attr_getschedparam(pthread_attr_t* attr, structsched_param* param);intpthread_attr_setschedparam(pthread_attr_t* attr, structsched_param* param); 千鋒教育004km.cn 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 2).設(shè)置線程范圍屬性 intpthread_attr_setscope(pthread_attr_t* attr, int scope);3).設(shè)置線程終止?fàn)顟B(tài)屬性 intpthread_attr_setdetachstate(pthread_attr_t* attr, intdetachstate);4).設(shè)置線程保護(hù)區(qū)大小屬性 intpthread_attr_setguardsize(pthread_attr_t* attr,size_tguardsize);5).設(shè)置線程繼承調(diào)度屬性 intpthread_attr_setinheritsched(pthread_attr_t* attr, intinheritsched);6).設(shè)置線程?;芬约岸褩5淖钚〕叽绱笮?intpthread_attr_setstack(pthread_attr_t* stackader,size_tstacksize);7).設(shè)置線程?;穼傩?/p> intpthread_attr_setstackaddr(pthread_attr_t* attr, void* stackader);8).設(shè)置線程棧的大小屬性 intpthread_attr_setstacksize(pthread_attr_t* attr, size_tstacksize); 以上就是千鋒Linux學(xué)院的學(xué)習(xí)筆記。另附心得體會(huì)一篇: 從零基礎(chǔ)開始學(xué)Linux或者是轉(zhuǎn)行學(xué)習(xí)Linux,參加培訓(xùn)會(huì)保證你在單位時(shí)間內(nèi)學(xué)到更多,畢竟隨著Linux行業(yè)的快速發(fā)展,未來必將會(huì)面臨更多的競(jìng)爭(zhēng),所以只有不遺余力的把自己打造成一把利劍,從專業(yè)度到職業(yè)素質(zhì),只有比別人更突出和優(yōu)秀,才能夠在這個(gè)相互選擇的世界當(dāng)中擁有更多的選擇權(quán)利?,F(xiàn)在想 千鋒教育004km.cn attr, void* 中國(guó)IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 要學(xué)習(xí)Linux技術(shù),只有通過參加培訓(xùn)才可以保證快速掌握所學(xué)知識(shí)和技能,所以培訓(xùn)是比較靠譜的。 Linux編程培訓(xùn)哪家好?千鋒教育的Linux課程專注于當(dāng)前熱門的Linux相關(guān)技術(shù),就Linux而言,內(nèi)容全面而細(xì)致的。Linux教學(xué)團(tuán)隊(duì)由眾多名師打造,擁有多年教學(xué)經(jīng)驗(yàn)和高超的Linux授課技巧和實(shí)戰(zhàn)視野,讓你理論和實(shí)戰(zhàn)兼得。 千鋒教育004km.cn第二篇:Linux網(wǎng)絡(luò)編程培訓(xùn)哪個(gè)好專題
第三篇:學(xué)習(xí)Linux編程哪個(gè)好
第四篇:英語口語培訓(xùn)機(jī)構(gòu)哪個(gè)好
第五篇:Linux編程培訓(xùn)哪家好