信安系统学习笔记二
知识点归纳
系统调用函数:open()、read()、write()、lseek()、close()
I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose()
i/o库模式:fopen()中的模式参数可以指定为:"r" 、 "w" 、"a",分别代表读、写、追加。每个模式字符串可包含一个+号,表示同时读写,或者在写入、追加情况下,如果文件不存在则创建文件。"r+":表示读/写,不会截断文件。"w+":表示读/写,但是会先截断文件;如果文件不存在,会创建文件。"a+":表示通过追加进行读/写;如果文件不存在,会创建文件。
二者区别:
1.系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api。
2.系统调用程序使用while循环读取/写入文件内容。在每个迭代中,它发出read()系统调用,将最多4KB的字符读入buf[]。然后,它将各字符从buf[]写到文件描述符1中,这是该进程的标准输出。正如前文所指出的,使用系统调用一次写入一个字节非常低效。相反,I/O库程序仅仅使用fgetc(fp)从文件流中获取字符,通过putchar()输出字符,直至文件结束符。
3.系统调用open()打开一个文件进行读取,并返回一个整数文件描述符fd,如果open()失败,则返回-1。I/O库函数fopen()返回一个FILE结构体指针,如果fopen()失败,则返回NULL。
问题与解决思路
I/O库中标准i/o与文件i/o有什么联系与区别?