深入解析Linux下\r\n的问题

常在Linux下操作,难免要遇到\r\n问题,特别在很多地方比如最近的邮件发送,怎么都\r\n了,以前只有\n的时代好像已经过去了,因为我是一个比较喜欢总结的人,一个喜欢理论先行的人,所以,认真的测试并且理解了一番,尽管我个人认为是比较可以了,但,如果哪位高手看出了不妥之处,不吝赐教!
一、例子
源文件:main.c
例一:
#include <stdio.h>
int main(void)
{
       printf("dddddd"); //6个d
       printf("12345");
       return 0;
}
结果:空

例二:
       printf("dddddd\r");
       printf("12345 ");
结果:空

例三:
       printf("dddddd\n ");
       printf("12345 ");
结果:dddddd

例四:
       printf("dddddd\r");
       printf("12345\n");
结果:12345d
 
例五:
       printf("dddddd\r\n");
       printf("12345\n");
结果:dddddd
             12345

例六:
       printf("dddddd\n \r ");
       printf("12345\n");
结果:同五

例七:
       printf("dddddd\n \r ");
       printf("12345");
结果:dddddd

例八:
       printf("dddddd\n");
       printf("12345\r ");
结果:dddddd

例九:
       printf("dddddd\n");
       printf("12345\n\r ");
结果:同五
 
二、总结:
根据上面九个简单而清楚的例子,以及我个人的一些理解,我就做个总结吧:
1.回车换行符,是2个符。一个回车,一个换行。\r仅仅是回车,\n是换行。一个是控制屏幕或者从键盘的Enter键输入。另一个是控制“打印机”!
2.回车 = 光标到达最左侧,换行 = 移到下一行。如果只回车,打印的东西会覆盖同行以前的内容,如果只换行,打印的东西会在下一行的先一个位置继续。
3.\r实际是回到行首。\n如果下一行已经有了一些内容的话它会在那些内容的后边.因为一般情况下下一行是没有数据的,很多时候\n也就成了\r\n作用一样。

(0)

相关推荐

  • 深入解析Linux下\r\n的问题

    常在Linux下操作,难免要遇到\r\n问题,特别在很多地方比如最近的邮件发送,怎么都\r\n了,以前只有\n的时代好像已经过去了,因为我是一个比较喜欢总结的人,一个喜欢理论先行的人,所以,认真的测试并且理解了一番,尽管我个人认为是比较可以了,但,如果哪位高手看出了不妥之处,不吝赐教!一.例子源文件:main.c例一:#include <stdio.h>int main(void){       printf("dddddd"); //6个d       printf(&q

  • 深入解析Linux下MySQL数据库的备份与还原

    深入解析Linux下MySQL数据库的备份与还原 1. 备份 [root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) [root@localhost mysql]# mysqldump -u root -p voice>voice.sql,输入密码即可. 2. 还原法一:[root@localhost ~]# mysql -u root -p 回车,输入密码,进入MySQL的控制台"mysql>&

  • 解析Linux下C++编译和链接

    编译原理 将如下最简单的C++程序(main.cpp)编译成可执行目标程序,实际上可以分为四个步骤:预处理.编译.汇编.链接,可以通过 g++ main.cpp –v看到详细的过程,不过现在编译器已经把预处理和编译过程合并. 预处理:g++ -E main.cpp -o main.ii,-E表示只进行预处理.预处理主要是处理各种宏展开:添加行号和文件标识符,为编译器产生调试信息提供便利:删除注释:保留编译器用到的编译器指令等. 编译:g++ -S main.ii –o main.s,-S表示只编

  • 深入解析Linux下的定时任务

    在做定时任务之前,先检查一下当前的系统时间[date  "+%Y-%m-%d %T"]和硬件时钟时间[hwclock]: [root@localhost test]# date  "+%Y-%m-%d %T"2013-07-01 07:57:52 [root@localhost test]# hwclock2013年07月01日 星期一 07时57分48秒  -0.059059 seconds 上面的结果显示,我当前的时钟时间都不正确,先设置系统时间:[root@l

  • 解析Linux下Varnish缓存的配置优化

    Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好. 但与老牌的squid相比,各有各的优劣势,网上大量的相对比较只是在其个人对自己熟悉的应用的最大使用上的发挥而已,可能squid到了有能力的人手上才足以发挥最强大的威力Varnish采用了"Visual Page Cache"技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存.磁盘中交换文件

  • 解析linux下安装memcacheq(mcq)全过程笔记

    memcacheQ是一个单纯的分布式消息队列服务.一,MEMCACHEQ的应用背景Web应用中为什么会需要消息队列?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too manyconnections错误.通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力.在Web2.0的时代,高并发的情况越来越常见,从而使消息队列有成为居家必备的趋势,相

  • 解析Linux下的时间函数:设置以及获取时间的方法

    一.时间函数 复制代码 代码如下: time_t time(time_t *t);char *asctime(const struct tm *tm);char *asctime_r(const struct tm *tm, char *buf);char *ctime(const time_t *timep);char *ctime_r(const time_t *timep, char *buf);struct tm *gmtime(const time_t *timep); //获取的为英

  • Linux下的多线程编程实例解析

    1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程.现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux. 为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题. 使用多线程的理由之一是和进程相比,它

  • Linux下tcpdump命令解析及使用详解

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具.tcpdump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息. 实用命令实例 默认启动 tcpdump 普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包. 监视指定网络接口的数据包 tcpdum

  • linux下修改文件权限chmod命令详细解析

    使用 Linux 的chmod命令控制谁可以访问读写或运行目标文件. 在 Linux 中,谁可以对文件或目录做什么是通过一系列权限来控制的. 权限可以控制对文件或目录执行的操作(读写或执行). 我们可以使用-l(长格式)选项来ls列出文件和目录的文件权限. ls -l 在每一行中,第一个字符标识列出条目类型.如果它是破折号 ( -),则它是一个文件.如果是字母d ,则是目录. 接下来的九个字符代表三组权限的设置. 前三个字符显示拥有文件的用户的权限(用户权限). 中间三个字符显示用户组成员的权限

随机推荐