首页
学习
活动
专区
圈层
工具
发布

【Linux网络】封装Socket

在前面几篇文章中,我们实现了Socket编程,也就是基于UDP和TCP进行了网络编程,通过这几次编程我们已经熟悉了Socket编程相关的系统调用,那么这篇文章我们就来使用模版方法模式封装一个Socket...,而如果是int类型的话,只能使用原始的系统调用,但我们已经封装了就尽量使用封装的系统调用,这样虽然也行但是有点挫 namespace SocketModule { using namespace...但是我们封装的 InetAddr 类只有构造的时候是将网络字节序转为主机字节序,我们这里是输出型参数,所以我们可以在 InetAddr 类中新增一个网络转主机的函数SetAddr,通过参数来调用SetAddr...服务端 封装好之后就是使用封装的Socket来实现服务端,我们已经实现过了,这里就不再介绍了,只需要将原先的原生系统调用换成封装的Socket即可 #pragma once #include "Socket.hpp...后面文章我们会再谈协议,然后自己来定义协议,然后顶层封装一个任务,通过我们自己定义的协议来完成序列化和反序列化,让对端拿到我们的任务去处理,所以客户端也放在后面实现

15410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    RT-thread finsh移植到linux平台

    FinSH移植 FinSH作为RT-Thread的组件, 是以一个独立的线程形式存在, 要将其移植到linux平台,需要对底层相关调用,诸如线程,信号, 标准输入输出等方面进行移植,移植相关的基本介绍可阅读官方提供的...源码下载: RT-Thread源码下载 移植要点 1. os相关 线程创建 RT-Thread中线程创建使用rt_thread_init函数, 在linux平台要使用pthread_create创建线程...rt_thread_startup(&finsh_thread); 信号 RT-Thread中信号接口rt_sem_init等修改为linux平台接口sem_init。...输入输出 输入输出相关的主要是针对命令行输入, 在RT-Thread中是通过串口等方式进行输入输出,而在linux平台,需要修改为终端输入输出,可以使用宏RT_USING_POSIX开启POSIX接口,...则会自动使用满足linux平台的接口。

    3.9K10

    【Linux】:线程库简单封装

    之前我们在这篇博客 里面已经学习了关于线程概念及控制的相关内容,这篇博客主要是关于实现一个线程库的封装,完成对线程的创建、管理和销毁的基本功能 在书写封装库之前,我们先写对应的 Makefile...两种解决办法: ① 把 Rountine 写到类外,但是不支持这样做,因为我们就是要做封装 ② 就是加一个 static 来去掉 this 指针 因此: pthread_create 需要一个全局函数或静态成员函数...封装与局部性: 将 func_t 定义在类内部,保持了类内部的一致性和封装性。每个类实例都可以通过该类型别名来引用线程回调函数类型,避免了外部暴露太多实现细节。...类外部定义类型别名虽然也能使用,但会打破类的封装,增加不必要的复杂性。...共勉 【*★,°*:.☆( ̄▽ ̄)/$:*.°★* 】那么本篇到此就结束啦,如果有不懂 和 发现问题的小伙伴可以在评论区说出来哦,同时我还会继续更新关于【Linux】的内容,请持续关注我 !!

    62810

    Mysql thread 与 OS thread

    来进行处理,当然,也可能是同一个os thread(如果只有一个os thread可用,所有事务会有同一个os thread处理;如果有多个os thread可用,将会轮换使用不同的os thread)...os thread,但是该mysql thread将被删除。...thread或task标识符: 如果mysql thread在生命周期中与一个os thread关联,thread_os_id字段将包含os thread ID 如果mysql thread在生命周期中没有和...os thread关联,thread_os_id将为NULL 在windows下,thread_os_id可以在任务管理器中看到;在linux下,thread_os_id和gettid()方法对应,可以使用...来处理 mysql thread实际会使用某个os thread来处理请求 connection关闭或kill mysql thread时,mysql thread会销毁,但是os thread可以继续复用

    4.2K60

    【Linux】线程池封装与介绍

    线程池介绍   之前我们实现了线程、互斥量、条件变量以及日志的封装,现在我们可以基于以上内容来封装一个线程池。   线程池是一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。...线程池封装 首先我们需要包含需要的头文件以及命名空间,线程池类中成员变量需要一把锁、条件变量、条件变量下等待的线程个数、存放线程的数组、线程总个数、存放任务的任务队列以及线程池是否在运行的状态表示: #...: _threads) { thread->Join(); LOG(LogLevel::INFO) thread.../thread_pool [2025-02-04 09:54:51 ][INFO] [2360325] [ThreadPool.hpp] [68] - Thread-1Create Success.....sleep(5); ThreadPool::GetInstance()->Wait(); return 0; } 结果如下: tutu@hecs-16648:~/linux

    41310

    Linux内核线程kernel thread详解--Linux进程的管理与调度(十)

    和kthread_run, 同时将内核线程的创建操作延后, 交给一个工作队列workqueue, 参见http://lxr.linux.no/linux+v2.6.13/kernel/kthread.c...于是linux-2.6.22引入了kthreadd进程, 并随后演变为2号进程, 它在系统初始化时同1号进程一起被创建(当然肯定是通过kernel_thread), 参见rest_init函数, 并随后演变为创建内核线程的真正建造师...这一封装好的接口实现的, 而是使用更底层的细节 参见 http://lxr.free-electrons.com/source/kernel/fork.c?...v=2.4.37;i=arch_kernel_thread 但是这种方式创建的线程并不适合运行,因此内核提供了daemonize函数, 其声明在include/linux/sched.h中 //..., 虽然创建的代价已经很小了, 但是对于追求性能的linux内核来说还不能忍受 因此我们只能说kernel_thread是一个古老的接口, 内核中的有些地方仍然在使用该方法, 将一个函数直接传递给内核来创建内核线程

    8.7K52

    linux封装rm -rf指令,防止误删

    对于一个linux新手,敲错指令是常有的事情,智者千虑必有一失,即使对于一个老司机来说,也难免会有操作失误的时候,而误删导致的后果往往是无法弥补的。...{RANDOM} echo "[${i}] delete completed" fi done 2.cleartrash.sh 用于定期清理回收站(因为对rm -rf进行封装后.../trash cd ${trashdir} find ./ -mtime +3 -exec 'rm' -rf {} \; #找到回收站中修改日期大于3天的文件,执行真正的删除 (注:rm被封装后...执行清理回收站的脚本 >>service crond restart #重启crond服务使之生效: >>crontab -l #如果可以看到刚才添加的那段话,则证明添加成功 最后补充一句:使用该方法封装...rm-rf指令后确实可以避免误删,但是如果执行带单引号的’rm’ -rf操作,就会调用系统原先的删除功能,不经过封装脚本,直接删除文件。

    3.6K21

    【Linux】多线程 --- 线程概念 控制 封装

    既然所有的线程都要被调度,那每个线程都应该有自己独立的thread_id,独立的上下文,状态,优先级,独立的栈(线程执行进程中的某一个代码块儿)等等,那么大家不觉得熟悉吗?...3.初步认识原生线程库(在linux环境,C++11线程库底层封装了POSIX线程库) 1....所以,在Windows平台上,C++11的线程库底层封装了Windows线程库,而在Linux平台上,它底层封装了POSIX线程库(pthread)。...下面代码就是C++11形式的线程管理代码,这段代码的好处就是它可以跨平台运行,无论是在linux还是在windows环境下这段代码都可以跑,因为C++11的线程库底层封装了各个操作系统的线程库实现,这使得我们能够通过...三、线程封装(面向对象) 1.组件式的封装出一个线程类(像C++11线程库那样去管理线程) 1.

    1.7K30

    Linux源码解析-内核栈与thread_info结构详解

    linux中进程使用task_struct数据结构描述,其中有一个stack指针 struct task_struct { // ......void *stack; // 指向内核栈的指针 // ... }; task_struct数据结构中的stack成员指向thread_union结构(Linux内核通过thread_union...联合体来表示进程的内核栈) union thread_union { struct thread_info thread_info; unsigned long stack[THREAD_SIZE...信息, linux内核是支持不同体系的的, 但是不同的体系结构可能进程需要存储的信息不尽相同, 这就需要我们实现一种通用的方式, 我们将体系结构相关的部分和无关的部门进行分离,用一种通用的方式来描述进程...进程通过alloc_thread_info函数分配它的内核栈,通过free_thread_info函数释放所分配的内核栈,查看源码 alloc_thread_info函数通过调用__get_free_pages

    3.1K10
    领券