linuxC檔案輸入輸出筆記

2021-08-03 20:40:04 字數 2326 閱讀 5641

int chmod(*char,int ):系統呼叫修改檔案訪問許可權屬性函式

s_isuid 04000 檔案的(set user-id on execution)位

s_isgid 02000 檔案的(set group-id on execution)位

s_isvtx 01000 檔案的sticky位

s_irusr(s_iread) 00400 檔案所有者具可讀取許可權

s_iwusr(s_iwrite)00200 檔案所有者具可寫入許可權

s_ixusr(s_iexec) 00100 檔案所有者具可執行許可權

s_irgrp 00040 使用者組具可讀取許可權

s_iwgrp 00020 使用者組具可寫入許可權

s_ixgrp 00010 使用者組具可執行許可權

s_iroth 00004 其他使用者具可讀取許可權

s_iwoth 00002 其他使用者具可寫入許可權

s_ixoth 00001 其他使用者具可執行許可權

open,close,read,write,lseek等函式

#include< stdio.h>

#include< sys/types.h>//read open ...等

#include< sys/stat.h>

#include< fcntl.h>

#include< unistd.h>//lseek

#include< errno.h>//errno全域性變數

int main()

write(p1,&a,sizeof(a));//寫函式,返回值為寫入的位元組數

len=lseek(p1,0,seek_end);//lseek,返回值為移動後指標距離檔案開頭的位元組數

printf("%d ",len);//(把檔案已到尾返回值賦給len就可以知道檔案的長度)

printf("%d ",lseek(p1,0,seek_set));//將指標移動到開頭

printf("%d ",read(p1,b,len));//返回值為讀取的位元組數(已經知道前面檔案長度了,用這個讀一次就好)

/*if(read(p1,b,len)!=len)//如果讀的長度和返回值不一樣就說名讀錯了

*/printf("%s \n",b);//輸出一次檔案裡讀的東西

lseek(p1,10,seek_end);//這裡就有點奇怪了 檔案指標移動到結尾的後面十個位元組,這時相當與給檔案變長了,末尾加了十個『\0』,

write(p1,&a,sizeof(a));//又寫入了了一次(這是在在檔案末尾新增了一次,即十個『\0'之後)

len=lseek(p1,0,seek_end);//再次看一下長度,以及下面的對比一下

printf("%d ",len);

printf("%d ",lseek(p1,0,seek_set));

printf("%d ",read(p1,b,len));

printf("%s ",b);

close(p1);

return

0;}

程式執行第一次結果:

6 0 6 gjldw(注意函式們的返回值)

22 0 22 gjldw(前後對比看出檔案指標移動到結尾的後面的方式)

程式結束後我們用od命令開啟檔案看看裡面的東西

gjln@gjldw:~/gjl/練習/練習$ od -c sdfd.txt

0000000 g j l d w \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0(這裡我們發現加了十個』\0』)

0000020 g j l d w \0

0000026

此外open 的一些開啟方式的引數我就不寫了...

最後記一點巨集跟蹤除錯

ansi標準說明了五個預定義的巨集名。它們是:

_ _ line_ _

_ _ file_ _(友情提示他們都是左右雙下劃線)

_ _ date_ _

_ _ time_ _

_ _ stdc_ _

_ _ file _ _ 是內建巨集 代表原始檔的檔名

_ _ line _ _ 是內建巨集,代表該行**的所在行號

_ _ date_ _巨集指令含有形式為月/日/年的串,表示原始檔被翻譯到**時的日期。

_ _ time_ _巨集指令含有形式為時:分:秒的串,表示原始檔被翻譯到**時的時間。

如果實現是標準的,則巨集stdc含有十進位制常量1。如果它含有任何其它數,則實現是非標準的。

檔案輸入 輸出

13.1 和檔案進行通訊 文字檢視和二進位制檢視 在文字檢視中,程式看到的內容和二進位制的內容可能不同,例如ms dos文字檔案用回車符和換行符的組合 r n來表示行尾,macintosh用乙個回車符 r來表示行尾。c程式使用乙個 n表示行尾。所以,如果c程式以文字檢視模式處理乙個ms dos文字檔...

檔案輸入輸出

檔案的兩種檢視 文字和二進位制。有的時候同乙個檔案以不同的檢視進行檢視,顯示是不同的,主要是控制字元 回車,換行 的不同。printf 是將各種型別轉換為適合的終端字元。所以打算將乙個結構體送入檔案的話不能用printf這一類函式。二進位制形式儲存,中間沒有從數字到字串形式的轉化。對於標準io,fr...

檔案輸入輸出

當我們求解acm題目時,通常在設計好演算法和程式後,要在除錯環境 例如vc等 中執行程式,輸入測試資料,當能得到正確執行結果後,才將程式提交到oj中。但由於除錯往往不能一次成功,每次執行時,都要重新輸入一遍測試資料,對於有大量輸入資料的題目,輸入資料需要花費大量時間。使用freopen函式可以解決測...