- 博客(33)
- 收藏
- 关注
原创 Python装饰器(二)
内置的装饰器property先看一个例子:class Student(): def __init__(self, age): self.age = age a = Student(18)a.age = 20这里age属性可以被直接更改,如果我们需要实现age私有化,可以使用如下:class Student(): def __init__(self, age): self.__age = age def getage(self): print(self.__age
2021-03-05 16:20:15 147
原创 Python装饰器(一)
为什么需要装饰器先看两个例子def one_hello(): print ("hello!") def two_hello(): print ("hello!") if __name__ == '__main__': one_hello() two_hello()如果我们要调试这两个函数,有时候会要求调用每个方法前都要记录进入函数的名称,可以最原始的方法如下:def one_hello(): print "[DEBUG]: enter one_h
2021-03-05 15:23:33 131
原创 Redis0.1源码阅读笔记(一)
准备工作从网络上下载了redis-0.1的代码,这个版本代码量少,容易看懂也包含了作者开发redis最初的很多基础的想法和理论,是比较好的源码阅读材料。从Redis源码下载地址下载后,解压到自己指定的目录。进入目录执行make,生成三个可执行文件 redis-benchmark(redis压力测试程序), redis-server(redis服务程序), redis-cli(redis客户端程序)目录介绍文件名简介client-libraries对各种语言API接口支持的实现
2021-02-04 15:15:24 365
原创 C语言与Linux文件操作
函数#include <stdio.h>FILE *fopen(const char *path, const char *mode);#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode
2021-01-15 10:56:59 128
原创 网络小知识(一):一些基本概念
概述TCP/IP体系结构来源于实际工作,用于满足多种不同的分组交换计算机网络的互连需求。这由一组网关(后来称为路由器)来实现,网关可以在互不兼容的网络之间提供翻译功能。路由器通常是连接网络的一台专用设备,其优点是提供很多不同物理网络的连接,例如以太网,Wi-Fi, 点到点链路。 DSL等等。当前这些设备又被称为IP路由器,在历史上曾被称为网关,这个术语用于很多比较旧的文献中。当前的网关技术用于表示应用层网关(ALG),它为一个特定的应用(通常是电子邮件或文件传输)连接两个不同的协议族(TCP/IP和IBM
2020-12-26 15:38:18 491
原创 SFML从入门到放弃(一)
Handling time(时间的处理)时间的转换sf::Time t1 = sf::microseconds(10000);sf::Time t2 = sf::milliseconds(10);sf::Time t3 = sf::seconds(0.01f);sf::Int64 usec = t1.asMicroseconds();sf::Int32 msec = t2.asMilliseconds();float sec = t3.asSeconds();时间的运算sf:
2020-12-21 23:38:43 1300
原创 (一)wireshark的安装
Linux(Ubuntu)# 安装wireshark$ sudo apt-get install wireshark# 新增wireshark用户组$ sudo groupadd wireshark# 将dumpcap更改为wireshark用户组$ sudo chgrp wireshark /usr/bin/dumpcap# 让wireshark用户组有root权限使用dumpcap$ sudo chmod 4755 /usr/bin/dumpcap# 将当前用户加入wireshark用
2020-12-19 16:31:45 265 1
原创 网络入门科普
简介先打电话说起,中国国家代码0086,杭州市区号0571,你们公司所在区的电信局分号是8999(网络地址),分到的具体号码是8888(主机地址),组成的号码就是0571 8999 8888(ip地址),本地电信局用来分辨各个局采用的是掩码1111 1111 0000。现在同电信局下的电话0571 8999 5555给你拨打电话,那么电信局先对(0571 8999 8888)&(1111 1111 0000)得到0571 8999 知道你的电话号码就在他们的电话网络中,于是电信局就把0571 89
2020-12-19 16:26:42 873 1
原创 simpleNES与SFML入门初步(一)
simpleNES需要安装SFML库(ubuntu下,Linux上安装软件最好使用国内镜像源(阿里云等),这样下载安装会快很多)sudo apt-get install libsfml-dev从github下载到本地git clone https://github.com/amhndu/SimpleNES后按照README.MD操作注意:./SimpleNES ~/Games/SuperMarioBros.nes中的nes资源需要从nes资源网站自行下载。simpleNES中使用的sf命名空间
2020-12-16 22:51:17 2725 2
原创 内核启动阶段kernel_init(init)进程分析
启动在kernel进入c语言阶段后,会开始执行start_kernel函数,它负责进行kernel正式运行前各个功能的初始化:打印了一些信息、内核工作需要的模块的初始化被依次调用(譬如内存管理、调度系统、异常处理···),最后末尾调用了一个rest_init函数启动了三个进程(idle、kernel_init、kthreadd),来开启操作系统的正式运行。如下图所示:idle是操作系统的空闲进程,运行在内核态,当cpu空闲的时候会去运行它idle进程其pid=0,其前身是系统创建的第一个进程,也是唯
2020-12-05 11:31:39 772
原创 标准输入输出函数%[]和%n说明符的使用方法
标准输入输出函数scanf具有相对较多的转换说明符,它常常作为入门级函数出现在各种教材中。但奇怪的是,[]和n这两种都为c89/c99所规定的标准说明符却鲜少在大多数教材中出现。虽然[]和n说明符的使用频率不及其它说明符,但两者在程序设计中的作用仍然不可小视,尤其是[]说明符。众所周之,scanf以空白字符为定界符,但如果输入的字符串是以其它字符为定界符的,那怎么办?[]就是专门处理这个问题的转换说明符。[]转换说明符可以通过两种方式产生结果字符集,如果第一个[字符右边没有抑扬符(^),那么处于[]之间的
2020-12-04 17:17:51 561
原创 理解C语言函数声明:复杂指针解析之右左法则
简介The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you encounter parentheses, the direction should be reversed. Once everything in the parentheses has been parsed, jump out of it. Continue
2020-12-04 16:54:49 187
原创 vim与shell的快捷操作
vimvim常用快捷键:n,m< 缩进tab:n,m> 扩展tabu 撤销上一步的操作Ctrl+r 恢复上一步被撤销的操作vim配置文件#" 这两个符号为vimrc中的注释标识#设置不兼容vi,使用vim扩展功能 set nocompatible#indent: 如果用了:set indent,:set ai 等自动缩进,想用退格键将字段缩进的删掉,必须设置这个选项。否则不响应。#eol:如果插入模式下在行开头,想通过退格键合并两行,需要设置eol。#star
2020-12-04 09:42:00 383
原创 最小覆盖子串
string minWindow(string s, string t) {unordered_map<char, int> need, window;for (char c : t) need[c]++;int left = 0, right = 0;int valid = 0;// 记录最小覆盖子串的起始索引及长度int start = 0, len = INT_MAX;while (right < s.size()) { // c 是将移入窗口的字符 c
2020-12-02 23:15:27 222
原创 System V消息队列(三):简单并发服务器
简单并发服务器头文件myhead.h#ifndef MYHEAD_H_#define MYHEAD_H_#include<stdio.h>#include<sys/types.h>#include<sys/wait.h>#include<unistd.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<fcntl.h&
2020-11-26 11:15:24 134
原创 System V消息队列(二):简单迭代服务器
简单迭代服务器头文件myhead.h#ifndef MYHEAD_H_#define MYHEAD_H_#include<stdio.h>#include<sys/types.h>#include<sys/wait.h>#include<unistd.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<fcntl.h&
2020-11-25 16:58:13 104
原创 System V消息队列(一)
踩坑简介本想练习下习题3.1,没想到坑是一个接一个,看代码代码myhead.h#ifndef MYHEAD_H_#define MYHEAD_H_#include<stdio.h>#include<sys/types.h>#include<sys/wait.h>#include<unistd.h>#include<stdlib.h>#include<errno.h>#include<string.h>
2020-11-25 10:37:01 197
原创 Posix消息队列(二)
mq_receive 与mq_send简要补充:mq_receive 的len参数的值不能小于指定消息队列中的消息的最大大小,即使为attr.mq_msgsize-1也会返回错误!!!代码myhead.h#ifndef MYHEAD_H_#define MYHEAD_H_#include<stdio.h>#include<sys/types.h>#include<sys/wait.h>#include<unistd.h>#include
2020-11-24 20:38:02 101
原创 Posix消息队列(一)
unix与linux的踩坑unix网络编程 卷2进程间通信 Posix消息队列一章中5.3节,创建的消息队列在== /tmp== 目录下,实际操作的时候发现该目录下没有新创建的消息队列,在Linux man page上发现默认创建位置在==/dev/mqueue/==下,https://linux.die.net/man/7/mq_overview在编译时报undefined reference to mq_open、undefined reference to mq_close时,除了要包含头文件
2020-11-23 17:06:55 228
原创 FIFO创建迭代服务器(四)
简介迭代服务器:逐一处理客户请求代码myhead.h#ifndef MYHEAD_H_#define MYHEAD_H_#include<stdio.h>#include<sys/types.h>#include<sys/wait.h>#include<unistd.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<
2020-11-22 14:55:03 136
原创 FIFO(三)
简介#include<sys/types.h>#include<sys/stat.h>int mkfifo(const char *pathname, mode_t mode);//succss 0, fail -1/* mkfifo类似于open,不过其已隐含指定O_CREAT|O_EXCL,要么创建一个新的FIFO,要么返回一个EEXIST错误(指定的FIFO已存在)。 此时可以根据返回的EEXIST改用open打开这个fifo。*/代码有血缘关系的进程m
2020-11-21 14:15:58 138
原创 管道:popen与pclose(二)
简介#include<stdio.h>FILE* popen(const char *command, const char *type);/* 创建管道并启动command的进程 type:"r" 将调用进程读进command的标准输出 type "w" 将调用进程写到command的标准输入 注意:调用popen不对标准错误输出做任何处理,只有标准输出才被重定向到由他创建的管道 command产生的错误提示,由他自己输出,非popen*/int pclose(F
2020-11-21 10:57:52 169
原创 无名管道(一)
管道UNIX网络编程:进程间的通信手写之管道篇代码myhead.h#ifndef MYHEAD_H_#define MYHEAD_H_#include<stdio.h>#include<sys/types.h>#include<sys/wait.h>#include<unistd.h>#include<stdlib.h>#include<errno.h>#include<string.h>#in
2020-11-21 10:20:01 219
原创 gcc的-g选项做了哪些操作
如果想用调试器执行一个可执行文件, 在用gcc编译时必须加上-g选项:gcc -o test test.c -g加上-g选项以后,gcc在编译是会做以下额外的操作:1. 创建符号表,符号表包含了程序中使用的变量名称的列表。2. 关闭所有的优化机制,以便程序执行过程中严格按照原来的C代码进行...
2020-09-01 14:32:18 5375
原创 C语言内存知识
一直都把堆栈放一起,所以很多人会误以为他们的组合是一个词语,就像“衣服”一样简单,其实不然,今天在下就将最近学习总结的一些与大家分享。一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。 2、堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于...
2020-07-23 10:12:41 379
原创 gcc 库文件细节知识个人汇总
包含多个头文件查找路径 -I/home/a/1/include -I/home/a/2/include"“"test.h"1.到c代码的目录找 2.到环境变量里目录里找 3.到编译时-I参数指定的目录里找<test.h> gcc 只在环境变量目录里找 找不到即失败 vc 现在环境变量里找,找不到在尝试其他的目录GCC在链接多个库时,如果库本身存在引用,例如 A.a引用了B.a的函数,则在GCC参数上 -lA要放在-lB的前面,...
2020-07-21 16:01:52 177
原创 C语言的预处理相关知识
预处理, 展开头文件/宏替换/去掉注释/条件编译 (test.i main .i)__LINE__表示正在编译的文件的行号__FILE__表示正在编译的文件的名字__DATE__表示编译时刻的日期字符串,例如: "25 Dec 2007"__TIME__表示编译时刻的时间字符串,例如: "12:30:55"__STDC__ 判断该文件是不是定义成标准 C 程序 ...
2020-06-15 14:35:26 170
原创 SHELL与AWK混合编程(一)
awk中使用shell中的变量一:"'$var'" 双单这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法。如:var="test"awk 'BEGIN{print "'$var'"}'这种写法其实际是双括号变为单括号的常量,传递给了awk。二:'"$var"' 双单双这种写法与上一种类似。如果变量含空格,则变为'""$var""'较为可靠。如果var中含空格,为了shell不把空格作为分格符,便应该如下使用:var="this is a test"awk 'BEGI..
2020-06-12 17:03:37 258
原创 Shell如何读取最后一个参数
for last; do true; doneecho $lastecho "${@: -1}"a=($@)for i in ${a[@]};do echo $idone url=$iecho ${url}evalecho\${$#}echo${!#}bash中以${!name}形式出现的变量替换,就是间接替换。bash首先,计算$name的值,并用它的值来替换中括号里面的值,再作一次变 量替换。(本人测试失败)...
2020-06-10 20:57:00 4561
原创 AWK学习笔记(二)
awk的操作符awk在一行内容里先匹配是否含有某关键字,然后再决定要不要对此行进行相关操作,awk ‘/关键字/{print $n}’。但是如果想判断,某个字段(awk对行进行分段)是否含有某个关键字,或者是否满足某个正则表达式表示的意思,才会进行相关操作。awk ‘/关键字/{print $n}’==和!=操作符的用法[root@vms63 ~]# cat aa.txtaaa 1 root 11111bbb 2 ro2t 222 ddd aaaccc 3 xxxx r22.
2020-06-09 22:48:46 229
原创 AWK学习笔记(一)
awk是一款很强大的文本处理工具,他把所要处理的字符串 按行 读入到内存进行分段处理。默认情况下是以空格或者tab作为分隔符,对每个分段都分配一个名字,第1部分用$1表示,第2部分用$2表示以此类推,整行内容用$0表示,具体如下:Have a nice day $1 $2 $3 $4 如果想对哪部分进行操作的话,直接用$n(n是数字)指定就可以了,这里的的操作一般是指print (自动换行)。printf则不会自动换行。awk的基本语法:awk ‘{pr.
2020-06-09 14:56:51 784
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人