Linux c中一些常用函式總結(c語言中文網。。。)
fgets()函式
標頭檔案:include<stdio.h>
fgets()函式
標頭檔案:include<stdio.h>fgets()函式用於從檔案流中讀取一行或指定個數的字元,其原型為: char * fgets(char * string, int size, FILE * stream);引數說明:
· string為一個字元陣列,用來儲存讀取到的字元。
· size為要讀取的字元的個數。如果該行字元數大於size-1,則讀到 size-1 個字元時結束,並在最後補充' \0';如果該行字元數小於等於 size-1,則讀取所有字元,並在最後補充 '\0'。即,每次最多讀取 size-1 個字元。
· stream為檔案流指標。
【返回值】讀取成功,返回讀取到的字串,即string;失敗或讀到檔案結尾返回NULL。因此我們不能直接通過fgets()的返回值來判斷函式是否是出錯而終止的,應該藉助feof()函式或者ferror()函式來判斷。注意:fgets()與gets()不一樣,不僅僅是因為gets()函式只有一個引數 FILE *stream,更重要的是,fgets()可以指定最大讀取的字串的個數,杜絕了gets()使用不當造成快取溢位的問題。【例項】從myfile.txt檔案中讀取最多99個字元。
1. #include<stdio.h>
2.
3. int
4. {
5. FILE * pFile;
6. char mystring [100];
7.
8. pFile =fopen("myfile.txt","r");
9. if(pFile == NULL)
10. perror("Error opening file");
11. else{
12. if(fgets(mystring ,100, pFile)!= NULL )
13. puts(mystring);
14. fclose(pFile);
15. }
16. return0;
17. }
又如,使用fputs()寫一個檔案,然後fgets()讀取檔案內容並顯示。
1. #include<stdio.h>
2. #include<stdlib.h>
3. #include<io.h>
4. #include<conio.h>
5. intmain(void)
6. {
7. char msg[]="This is a test!\n secend line\n";
8. char msgget[100];
9. int i =0;
10. FILE* fstream;
11. fstream =fopen("test.txt","w+");/*開啟檔案*/
12. if(fstream==NULL)
13. {
14. printf("Open file failed!\n");
15. exit(1);
16. }
17. fputs(msg, fstream);/*寫入檔案*/
18. fflush(fstream);
19. close(fileno(fstream));
20. fstream=fopen("test.txt","r");
21. i =0;
22. fgets(msgget,3,fstream);
23. fputs(msgget, stdout);
24. printf("\n");
25. fgets(msgget,100,fstream);/*從流中讀取一行或者指定個數字元*/
26. fputs(msgget, stdout);/*送一個字串到流中*/
27. return0;
28. }
執行結果:This is a test!Fputs
C語言庫函式 int fputs(const char *str, FILE *stream) 將一個字串寫入指定的流,但不包括空字元。
宣告
以下是宣告 fputs() 函式。
int fputs(const char *str, FILE *stream)
引數
·
str -- 這是一個數組,包含null結尾的要寫入的字元序列。
·
·
stream -- 這是一個檔案物件的標識字串將被寫入流的指標。
·
返回值
這個函式返回一個非負的值,否則,錯誤返回EOF。
例子
下面的例子顯示的使用fputs() 函式。
#include <stdio.h>
int main (){
FILE *fp;
fp = fopen("file.txt", "w+");
fputs("This is c programming.", fp);
fputs("This is a system programming language.", fp);
fclose(fp);
return(0);}
讓我們編譯和執行上面的程式,這將建立一個檔案file.txt 以下內容:
This is c programming.This is a system programming language.
關於重定向
I/O
cmd > file 把 stdout 重定向到 file 檔案中;
cmd >> file 把 stdout 重定向到 file 檔案中(追加);
cmd 1> file 把 stdout 重定向到 file 檔案中;
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 檔案中;
cmd 2> file 把 stderr 重定向到 file 檔案中;
cmd 2>> file 把 stderr 重定向到 file 檔案中(追加);
cmd >> file 2>&1 把 stdout 和 stderr 一起重定向到 file 檔案中(追加);
cmd < file >file2 cmd 命令以 file 檔案作為 stdin,以 file2 檔案作為 stdout;
cat <>file 以讀寫的方式開啟 file;
cmd < file cmd 命令以 file 檔案作為 stdin;
cmd << delimiter Here document,從 stdin 中讀入,直至遇到 delimiter 分界符。
進階I/O
>&n 使用系統呼叫 dup (2) 複製檔案描述符 n 並把結果用作標準輸出;
<&n 標準輸入複製自檔案描述符 n;
<&- 關閉標準輸入(鍵盤);
>&- 關閉標準輸出;
n<&- 表示將 n 號輸入關閉;
n>&- 表示將 n 號輸出關閉;
上述所有形式都可以前導一個數字,此時建立的檔案描述符由這個數字指定而不是預設的 0 或 1。如:
... 2>file 執行一個命令並把錯誤輸出(檔案描述符 2)定向到 file。
... 2>&1 執行一個命令並把它的標準輸出和輸出合併。(嚴格的說是通過複製檔案描述符 1 來建立檔案描述符 2 ,但效果通常是合併了兩個流。)
我 們對 2>&1詳細說明一下 :2>&1 也就是 FD2=FD1 ,這裡並不是說FD2 的值 等於FD1的值,因為 > 是改變送出的資料通道,也就是說把 FD2 的 “資料輸出通道” 改為 FD1 的 “資料輸出通道”。如果僅僅這樣,這個改變好像沒有什麼作用,因為 FD2 的預設輸出和 FD1的預設輸出本來都是 monitor,一樣的! 但是,當 FD1 是其他檔案,甚至是其他 FD 時,這個就具有特殊的用途了。請大家務必理解這一點。
exec 1>outfilename # 開啟檔案outfilename作為stdout。
exec 2>errfilename # 開啟檔案 errfilename作為 stderr。
exec 0<&- # 關閉 FD0。
exec 1>&- # 關閉 FD1。
exec 5>&- # 關閉 FD5。
Open()函式
相關函式:read, write, fcntl, close, link, stat, umask, unlink, fopen標頭檔案:#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>定義函式: int open(const char * pathname, int flags); int open(const char * pathname, int flags, mode_t mode);函式說明:引數 pathname 指向欲開啟的檔案路徑字串. 下列是引數flags 所能使用的旗標:O_RDONLY 以只讀方式開啟檔案O_WRONLY 以只寫方式開啟檔案O_RDWR 以可讀寫方式開啟檔案. 上述三種旗標是互斥的, 也就是不可同時使用, 但可與下列的旗標利用OR(|)運算子組合.O_CREAT 若欲開啟的檔案不存在則自動建立該檔案.O_EXCL 如果O_CREAT 也被設定, 此指令會去檢查檔案是否存在. 檔案若不存在則建立該檔案, 否則將導致開啟檔案錯誤. 此外, 若O_CREAT 與O_EXCL 同時設定, 並且欲開啟的檔案為符號連線, 則會開啟檔案失敗.O_NOCTTY 如果欲開啟的檔案為終端機裝置時, 則不會將該終端機當成程序控制終端機.O_TRUNC 若檔案存在並且以可寫的方式開啟時, 此旗標會令檔案長度清為0, 而原來存於該檔案的資料也會消失.O_APPEND 當讀寫檔案時會從檔案尾開始移動, 也就是所寫入的資料會以附加的方式加入到檔案後面.O_NONBLOCK 以不可阻斷的方式開啟檔案, 也就是無論有無資料讀取或等待, 都會立即返回程序之中.O_NDELAY 同O_NONBLOCK.O_SYNC 以同步的方式開啟檔案.O_NOFOLLOW 如果引數pathname 所指的檔案為一符號連線, 則會令開啟檔案失敗.O_DIRECTORY 如果引數pathname 所指的檔案並非為一目錄, 則會令開啟檔案失敗。注:此為Linux2. 2 以後特有的旗標, 以避免一些系統安全問題. 引數mode 則有下列數種組合, 只有在建立新檔案時才會生效, 此外真正建檔案時的許可權會受到umask 值所影響, 因此該檔案許可權應該為 (mode-umaks).S_IRWXU00700 許可權, 代表該檔案所有者具有可讀、可寫及可執行的許可權.S_IRUSR 或S_IREAD, 00400 許可權, 代表該檔案所有者具有可讀取的許可權.S_IWUSR 或S_IWRITE, 00200 許可權, 代表該檔案所有者具有可寫入的許可權.S_IXUSR 或S_IEXEC, 00100 許可權, 代表該檔案所有者具有可執行的許可權.S_IRWXG 00070 許可權, 代表該檔案使用者組具有可讀、可寫及可執行的許可權.S_IRGRP 00040 許可權, 代表該檔案使用者組具有可讀的許可權.S_IWGRP 00020 許可權, 代表該檔案使用者組具有可寫入的許可權.S_IXGRP 00010 許可權, 代表該檔案使用者組具有可執行的許可權.S_IRWXO 00007 許可權, 代表其他使用者具有可讀、可寫及可執行的許可權.S_IROTH 00004 許可權, 代表其他使用者具有可讀的許可權S_IWOTH 00002 許可權, 代表其他使用者具有可寫入的許可權.S_IXOTH 00001 許可權, 代表其他使用者具有可執行的許可權.返回值:若所有欲核查的許可權都通過了檢查則返回0 值, 表示成功, 只要有一個許可權被禁止則返回-1.錯誤程式碼:EEXIST 引數pathname 所指的檔案已存在, 卻使用了O_CREAT 和O_EXCL 旗標.EACCESS 引數pathname 所指的檔案不符合所要求測試的許可權.EROFS 欲測試寫入許可權的檔案存在於只讀檔案系統內.EFAULT 引數pathname 指標超出可存取記憶體空間.EINVAL 引數mode 不正確.ENAMETOOLONG 引數 pathname 太長.ENOTDIR 引數pathname 不是目錄.ENOMEM 核心記憶體不足.ELOOP 引數pathname 有過多符號連線問題.EIO I/O 存取錯誤.附加說明:使用 access()作使用者認證方面的判斷要特別小心, 例如在access()後再作open()空檔案可能會造成系統安全上的問題.範例#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>main(){ int fd, size; char s[] = "Linux Programmer!\n", buffer[80]; fd = open("/tmp/temp", O_WRONLY|O_CREAT); write(fd, s, sizeof(s)); close(fd); fd = open("/tmp/temp", O_RDONLY); size = read(fd, buffer, sizeof(buffer)); close(fd); printf("%s", buffer);}執行Linux Programmer!
C語言read()函式:讀檔案函式(由已開啟的檔案讀取資料)
相關函式:readdir, write, fcntl, close, lseek, readlink, fread標頭檔案:#include <unistd.h>定義函式:ssize_t read(int fd, void * buf, size_t count);函式說明:read()會把引數fd 所指的檔案傳送count 個位元組到buf 指標所指的記憶體中. 若引數count 為0, 則read()不會有作用並返回0. 返回值為實際讀取到的位元組數, 如果返回0, 表示已到達檔案尾或是無可讀取的資料,此外檔案讀寫位置會隨讀取到的位元組移動.附加說明:如果順利 read()會返回實際讀到的位元組數, 最好能將返回值與引數count 作比較, 若返回的位元組數比要求讀取的位元組數少, 則有可能讀到了檔案尾、從管道(pipe)或終端機讀? ?蛘呤莚ead()被訊號中斷了讀取動作. 當有錯誤發生時則返回-1, 錯誤程式碼存入errno 中, 而檔案讀寫位置則無法預期.錯誤程式碼:EINTR 此呼叫被訊號所中斷.EAGAIN 當使用不可阻斷I/O 時(O_NONBLOCK), 若無資料可讀取則返回此值.EBADF 引數fd 非有效的檔案描述詞, 或該檔案已關閉.
1.Write函式
用法: #include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
引數: fd:要進行寫操作的檔案描述詞。buf:需要輸出的緩衝區count:最大輸出位元組計數
使用時候偶然發現,如果設定開啟fb=open("/dev/fb0",O_RDONLY)之類的快取檔案,並且再開啟fb_tupian=open("tu.bin",O_RDONLY);並且將fb_tupian使用read(fb_tupian,buf,size);讀取之後,這個buf存放的就是tu.bin的資料
好了,問題出現了,當使用write(fb,buf,size)寫第一張圖片的時候還是正確的,但是當開啟例如:tu001.bin的buf001,發現,不能寫入framebuffer的fb檔案描述符下,因為由於前面寫的tu.bin的資料已經導致快取地址溢位,因此,後面的圖片再次使用write函式寫入到fb的時候,fb快取的地址沒有清到快取的首地址,因此溢位了LCD螢幕範圍。
解決的方法是:需要將該檔案close掉,再次開啟,才能進行重寫。
2.fread函式和fwrite函式
1.函式功能
用來讀寫一個數據塊。
2.一般呼叫形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
3.說明
(1)buffer:是一個指標,對fread來說,它是讀入資料的存放地址。對fwrite來說,是要輸出資料的地址。
(2)size:要讀寫的位元組數;
(3)count:要進行讀寫多少個size位元組的資料項;
(4)fp:檔案型指標。
標頭檔案:#include <stdio.h>定義函式:size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);函式說明:fread()用來從檔案流中讀取資料.引數stream 為已開啟的檔案指標, 引數ptr 指向欲存放讀取進來的資料空間, 讀取的字元數以引數size*nmemb 來決定. Fread()會返回實際讀取到的nmemb 數目, 如果此值比引數nmemb 來得小, 則代表可能讀到了檔案的尾或有錯誤發生, 這時必須用feof()或ferror()來決定發生什麼情況.返回值:返回實際讀取到的nmemb 數目。範例#include <stdio.h>#define nmemb 3struct test{ char name[20]; int size;} s[nmemb];main(){ FILE * stream; int i; stream = fopen("/tmp/fwrite", "r"); fread(s, sizeof(struct test), nmemb, stream); fclose(stream); for(i = 0; i < nmemb; i++) printf("name[%d]=%-20s:size[%d]=%d\n", i, s[i].name, i, s[i].size);}執行name[0]=Linux! size[0]=6name[1]=FreeBSD! size[1]=8name[2]=Windows2000 size[2]=11
標頭檔案:#include <stdio.h>fopen()是一個常用的函式,用來以指定的方式開啟檔案,其原型為: FILE * fopen(const char * path, const char * mode);【引數】path為包含了路徑的檔名,mode為檔案開啟方式。mode有以下幾種方式:
開啟方式 |
說明 |
r |
以只讀方式開啟檔案,該檔案必須存在。 |
r+ |
以讀/寫方式開啟檔案,該檔案必須存在。 |
rb+ |
以讀/寫方式開啟一個二進位制檔案,只允許讀/寫資料。 |
rt+ |
以讀/寫方式開啟一個文字檔案,允許讀和寫。 |
w |
開啟只寫檔案,若檔案存在則長度清為0,即該檔案內容消失,若不存在則建立該檔案。 |
w+ |
開啟可讀/寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。 |
a |
以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留(EOF符保留)。 |
a+ |
以附加方式開啟可讀/寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,則寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留(原來的EOF符 不保留)。 |
wb |
以只寫方式開啟或新建一個二進位制檔案,只允許寫資料。 |
wb+ |
以讀/寫方式開啟或建立一個二進位制檔案,允許讀和寫。 |
wt+ |
以讀/寫方式開啟或建立一個文字檔案,允許讀寫。 |
at+ |
以讀/寫方式開啟一個文字檔案,允許讀或在文字末追加資料。 |
ab+ |
以讀/寫方式開啟一個二進位制檔案,允許讀或在檔案末追加資料。 |
在POSIX 系統,包含Linux 下都會忽略 b 字元。由fopen()所建立的新檔案會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)許可權,此檔案許可權也會參考umask 值。二進位制和文字模式的區別:
· 在windows系統中,文字模式下,檔案以"\r\n"代表換行。若以文字模式開啟檔案,並用fputs等函式寫入換行符"\n"時,函式會自動在"\n"前面加上"\r"。即實際寫入檔案的是"\r\n" 。
· 在類Unix/Linux系統中文字模式下,檔案以"\n"代表換行。所以Linux系統中在文字模式和二進位制模式下並無區別。
更多資訊請檢視:C語言fopen()開啟文字檔案與二進位制檔案的區別有些C編譯系統可能不完全提供所有這些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,讀者注意所用系統的規定。【返回值】檔案順利開啟後,指向該流的檔案指標就會被返回。若果檔案開啟失敗則返回NULL,並把錯誤程式碼存在errno 中。注意:一般而言,開檔案後會作一些檔案讀取或寫入的動作,若開檔案失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。檔案操作完成後,需要將檔案關閉,一定要注意,否則會造成檔案所佔用記憶體洩露和在下次訪問檔案時出現問題。檔案關閉後,需要將檔案指標指向空,這樣做會防止出現遊離指標,而對整個工程造成不必要的麻煩,如fp = NULL。【例項】開啟一個檔案然後關閉該檔案。
1. #include<stdio.h>
2. #include<string.h>
3. #include<stdlib.h>
4. intmain()
5. {
6.
7. FILE* fstream;
8. char msg[100]="Hello!I have read this file.";
9. fstream=fopen("test.txt","at+");
10. if(fstream==NULL)
11. {
12. printf("open file test.txt failed!\n");
13. exit(1);
fgets()函式
標頭檔案:include<stdio.h>
fgets()函式
標頭檔案:include<stdio.h>fgets()函式用於從檔案流中讀取一行或指定個數的字元,其原型為: char * fgets(char *
1. np.prod() : prod函式用於求陣列元素的乘積。
Note: 陣列沒有元素,即為空時,得到的值為 1.0
In [2]: np.prod([])
Out[2]: 1.0
In [4]: np.prod([[],[]])
Out[4]: 1.0
標準c++中string類函式介紹
注意不是CString
之所以拋棄char*的字串而選用C++標準程式庫中的string類,是因為他和前者比較起來,不必 擔心記憶體是否足夠、字串長度等等,而且作為一個類出現,他整合的操作函式足以完成我們大多數情況下(甚至是1
1.I/O函式
(1)scanf函式:
int scanf(const char *format…..);
從標準輸入流stdin中按格式format將資料寫到引數表中;若操作成功,返回寫到引數表中的引數個數,否則返回EOF;
注意以下幾點:
①scanf函式沒
1>to_char,將日期轉換為字元;add_months,在第一個引數的日期上加或者減第二個引數的值
select dkzh,jkhtbh,yhkrq,dkffrq,shqs,dqyqcs,to_char(add_months(dkffrq,shqs+dqyqcs+1),'yyyymm' 1.print('') #可以直接列印字串&列表裡的所有資料,python2.x中print “” 無需加括號
2.轉換字串:str() #將字元轉義成字串
3.字串:
(1)string.title() #將字串轉義成標題(單詞首字母大寫)
(2)字
MD5(str) md5加密
SELECT MD5('hello')
5d41402abc4b2a76b9719d911017c592
sha(str) sha加密
SELECT SH
1.設定畫筆顏色
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,0.0);
2.glFlush();//重新整理圖形,display函式末尾
3.glMatrixMode(GLenum mode)
&nb
這篇繼續我們介紹我們的函式,上篇連結: https://blog.csdn.net/Forever_ck/article/details/85268145 閒話少敘,開整:
current_date 獲取當前日期
rtrim 去除字串右邊空格
split 將字串按
在我們開發數倉專案的過程中,我們常常需要寫一些複雜的 hql 語句來完成我們的業務邏輯,今天我們就來聊聊那些Hive中自帶的常用函式。 一、Hive中內建函式圖解 二、常用函式總結:(常用的數學和日期函式)
round() 四捨五入取值
ceil 向上取整
sq
程式例2
從這個例子可以看出calloc分配完儲存空間後將元素初始化。 #include<stdio.h> #include<stdlib.h> int main(void) { int i; int *pn=(int
Linux系統下有一些重要的配置檔案,例如配置防火牆過濾的檔案iptables,該檔案在CentOS下的路徑為/etc/sysconfig/iptables。如果我們要配置防火牆,那必須編輯它,但是Linux系統這些配置檔案比較多,不可以記住每一個配置檔案的
輸入函式:scanf(),gets(),fgets(),fscanf(),fgets();
輸出函式:printf(),puts(),fputs(),fprintf,fputs();
scanf()
在讀取字串時從第一個非
空白字元(空格,製表符,換行符)
開始讀自導
轉
C++中string erase函式的使用
2017年04月05日 21:02:17
It_BeeCoder
閱讀數:4286
更多
append(新增字元(串))
(1)basic_string& append(const basic_string& __str);
//在字串末尾新增字串str
(2) basic_string& append(const basic_st
scanf()函式格式化讀入函式,採用轉換說明匹配
scanf()通過%的形式對資料進行讀入,可以一次讀入多個數據。scanf的實現依靠指標所以有如下兩條規則:
1、scanf()讀入基本資料型別時,需要在變數名前加&。
2、scanf()讀入字串陣列時,不需要加。
一、random函式
import random
# 在1~20中隨機取一個數
print(random.choice(range(1, 20)))
9
# 在1~20中隨機取五個陣列成一個列表
print(random.choices(range(1, 20), k=5))
[3, 1
fgets
標頭檔案: #include <stdio.h>
函式原型:char *fgets(char *s, int size, FILE *stream);
返回值: 成功時s指向哪返回的指標就指向哪,出錯或者讀到檔案末尾時返回NULL。
說明
1.sscanf()
char s[100];
scanf("%s", s);
int v;
sscanf(&s[1], "%d", &v);
輸入s :(112, 334)
輸入s
#include <string>#include <iostream>using namespace std;
void main()
{
////find函式返回型別 size_type
string s("1a2b3c4d5e6f7g8 相關推薦
Linux c中一些常用函式總結(c語言中文網。。。)
numpy中一些常用函式記錄(3)
C++中string常用函式及用法總結
關於C語言中一些常用函式的說明
生產環境中Oracle常用函式總結
Python常用關鍵字和常用函式總結(不定期更新)
Mysql 常用函式總結(加密解密函式)
Open GL常用函式總結(待更新)
Hive常用函式總結(下)
Hive常用函式總結(上)
c中記憶體分配與釋放(malloc,realloc,calloc,free)函式內容的整理
Linux系統中一些常用的配置檔案
C中輸入輸出函式總結
C++中string erase 函式的使用 C++中string erase函式的使用
string中常用函式總結四(append和assign)(C++11)
C語言中一些常用IO函式的總結
python中一些常用的函式(不定時更新)
慢慢總結C語言一些常用函式
c語言中一些常用的函式
C++ 中string.find() 函式的用法總結(轉載)