每日一练(二十四)

12.21 TCP与UDP的区别

  • TCP面向连接;UDP面向无连接
  • TCP提供:可靠交付、无差错、不丢失、不重复、按序到达;UDP不提供可靠交付、不保证不丢失、不保证顺序到达
  • TCP面向字节流的,发送的是一个流,无头无尾;UDP时面向数据报的,一个一个发送数据报
  • TCP可以提供流量控制和拥塞控制,即防止对端被压垮,也防止网络被压垮

12.22 I/O重定向的使用技巧

通过IO重定向,可以将命令的输入来源以及输出地点重定向为某一个文件。

下面介绍一些IO重定向的小技巧:

  • > hh.txt:可以创建一个文件

  • ls -l > hh.txt:可以将标准输出重定向到hh.txt文件中

  • > hh.txt:可以擦除文件内容,因为重定向每次输入之前都会清除文件

  • 2> hh.txt:可以将标准错误重定向到文件

  • ls -l /feak &> hh.txt:可以将标准输出和标准错误同时重定向到文件中

  • 当不需要出错信息的时候,可以通过> /dev/null重定向错误到这个文件中(黑洞)

  • 通过cat命令向文件中写入数据:cat >> hh.txt,命令行输入之后以Ctrl+D进行写入

    在这里插入图片描述

    • 通过管道来建立一个过滤器:ls /bin /usr/bin | sort | less,可以对两个目录下的所有文件进行排序

12.23 栈的压入与弹出

6、若已知一个栈的入栈顺序为1、2、3、4,其出栈顺序为P1、P2、P3、P4,则P2、P4不可能是()。

2、1

4、3

2、4

1、4

答案:B

这里涉及到栈的压入和弹出,先压入、后弹出。每次压入后判断栈顶元素是否为要弹出的元素,如果是就弹出,再判断下一个,如果弹出后下一个不满足,则继续入栈。

力扣:点击跳转链接

12.24 memmove解决内存重叠问题

参考链接

处理内存重叠问题就要涉及到两个函数了:memcpy()memmove(),下面先介绍一下两个函数的函数原型

memcpy():

NAME
       memcpy - copy memory area
SYNOPSIS
       #include <string.h>

       void *memcpy(void *dest, const void *src, size_t n);

DESCRIPTION
       The memcpy() function copies n bytes from memory area src to memory area dest.  The memory areas must not overlap.  Use memmove(3) if the memory areas do overlap.

可以看出memcpy()知识单纯的拷贝地址,并没有考虑地址重叠的问题,但是它推荐使用memmove()来解决地址重叠问题,其函数原型如下:

NAME
       memmove - copy memory area

SYNOPSIS
       #include <string.h>

       void *memmove(void *dest, const void *src, size_t n);

DESCRIPTION
       The  memmove() function copies n bytes from memory area src to memory area dest.  The mem‐
       ory areas may overlap: copying takes place as though the bytes in  src  are  first  copied
       into  a  temporary  array that does not overlap src or dest, and the bytes are then copied
       from the temporary array to dest.

两个函数实现的对比:

void* memmove(void* dest, void* source, size_t count) 
{ 
    assert((dest!=NULL) && (source !=NULL)); 
    void* ret = dest; 
    if (dest <= source || dest >= (source + count))   //无重叠
    { 
    while (count --)
       *dest++ = *source++; 
    } 
   else      //重叠处理
   { 
      dest += count - 1; 
      source += count - 1; 
      while (count--) 
         *dest-- = *source--;
  } 
  return ret; 
}

void* memcpy(void* dest, void* source, size_t count) 
{ 
   assert((dest!=NULL) && (source !=NULL)); 
   void* ret = dest; 
   while (count--) 
   *dest++ = *source; 
   return ret; 
}

12.25 Linux中常用查找命令

参考链接

1、最强大的搜索命令:find 查找各种文件的命令 
2、在文件资料中查找文件:locate  
3、搜索命令所在的目录及别名信息:which 
4、搜索命令所在的目录及帮助文档路径:whereis
5、在文件中搜寻字符串匹配的行并输出:grep
6、分页显示一个文件或任何输出结果:more
7、分页显示一个文件并且可以回头:less
8、指定显示前多少行文件内容:head
9、指定显示文件后多少行内容:tail
10、查看一个文件:cat
11、查看文件内容多少字符多少行多少字节:wc
12、排序文件内容:sort

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通讯录管理系统 通讯录(add_book)中的联系人包含以下信息项:姓名、手机、办公电话、家庭电话、电子邮箱、所在省市、工作单位、家庭住址,群组分类(亲属、同事、同学、朋友、其他)。 Name Mobile phones Office phone Family telephone E-mail In cities Work units0 Address Group classification (relative, colleagues, friends, classmates, other). 系统的主要功能包括: 1. 输入联系人的信息,要求:至少输入10个联系人的数据,且注意数据的多样性。 2. 按姓名对联系人信息进行排序,并将排序后信息存放到一个文本文件中。 3. 添加联系人的信息,在已经存在的通讯录文件中添加若干个联系人。要求:添加后仍按联系人的姓名排序,并保存至原文件。 4. 删除联系人的信息,输入一个姓名,若通讯录中有该联系人的信息,则删除该联系人,否则输出提示信息,并提示用户选择是否继续进行删除操作。 5. 修改联系人的信息,输入一个姓名,根据具体需要修改该联系人的某一项信息,将修改后的信息重新保存到通讯录文件中,并提示用户选择是否继续进行修改操作。 6. 按不同条件对通讯录进行查询操作,输出满足条件的联系人的信息。 (1) 按姓名查询,包括精确查询(输入全名),模糊查询(输入姓); (2) 按手机号码查询,输入全部号码或号码位段(如输入130、133、139等); (3) 按群组分类查询,输入分类名称,输出该群组的全部联系人信息。 7. 输出联系人的信息Contact information,按一定格式输出信息,保证信息排列整齐美观。ContactPerson
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值