/* 一个让printf不正常工作的例子 */
/* 如果程序使用下面的一段汇编代码来实现返回操作系统,则printf向终端输出的字符流中,终端只显示字符流中最后一个\n符号前面的字符。
* 如果字符流没有\n,则所在字符都不能正常显示出来。
* 比如返回操作系统前,printf总共向终端输出如下字符流:
*
* XXXXXXXXXXX\n
* Xxxxxxxxxxxxxxxx\n\xxxxxx
* xxxxxxxxxxxxxx\n
* YYYYYYYYYYYYYYYyyyyyy
*
* 这样最后一符的所有Y都不会显示出来,事实上是最后一个\n后面的所有字符都不会在终端前面显示出来。
*
* 测试环境
* gcc版本:
* gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
* ubuntu版本:
* Linux abee-lisa-linux 2.6.35-32-generic #64-Ubuntu SMP Mon Jan 2 23:31:33 UTC 2012 i686 GNU/Linux
*
* 目前暂不知道到底这个软中断具体做了什么,so..留着有待研究咯.
*/
/* 哪个大哥大姐知道这是怎么回事的,望指点指点迷津呀。 ^_^ */
#include <stdio.h>
int main()
{
printf("this is a string with \\n \n");
printf("this is a string with \\n \n");
printf("this is a string without \\n");
/* 直接内联汇编 */
__asm__("movl $1,%eax\n \
movl $0,%ebx\n \
int $0x80"); //是返回操作系统了,并以返回值0返回。但是却影响了终端的显示。
//exit(0); /* 真正的exit(0); */
return 0;
}
/* 正常的输出应该是:
* this is a string with \n
* this is a string with \n
* this is a string without \n
* 但是,如果采用不同的返回操作系统的方式,結果是不一样的。
*/