[问题] 关于档案处理的问题

楼主: 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