C语⾔——open和fopen的区别
open 是系统调⽤返回的是⽂件句柄,⽂件的句柄是⽂件在⽂件描述符表⾥的索引,fopen是C的库函数,返回的是⼀个指向⽂件结构的指针。
1. open属于低级IO,fopen是⾼级IO。
2. open返回⼀个⽂件描述符(⽤户程序区的),fopen返回⼀个⽂件指针。
fgets和fgetc的区别3. open⽆缓冲,fopen有缓冲。
4. open与 read, write 等配合使⽤, fopen与 fread,open与 read, write 等配合使⽤,
5. fopen是在open的基础上扩充⽽来的,在⼤多数情况下⽤fopen。
缓冲⽂件系统
在内存开辟⼀个“缓冲区”,给程序中的每⼀个⽂件使⽤,当执⾏读⽂件的操作时,从磁盘⽂件将数据先读⼊内存“缓冲区”, 装满后,再从内存“缓冲区”依次读⼊数据。执⾏写⽂件的操作时,先将数据写⼊内存“缓冲区”,待内存“缓冲区”装满后再写⼊⽂件。由此可以看出,内存 “缓冲区”的⼤⼩,影响着实际操作
外存的次数,内存“缓冲区”越⼤,则操作外存的次数就少,执⾏速度就快、效率⾼。⼀般来说,⽂件“缓冲区”的⼤⼩随机器⽽定。
fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等都有缓冲区。
⾮缓冲⽂件系统
借助⽂件结构体指针来对⽂件进⾏管理,通过⽂件指针来对⽂件进⾏访问,既可以读写字符、字符串、格式化数据,也可以读写⼆进制数据。但是,⾮缓冲⽂件系统依赖于操作系统,通过操作系统的功能对⽂件进⾏读写,是系统级的输⼊输出,它不设⽂件结构体指针,只能读写⼆进制⽂件,但效率⾼、速度快,由于ANSI标准不再包括⾮缓冲⽂件系统,open, close, read, write, getc, getchar, putc, putchar 等,建议不要⽤这类函数了。