liunx多線程編程(前置知識)前置知識
前言
學習編程就像是修仙,分為宗門的正統修士(計算機專業的學生),以及野修(半路轉碼)。正統修士有各大宗門的功法,保證一路修行暢通無阻。而對于野修,少部分人可以得到失落的傳承(學習路線),大部分的野修都走了歪路子,對著網站的的某些某某語言基礎教學視頻學習了大半年,最后根基不穩,在與人斗法(面試找工作)的過程中凄慘落敗。
僅僅學習了語言的修士相當于練氣境界,相當于低階修士,而對于這些練氣圓滿的修士來說下一步該怎么做至關重要。數據結構是一種路線,修煉出來必成一方大能,但是那條路線過于兇險,對天資有這極大的要求。今天我們要走了是一條風險較小但也能幫助各位問鼎修真界的一條路線,即《linux操作系統》。
(為什么要學習linux?因為學習Linux可以幫助我們更好地理解操作系統的工作原理,提高系統的運行效率和安全性。)
Linux,一般指GNU/Linux(單獨的Linux內核并不可直接使用,一般搭配GNU套件,故得此稱呼),是一種免費使用和自由傳播的類UNIX操作系統,其內核由林納斯·本納第克特·托瓦茲(Linus Benedict Torvalds)于1991年10月5日首次發布,它主要受到Minix和Unix思想的啟發,是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統。它支持32位和64位硬件,能運行主要的Unix工具軟件、應用程序和網絡協議。
文件
首先我要向各位道友介紹本條路線的核心心法口訣:“萬物皆文件”。
(暫時編不下去了,說干貨)
linux中文件是一個非常重要的概念,電腦相當于我們的軀體,而我們的每一寸血肉都可以稱為文件。在電腦上,各種外設類似于硬盤,鼠標,鍵盤等,都可以是文件。這個概念還有一點抽象,大家先記住,隨著修為的加深,我們就會理解這個概念的。
想一想我們能對一份文件干什么?無非是下面幾個動作,打開文件,關閉文件,讀文件,寫文件。對于這四個操作,linux提供了對應的函數。
打開文件:
/*
參數:pathname: 文件路徑,不必多說flags:打開方式 O_RDONLY:只讀模式O_WRONLY:只寫模式O_RDWR:可讀可寫。。。(其他的先不管了)mode:只有flags是一個特定值時這個參數才有意義,先不管了
返回值:fd:int類型,值為-1時表示打開失敗值為大于0的數時表示文件的描述符
*/
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode)
這里的返回值 fd 叫做文件描述符,想一下,我打開文件后如何表示這個文件呢?文件描述符就代表了一個身份證的作用,表示了這個文件的身份,之后我們直接使用這個描述符就可以操作這個文件。這種用一個數字代表一個結構的用法在linux中十分常見,大家要習慣。
可以有多個文件描述符指向同一個文件,這些描述符可以帶有不同的權限,對同一個文件實現不同的操作。例如通過描述符fd1只能從文件中讀取數據,而描述符fd2可以向文件末尾追加數據。
關閉文件:
/*
參數:fd:文件描述符
返回值:值為-1表示關閉失敗值為0表示關閉成功
*/
int close(int fd);
這里就用到了文件描述符,我要關閉剛剛打開的文件,就用文件描述符代表這個文件就行。
向文件中寫入(重點):
/*
參數:fd:文件描述符buf:緩沖區,存放了你要寫入的內容count:要寫入的字節數(size_t就是unsigned int)
返回值:表示成功寫入的字節數值為-1時表示寫入失敗(ssize_t就是int,因為要用-1表示寫入失敗)
*/
ssize_t write(int fd, const void *buf, size_t count);
從文件中讀取(重點):
/*
參數:fd:文件描述符buf:緩沖區,存放讀取到的內容count:要讀取的字節數(size_t就是unsigned int)
返回值:表示成功讀取到的字節數
*/
ssize_t read(int fd, void *buf, size_t count);
小結
在這里我先不給大家上實際案例,后面會給大家用更加具體的方式進行演示。
本節我們要:
1、文件描述符的概念(不要與文件標識符混淆)
2、認識這四個函數( 先不要求會用,重點記住read()和write() )
下一集:linux多線(進)程編程——(2)身外化身fork()
結束語
下一節我們將正式進入linux多進程/多線程編程
祝各位道友早日神功大成!
恭喜你點亮了新的技能樹,目前的你眼前有兩個選擇,到底走那邊呢?(其實走哪都是一樣的,我說了算,哈哈!)