/**三个比较重要的设备文件 */
(1)/dev/console
系统控制台
(2)/dev/tty
如果每个进程有一个控制终端的话,特殊文件/dev/tty就是这个控制终端的别名(逻辑设备)
虽然/dev/console只有一个,但是它却可以通过/dev/tty/访问许多不同的物理设备
(3)/dev/null
空设备,所有写向这个设备的输出都将被丢弃,读这个设备文件会理解返回一个文件尾标志
/**库函数 */
针对输入输出操作直接使用底层的系统调用效率非常低,主要因为:
(1)使用系统调用会影响系统系统的性能。因为执行系统调用的时候,Linux必须从运行的用户代码切换到执行内核代码,再返回用户代码,因此系统调用的开销比函数调用大的多。所谓要减少这种开销,应该:
a)在程序中减少系统调用的次数
b)增加每次系统调用完成的工作
(2)硬件会限制对底层系统调用一次所能读写的数据块的大小。
库函数由此产生,是一些有函数构成的集合。
(1)/dev/console
系统控制台
(2)/dev/tty
如果每个进程有一个控制终端的话,特殊文件/dev/tty就是这个控制终端的别名(逻辑设备)
虽然/dev/console只有一个,但是它却可以通过/dev/tty/访问许多不同的物理设备
(3)/dev/null
空设备,所有写向这个设备的输出都将被丢弃,读这个设备文件会理解返回一个文件尾标志
/**库函数 */
针对输入输出操作直接使用底层的系统调用效率非常低,主要因为:
(1)使用系统调用会影响系统系统的性能。因为执行系统调用的时候,Linux必须从运行的用户代码切换到执行内核代码,再返回用户代码,因此系统调用的开销比函数调用大的多。所谓要减少这种开销,应该:
a)在程序中减少系统调用的次数
b)增加每次系统调用完成的工作
(2)硬件会限制对底层系统调用一次所能读写的数据块的大小。
库函数由此产生,是一些有函数构成的集合。
关于用户空间,库函数、系统调用、内核、设备驱动程序和硬件设备的关系,参见《Linux程序设计》P82页的图片阐述。