例如puts()
调用系统调用write()
。 这是否意味着每次我们拨打puts()
时它都会调用write()
,或者在调用write()
之前将累计值累加到某个缓冲区中?每次调用stdio函数都会导致系统调用吗?
2
A
回答
2
你是对的 - 通常C FILE*
流确实有存储数据的缓冲区。只有在缓冲区已满或流被关闭或调用了fflush
时,它们才会进行Unix I/O系统调用。您可以使用C标准功能setvbuf
来控制流的缓冲。
3
stdio函数确实利用缓冲。在puts()
这个特殊情况下,它总是写一个完整的行到stdout
,如果stdout
连接到一个终端,那么它通常会被行缓冲,所以每次拨打puts()
都会导致write()
的调用。
然而,可能有stdout
被完全缓冲 - 或者使用setvbuf()
通过运行与stdout
程序连接到一个管道或文件(只要这之前的任何其它操作上stdout
完成),或更常见。在这种情况下,每次拨打puts()
时都不一定会致电write()
。
相关问题
- 1. 每次使用变量时,PHP函数都会被调用吗?
- 2. pthread_atfork()多次调用导致fork()函数被多次调用后
- 3. 每次调用jquery函数时都会增加变量
- 4. 每次调用函数时都会增加一个Int?
- 5. 每次更新路由时都会调用一个函数vue.js
- 6. 每次调用JavaScript函数时都会启动CSS动画?
- 7. Android onUpgrade每次都会被调用
- 8. IAuthorizationFilter每次都不会调用
- 9. 为什么我每次调用webmethod时都会调用WebService构造函数?
- 10. 每次使用时都会调用/加载静态字段吗?
- 11. 系统调用vs函数调用
- 12. 系统调用导致分段错误
- 13. DBD :: Oracle导致系统调用损坏?
- 14. 系统调用lseek导致段错误
- 15. 每次都调用jQuery ajaxComplete?
- 16. adapter.notifyDataSetChanged()每次都会导致NullPointerException错误
- 17. 每次配置更改时,onRetainNonConfigurationInstance()都会调用吗?
- 18. 每次访问sessionscoped bean时都会调用方法吗?
- 19. 每次调用方法时Func都会编译吗?
- 20. 通过NSURLConnection问题调用Webservice,每次都不会调用?
- 21. PHP - 在对象中调用函数会导致错误:'调用'
- 22. 所有的glfw函数都会调用错误回调吗?
- 23. 如果variable = new Model。每次调用变量时都会调用新的函数吗?
- 24. 在applicationDidBecomeActive中调用NSRunLoop方法会导致系统不响应
- 25. 这个getter在每次引用时都会调用数据库吗?
- 26. Mutex是否会调用系统调用?
- 27. 在WCF中使用ASP.NET会话=每次调用都会丢失
- 28. 每次调用函数时都生成相同的数字
- 29. 调用一组函数,每个函数都会收到一个回调
- 30. 多次调用RemoveFromSuperView会导致崩溃/错误吗?
如果你在屏幕上看到它,那么它不会被缓冲。 – 2013-03-02 03:48:56
不,'puts()并不总是调用系统调用。 Unix缓存输出的C stdio库,通常在(a)它进入终端时写出缓冲区(系统调用),和(b)写入新行(作为puts(3))。如果stdout不是终端,它只是被缓存直到缓冲区已满。 – vonbrand 2013-03-02 03:57:02