博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杂谈Linux编程(一)
阅读量:6869 次
发布时间:2019-06-26

本文共 1076 字,大约阅读时间需要 3 分钟。

hot3.png

1. 关于Standard I/O

stdout 是有缓存的,stderr 没有,我们可以用fflush(stdout)来讲缓冲区中的输出输出到console。
如下代码会有奇怪行为,因为stdout做了缓存。
while(1)
{
 printf(".");
 sleep(1);
}

2. exit(1)和abort()
abort()函数是在发生了没有预料到的事情的情况下调用的,比如一个switch-case语句中,用default来捕捉那些没能预料到的值。
exit(1)调用,发生了你遇到的的事情,但是这个事情不对,整个程序此时应该结束。比如打开一个file,结果失败了,就exit(1)。

3. 临时文件
如果程序使用到临时文件(通常创建于/tmp目录下),那么要注意以下几点
 =》 文件名要唯一 (用mkstemp或者mkostemp确保,create+open)
 =》 及时清除 (mkstemp后立马unlink)
如果是要使用文件流的话,用tmpfile(void),这个函数返回临时文件的文件流,并且能保证自动清除临时文件。

但是,对于在/tmp目录下创建的named pipe(FIFO),我们就不能用mkstemp和tmpfile,因为,通信双方有可能是两个不相关的进程,而他们必须知

道他们要打开的临时文件名(即管道名),所以用prename_pid_fifo这种形式比较合理,比如,cli_19882_fifo。

另外,temporary file提供了client-pipe-server之间传输大数据的一种方法。为了保证写操作的原子性,对named pipe(以下简称FIFO)的写操

作的字节数,必须要小于PIPE_BUF这个宏定义的数量;所以,如果client要给server传输大数据的话,就不可避免的出现了数据拆分的情况,而

server中处理包的线程有多个,于是就有可能出现不确定的行为,除非给各个线程间加上通信和同步,这样就把问题复杂化了。如果我们利用temp

file的话,那么client就只需要告诉server说“我给你传的这次数据比较大,在/tmp/xxxx”中,于是server就可以利用这个temp file来获取大段

信息;注意此时server要在读完temp file后unlink这个temp file。通常这个temp file的内容应该是“实际内容的长度(size_t的大小)+实际内

容”。

转载于:https://my.oschina.net/u/158589/blog/55270

你可能感兴趣的文章
Objective-C 快速排序
查看>>
linux命令
查看>>
DFA算法过滤敏感词,替换为*
查看>>
关于IDC机房网络带宽测试方案
查看>>
数字格式化函数
查看>>
Python入门学习路径图(2019最新版)
查看>>
mysql创建用户并授权
查看>>
内存优化思路
查看>>
简单的文字转语音方法,一分钟学会
查看>>
Python 数据库操作 SQLAlchemy
查看>>
UI交互设计的网站
查看>>
Python 工匠:编写地道循环的两个建议
查看>>
微信域名网址检测
查看>>
电话机器人,什么价格才是好的机器人
查看>>
我的友情链接
查看>>
Android中自定义样式与View的构造函数中的第三个参数defStyle的意义
查看>>
Eclipse中提高Android SDK Manager下载速度方法
查看>>
五、Storm入门之Bolt
查看>>
web开发插入数据时控制台没报错,可能是数据库表被锁了
查看>>
数据库中间件__mycat
查看>>