unix学习
东东儿
苦海无涯肯争渡,人生当见一惊鸿
展开
-
使用systemtap模拟IO故障
最近需要做一些测试系统稳定性相关的工作,想要模拟一下IO抖动或者磁盘错误这样的故障,发现了systemtap这个工具,这个工具功能非常强大,不过具体原理没去了解,暂时没那么多时间,简单记录一下使用方法。先安装systemtapyum install systemtap使用之前需要安装对应的kernel-debuginfo包,直接用下面命令安装也行:stap-prep之后就可以使用systemtap了,在网上抄了一段来改了改,刚好够自己用:#!/usr/bin/stap# file: io原创 2022-01-18 21:53:21 · 1184 阅读 · 0 评论 -
为什么IO复用还需要搭配非阻塞IO
当数据达到socket缓冲区时,可能会因为一些原因被内核丢弃,比如,校验和错误,这时IO复用唤醒线程对socket读并不能读到数据,如果是阻塞IO就会被阻塞住。这个达到缓冲区的数据不一定被丢弃,但是也有可能被别人取走了,比如多个进程accept同一个套接字时引发的惊群现象,只有一个连接到来,但是所有的监听进程都被唤醒了,但是最终只有一个进程可以accept到这个请求,其他进程在阻塞IO进程下都...原创 2019-12-19 20:36:15 · 529 阅读 · 0 评论 -
UNIX编程学习——more指令实现
more指令more指令是unix操作系统中的自带指令,其功能是将文件中的内容输出到终端上。相似功能的指令还有cat、less。cat:将文件中所有内容全部输出到终端上。more:将文件中的内容逐页显示到终端上,用户按空格键显示下一页,按b键退出,按回车键显示下一行。less:比more拥有更多的功能,可以实现向前翻页。实现more指令在实现more指令之前,需要搞清楚,more指令的...原创 2019-03-24 13:46:43 · 1730 阅读 · 0 评论 -
UNIX编程学习——cp、ls、pwd、who指令实现
cp指令在unix操作系统中,cp指令用于将源文件复制到目标文件。实现cp指令其实现原理较为简单,不断读取源文件内容,直到全部读取,并将读取字符不断写入到目标文件中。代码#include"apue.h"#include<fcntl.h>#include<unistd.h>#include<stdio.h>#define BUFFSIZE 409...原创 2019-03-31 20:12:06 · 716 阅读 · 0 评论 -
一个简单静态web服务器
最近看完了apue中关于socket编程的部分,想要练习,就写了一个简单的静态web服务器。由于由于不了解http协议,通过参考其他博客简单学习了一下,在自己的web服务器中只实现了http协议中的 GET指令。代码#include<stdio.h>#include<string.h>#include<strings.h>#include<std...原创 2019-04-21 22:04:08 · 1068 阅读 · 0 评论 -
C++条件变量实现多线程顺序打印
最近在学习多线程的网络编程,互斥量和条件变量是多线程编程中常用的线程同步方式。在编写自己的高并发服务器的过程中对互斥量和条件变量进行了封装,想要测试一下自己封装的类是否正确,能否通过自己封装的条件变量类顺利实现多线程顺序打印。条件变量先来简单的看一下条件变量的常用接口:int pthread_cond_init(pthread_cond_t *cond, const pthread_cond...原创 2019-06-30 15:05:43 · 1971 阅读 · 1 评论 -
线程特定数据(TSD)
直接上代码,做个笔记,不怎么常用,怕以后忘掉了:#include<pthread.h>#include<functional>#include<iostream>#include<unistd.h>#include<sys/syscall.h>using namespace std;typedef function<v...原创 2019-09-24 15:15:34 · 409 阅读 · 0 评论