[問題] 關於檔案處理的問題

作者: elohacp4 (Liou)   2015-05-01 23:56:45
嗯...自修看到一半也是發現範例的題目有點看不懂。
先把範例程式碼附上:
1) #include <stdio.h>
2) #include <stdlib.h>
3) #include <fcntl.h>
4) #include <io.h>
5) #include <sys/stat.h>
6) #define SIZE 512
7) int main(void)
8) {
9) char buffer[SIZE];
10) int f1,f2,bytes;
11)
12) f1=open("example.txt",O_RDONLY|O_TEXT);
13) f2=creat("output1.txt",S_IWRITE);
14)
15) if((f1!=-1)&&(f2!=-1))
16) {
17) while(!eof(f1))
18) {
19) bytes=read(f1,buffer,SIZE);
20) write(f2,buffer,bytes);
21) }
22) close(f1);
23) close(f2);
24) printf("檔案複製完成!!\n");
25) }
26) else
27) printf("檔案開啟失敗!!\n");
30)
29) system("pause");
30) return 0;
31) }
問題:
(1)第19行我理解的是從f1(example.txt)讀取,一次讀取
SIZE個位元組個資料,在存放至buffer陣列裡,在設定給
Bytes,此時bytes的內容是什麼阿?我怎麼感覺是資料...
另外在19行跟20行間加入printf("%d\n",bytes);,發現
每次都沒有讀取SIZE個,怎麼跟設定的不一樣呢?
(2)把第19行的SIZE改為999或是888為什麼就無法執行了
(3)如果把第6行的SIZE定義為0,第19行的SIZE更改為1,
為什麼一樣可以複製?buffer陣列是0耶.....
抱歉,因為真的搞不懂又想很久都想不到才來發問。
謝謝
※ 編輯: elohacp4 (111.251.5.212), 05/02/2015 00:05:17
作者: TobyH4cker (Toby (我要當好人))   2015-05-02 02:07:00
讓我來猜猜這本書要不要丟
作者: johnpage (johnpage)   2015-05-02 08:59:00
函數使用沒看
作者: PkmX (阿貓)   2015-05-02 10:42:00
有system("pause")就可以直接丟掉了(無誤
作者: uranusjr (←這人是超級笨蛋)   2015-05-02 15:59:00
無誤
作者: OPIV (Monitor)   2015-05-02 21:26:00
ISO 9899:2011 6.7.6.2:If the expression is a constant expression, it shall have avalue greater than zero.長度為0的陣列是不被標準允許的
作者: dirkc (3781615)   2015-05-02 22:32:00
O_TEXT是微軟版本才有的參數,以此開檔,讀到換行就會停了二樓意思可能是建議你看read()/write這些函數的使用說明read()第三個參數是允許裝入buffer的資料大小,如果超過buffer的實際大小,結果是未定義的,要看執行當時的記憶體狀態有時會覆蓋到其他資料,有時候卻不會

Links booklink

Contact Us: admin [ a t ] ucptt.com