IO、进程、线程面试题

1.标准IO和文件IO的区别

1.标准IO

标准IO是基于缓存的IO,也就是说,在进行IO操作时,数据会先被读入缓存,然后再进行实际的IO操作。

标准IO的优点是对于大文件的读写操作效率比较高,因为可以利用缓存来避免频繁的系统调用。此外, 标准IO还提供了一系列方便的API函数,例如printf、scanf等,这些函数可以简化代码编写,提高开发效率。

但是,标准IO也有缺点。由于数据需要先被读入缓存,因此在进行数据读取时,可能会出现缓存未被填满, 或者缓存中已经有一部分数据被读取的情况,这会导致数据的延迟和不一致性。 此外,标准IO还有一个问题是,如果数据被写入缓存中但没有进行刷新操作,当程序异常终止时,数据就会丢失。

2.文件IO

文件IO是基于系统调用的IO,也就是说,每次进行IO操作时,都需要进行一次系统调用。

文件IO的优点是数据的读写比较准确和可靠数据的实时性比较高,数据也不会丢失。 此外,文件IO还支持非阻塞IO和异步IO,可以实现更加灵活的IO操作。

但是,文件IO的缺点也很明显。由于每次进行IO操作都需要进行一次系统调用,因此效率比较低。 此外,文件IO对于大文件的读写操作也比较麻烦,需要使用mmap等函数进行内存映射来提高读写效率。 标准IO和文件IO各有优缺点,根据具体的需求和场景,选择合适的IO编程方式是非常重要的。

2.标准IO为什么要有缓冲区作用是什么?

Linux 标准 IO(stdio)提供了缓冲机制,主要是为了提高 IO 的效率和性能。

标准 IO 通过缓冲区,减少了与外部设备之间的交互次数,从而减少了系统调用的次数,提高了程序的运行效率。

行缓冲1024Byte:当遇到换行符  程序结束  输入输出切换  关闭文件指针  手动调用fflush 缓冲区满时 其中一个条件缓冲区的数据才会输出。和终端相关的缓冲区都是行缓冲 stdin stdout

全缓冲4096Byte:当程序结束  输入输出切换  关闭文件指针  手动调用fflush 缓冲区满时 其中一个条件缓冲区的数据才会输出。 和文件相关的缓冲区就是全缓冲 fopen打开的文件

标准IO库还提供了无缓冲的IO操作,即直接进行IO操作,不使用缓冲区。例如,stderr的输出就是无缓冲的。

3.标准IO和文件IO在实际开发中如何选择

在 Linux 开发中,标准IO和文件IO都是常用的文件操作方式。两者的取舍取决于具体的需求和场景。
    
 1.标准IO是C语言中的标准库函数,包括fopen、fclose、fread、fwrite等等。标准IO使用缓冲区来提高I/O效率,
    可以减少系统调用的次数。因此,当需要进行大量I/O操作时,标准IO通常比文件IO更加高效。

2.文件IO是Linux系统提供的系统调用,包括open、close、read、write等等。
    文件IO直接使用系统调用来进行读写操作,不涉及缓冲区,因此每次操作都会进行系统调用。
    因此,对于一些需要实时处理I/O数据的场景,文件IO可能更为适合。

3.标准IO和文件IO在处理文本文件和二进制文件时的表现也有所不同。
    标准IO默认将文本文件中的"\r\n"转换为"\n",而对于二进制文件,则不会进行任何转换。
    因此,在处理二进制文件时,文件IO通常比标准IO更为合适。

4.标准IO和文件IO都有各自的优缺点,在使用时需要结合实际需求和场景进行选择。
    如果需要进行大量I/O操作,并且数据不是很实时,可以选择标准IO;如果需要实时处理I/O数据,
    并且需要保证数据的精确性,则可以选择文件IO。
    同时,在处理文本文件和二进制文件时也需要根据具体的需求来进行选择。

4.linux中静态库和动态库有什么区别

Linux中静态库和动态库是两种常见的库文件格式,它们有以下区别:
1.  静态库是将函数和数据编译成一个独立的文件,链接时将其整个复制到可执行文件中,因此可执行文件的较大;
    而动态库是在运行时动态加载,可以被多个程序共享,因此可以减小程序的内存占用。
2.  静态库在编译时就被链接到可执行文件中,因此不需要额外的加载时间,也不会出现动态库存在的符号冲突问题;
    而动态库在运行时需要被加载,因此需要额外的加载时间,同时也存在符号冲突问题,需要进行符号解析和重定位。
3.  静态库的修改和升级需要重新编译和链接整个程序,而动态库的修改和升级只需要替换库文件即可,因此动态库更加灵活和易于维护。
4. 静态库与程序绑定比较紧密,因此更容易在不同平台上出现兼容性问题;而动态库则能够通过版本控制等手段来保证向后兼容性。

静态库和动态库各有优缺点,在实际应用中需要根据具体需求来进行选择。
对于需要保证程序独立性和可移植性的程序,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值