Linux學習筆記(6) 檔案I O

2022-05-24 08:48:10 字數 3373 閱讀 9273

持續乙個禮拜的出差終於結束了,本次出差真是收益良多,不僅品嚐了正宗的大閘蟹,同時也是第一次體驗了產品的現場實施流程。

明天開始繼續學習linux!

——————————————————————分割線————————————————————————————————————

因為各種原因,已經有十天沒有更新了,真是太不應該了,以後一定杜絕這種懶惰、無恥的情況!!

——————————————————————分割線————————————————————————————————————

古話說得好,在linux之下,一切皆是檔案。

有很多資源,linux都可以用檔案的方式來使用,在以前的微控制器開發中,也使用過檔案系統,稍稍有那麼一些經驗,所以在這點上的學習,應該難不倒我……

在linux下,常用的檔案操作也無外乎,open,wirte,read,seek之類的。

要使用這些函式,需要包含以下標頭檔案:

#include// 定義了一些資料型別

#include// 定義了open,create函式的原形,建立檔案許可權的巨集s_irusr等

#include// 這裡面定義了write,read,seek等函式原形

#include// 這個主要是用來除錯用的,裡面有乙個變數,如果出了錯誤,那就能用到

簡單瀏覽了一下這些函式的介面,下面開始寫**……

功能:建立乙個名為io_opreation.txt的檔案,在裡面寫一句話,然後關閉,在讀回來。

1 #include2 #include3 #include4 #include5

6void main(void)7

;10char writedate = ;

11char readdate[100

];12

1314   fd = open(filename,o_wronly|o_creat,0x777

);15   write(fd,writedate,sizeof

(writedate));

16close(fd);

17   fd =open(filename,o_rdonly);

18   read(fd,readdate,10

);19

20return0;

21 }

程式寫完了,簡直完美!!!

現在開始寫makefile

花了半個小時,makefile也完工了:

1 exe=io_opreation

2 src=io_opreation.c

3 obj=io_opreation.o

45 cc=gcc

6 cflag=-g

7 lcdflag=89

10exe:$(obj)

11   $(cc) $(lcdflag) $(src) -o $(exe)

1213

obj:$(src)

14   $(cc) -c $(src) -o $(obj)

1516

.phony:clean

17clean:

18   rm -vfr $(obj) $(exe)

編譯一下……咦?

io_opreation.c:20:2: 警告: 在無返回值的函式中,『return』帶返回值 [預設啟用]

哦哦哦!原來如此,都怪自己手賤!

1 #include2 #include3 #include4 #include5

6void main(void)7

;10char writedate = ;

11char readdate[100

];12

1314 fd = open(filename,o_wronly|o_creat,0x777

);15 write(fd,writedate,sizeof

(writedate));

16close(fd);

17 fd =open(filename,o_rdonly);

18 read(fd,readdate,10

);19

20return

;21 }

把返回值的零刪掉,再試一下!

cc -c -o io_opreation.o io_opreation.c

gcc io_opreation.c -o io_opreation

一切大丈夫!!

現在執行一下……

我擦!執行以後怎麼什麼反應都沒有???

原來我都沒有輸出!

修改**,將讀回來的東西,列印出來……對了最後還得呼叫close函式把檔案關了(這算是個bug!需要review!!)。

1 #include2 #include3 #include4 #include5 #include6

void main(void)7

;10char writedate = ;

11char readdate[100

];12

1314 fd = open(filename,o_wronly|o_creat,0x777

);15 write(fd,writedate,sizeof

(writedate));

16close(fd);

17 fd =open(filename,o_rdonly);

18 read(fd,readdate,20

);19

close(fd);

2021 printf("

%s\n

",readdate);

2223

return

;24 }

再度編譯,執行!!

vmuser@linux-host:~/work/io_opreation$ ./io_opreation

你好啊▒

**執行以後,輸出倒是有了……但是好像**有點不對!那個奇怪的符號是**冒出來的?

read函式讀出了亂碼,趕緊check**……

根據我調查,可能是由於read函式指定的讀取位元組數不夠,因為我改成read(fd,o_rdonly,20)之後,就不存在那個亂碼了!

檔案也是按照要求建立出來了。

vmuser@linux-host:~/work/io_opreation$ ./io_opreation

你好啊!

vmuser@linux-host:~/work/io_opreation$

如果有知道原理的朋友,看見了一定告訴我一下,我會很感激的!

Linux基礎 6 檔案IO操作

linux下一切皆檔案,所以檔案io是很重要的也是很基礎的操作。關於linux檔案io的操作主要有五個方面,分別是開啟,關閉,建立,寫與讀。我們先來看一下開啟檔案open函式 int open const char path,int oflags,mode t mode 引數path表示 路徑名或者...

Python學習筆記 6 檔案

要開啟的檔案應該儲存在你執行的python程式同乙個資料夾下。這個檔案儲存在你啟動python時所在的那個資料夾。fhand open mbox.txt print fhand 如果檔案成功被開啟,作業系統會返回乙個檔案控制代碼。如果檔案不存在,開啟失敗,輸出追蹤錯誤資訊。文字檔案可視為若干文字行的...

C 學習筆記10 檔案IO

scanf 3d f x,y scanf確實可以設定輸入整數的寬度,3d表示取三位整數 printf也可以設定輸出整數的寬度,3d表示輸出至少3位,假如超過3位,有多少輸出多少。本題考查檔案操作函式,fseek用於二進位制方式開啟的檔案,移動檔案讀寫指標位置。將檔案內部的位置指標重新指向乙個流 資料...