首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 实现群聊功能

今天的主题是在 Linux实现一个群聊功能,支持群聊,指定人私聊,群主禁言,踢出群聊的功能,实际上要实现这个功能,如果你阅读过我前两天我写一篇 Linux原始系统api实现两个终端实时聊天 ,那么,...在以上的基础上其实就是追加一下 两个功能即可,及群主禁言,和将谁踢出群聊的功能,因为群聊的基本功能我们实现了,而且私信的逻辑我们也实现了,ps,文本的代码在此。...A 向服务端发送一条消息服务端收到 A 的消息之后,将这条消息转发给到了所有的人,当然除了 A,这里的代码逻辑一撇如下,全部详细的代码就需要参考 Linux原始系统api实现两个终端实时聊天 这里了...buffer, strlen(buffer), 0); } }}私信的效果是:A 发送一条给到 B 的私信,只有 B 可以收到,C 是收不到的只有 B 收到的截图C 是收不到的继续实现禁言某人和踢出用户的功能要实现禁言的功能...2.实现踢出的逻辑这里的实现方式和实现屏蔽略微不同,而且还稍显简单,直接干掉 server 和 client 的连接即可,实现的方式如下:else if (strncmp(s, "/kick ", 6)

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

    linux实现文件共享samba,Linux环境下实现SAMBA服务文件共享

    一、实现SMB共享 1、在服务器安装软件包 yum -y install samba 2、创建samba用户和组 groudadd -r admins user alfa -G admins -s /sbin...share 将samba服务器设置的账号(就是第1步中建立的smbadmin账户,只填写它的账户和密码就可以)密码写入一个文件中,并设置600权限 5、挂载 挂载完成后mount -a 6、客户端实现多用户访问...useradd apple useradd banana 注意:成功以后,发现别人可以删除自己的文件,这不符合工作中的要求,为了实现合理的自己只能删除自己的文件,这里将继续下一步的操作 7、新建共享组...u apple 192.168.239.70 cifscreds add -u banana 192.168.239.70 banana用户的文件apple用户不能删除不能修改,只能查看 由此可见,实现文件权限的方式是

    9.4K20

    linux内核设计与实现

    ,并且实现了 unix的api linux没有直接使用unix的源代码,但完整表达了unix的设计目标并保证编程接口一致 2....线程在linux中的实现 4.1 liunx线程概述 一组线程共享进程内的内存地址空间,打开的文件和其他资源 线程机制支持并发程序设计技术,多处理器上保证真正的并行处理 linux实现线程的机制非常独特...,这个进程和其他进程共享某些资源 与其他系统(windows,solaris)实现差异巨大,这些系统内核专门提供线程的支持 4.2 linux线程创建 线程的创建和普通进程创建类型,只不过调用clone...调度算法 3.1 概述 linux调度程序定义与kernel/sched.c 2.5版本内核重写调度算法,和以前版本区别很大,实现以下目标 充分实现O(1)调度,不管多少进程或什么输入,每个算法能在恒定时间内完成...系统调用的实现 linux不提倡多用途的系统调用,每个系统调用都应该有明确的用途 接口应该尽量简洁,参数少。力求稳定不做改动 尽量为将来做考虑,尽量通用,不要做限制。

    2.9K52

    linux 内核pollselectepoll实现剖析

    EPOLL_CTL_DEL EPOLL_CTL_DEL 的实现调用的是 ep_remove 函数,函数只是清除ADD时, 添加的各种结构,EPOLL_CTL_MOD 的实现调用的是ep_modify...,在ep_modify中用新的事件掩码调用f_ops->poll,检测事件是否已可用,如果可用就直接唤醒epoll,这两个的实现与EPOLL_CTL_ADD 类似,代码上比较清晰,这里就不具体分析了。...(pwake) ep_poll_safewake(&ep->poll_wait); return 0; } epoll_wait /* epoll_wait实现...} return eventcnt; } eventpoll_poll 由于epoll自身也是文件系统,其描述符也可以被poll/select/epoll监视,因此需要实现...); } } return 0; } epoll全景 以下是epoll使用的全部数据结构之间的关系图,采用的是一种类UML图,希望对理解epoll的内部实现有所帮助

    69500

    Linux定时器实现

    一般定时器实现的方式有以下几种: 基于排序链表方式: 通过排序链表来保存定时器,由于链表是排序好的,所以获取最小(最早到期)的定时器的时间复杂度为 O(1)。...时间轮: 但对于Linux这种对定时器依赖性比较高(网络子模块的TCP协议使用了大量的定时器)的操作系统来说,以上的数据结构都是不能满足要求的。所以Linux使用了效率更高的定时器算法:时间轮。...而时间轮的实现方式与时钟类似,就是把到期时间当成一个轮,然后把定时器挂在这个轮子上面,每当时间走一秒就移动时针,并且执行那个时针上的定时器,如下图: ?...时钟通过时分秒来进行分级,当然我们也可以这样,但对于计算机来说,时分秒的分级不太友好,所以Linux内核中,对32位整型分为5个级别,第一个等级存储0 ~ 255秒 的定时器,第二个等级为 256秒 ~...Linux时间轮的实现 那么接下来我们看看Linux内核是怎么实现时间轮算法的。

    3K20

    Linux:断点原理与实现

    T 状态意味着:(TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态,接下来就可以通过 GDB 实现各种调试的操作了。...我们这次也要实现类似的效果,不过只是一个超简化版本,只考虑:在指定的位置暂停,获得进程的控制权。...前置知识准备 在实现之前,我们需要了解下必要的知识: 寄存器:RIP 如果之前没有了解 寄存器 的童鞋可以先看看:https://www.jianshu.com/p/029......实现思路 实现的思路非常简单 1. 先确定我们要断点的地址 在 GDB 中,我们是习惯对 行号 或者 函数名 直接设置断点,行号相对来说比较复杂,我们先展示 函数名 的。...在 Linux 环境下编译出来的可执行文件都是遵循 ELF 格式,如果没有特殊处理,它会保留比较完整的 符号表。 就拿开头的程序来当例子,可以通过 readelf -s a.out 查看: ?

    1.9K10

    Linux 信号量实现同步,实现互斥

    一.实现同步 同步模板 使用信号量实现同步时,需要将信号量的初值设置为0 semaphore s=0; p1() { p(s); 具体的代码 } p2() { 具体的代码 v(s); } 1...二.Linux下信号量实现同步,线程2先执行输出"hello",线程1后执行输出"world\n"的功能 #include #include #include...cout << "world" << endl; }); t1.join(); t2.join(); sem_destroy(&sem); return 0; } 执行结果: 三.实现互斥...互斥模板 互斥是对临界资源的保护 所以互斥只需要在临界区之前和之后分别进行加锁和解锁 需要注意的是,用信号量充当互斥锁实现互斥的时候,信号量的初值应设置为1,表示 临界资源的个数为1....四.使用Linux信号量实现互斥 #include #include #include #include

    2.2K40

    C 链表 - linux 如何实现

    链表是基本数据结构, 一开始学习数据结构时, 我一般这么定义, 对应实现从头或尾插入的处理函数, struct int_node_old { int val; struct int_node_old...= NULL; list = list->next); list->next = new; new->next = NULL; } 但是发现, 如果这么定义的话,每次实现一个list的结构...查看linux的源码, 发现linux中也为我们提供了相似的实现(源码), 把一些共性统一起来。 类是 python 中for_each处理,有些意思。...linux 下的链表定义在文件 include/linux/types.h, 采用的是双向列表 struct list_head { struct list_head *next, *prev;...list 利用这个定义, 我定义了一个自己的list数据结构, 并copy了一些接口实现,感受下,linux 是如何管理链表的。

    2.7K30

    Linux shell 实现HTTP服务

    解决思路 (1)编写一个shell脚本,检查 mysql 的状态,然后输出结果,例如状态正常时,返回状态码200及正确信息,否则返回状态码503及错误信息 (2)实现一个HTTP服务,有请求连接后,调用上面的检查脚本...,返回检查结果 (3)HAProxy 访问这个HTTP服务,根据返回的结果信息来判断这个 mysql 是否可用 如何方便快速的实现一个可以调用shell脚本的HTTP服务呢?...比较通用的方案就是 xinetd xinetd 是 Linux 的守护进程,全称为 extended interent daemon,扩展的网络守护进程 xinetd 可以打开一个端口,等待连接,你可以告诉...xinetd 便会执行脚本,然后直接返回脚本输出的内容 HAProxy -> xinetd -> mysql-check脚本,HAProxy 便取得了mysql的状态信息 xinetd 的配置案例 下面实现一个简单的

    2.4K40

    Linux实现SSH远程登录

    转自:http://songtl.com/linux-ssh-setting.html 远程登录方式有telnet和ssh两种方式,由于telnet使用的是明文传输,传输过程中系统帐号密码等重要信息容易被截获...其实很多linux版本如ubuntu已经内置了ssh-agent,这是一个远程连接的工具,通过ssh-agent可以发起远程连接,但是如果你要想实现在其他电脑远程登录自己的电脑,就必须安装openssh...Linux系统因为已经自带ssh-agent所以比较方便,直接在terminal里面输入以下命令 ssh username@ip username是你的登录账户,ip即ip地址,当然你也可以使用域名 ssh...当然是root用户,因为root是每个Linux系统都存在的用户。因此我们应该禁用root用户登录,找到 PermitRootLogin yes 把yes改为no即可。

    8.9K20

    实时Linux内核的实现

    限期调度器实现限期调度策略(SCHED_DEADLINE),实时调度器提供2种调度策略:先进先出调度(SCHED_FIFO)和轮流调度(SCHED_RR)。...实时互斥锁(rt_mutex)实现了优先级继承。锁的等待者按优先级从高到低排序,如果优先级相等,那么先申请锁的进程的优先级高。...实时内核使用实时互斥锁实现自旋锁,临界区是可以抢占的,支持优先级继承,spin_lock_irq()和spin_lock_irqsave()不会禁止硬中断。自旋锁的定义如下。...为了降低实现的复杂性,只允许一个进程获取读锁,进程可以递归获取读锁。 读写锁的定义如下。...14.参考文档 (1)A realtime preemption overview,https://lwn.net/Articles/146861/,(说明:Linux内核没有完全按照这篇文档实现) (

    6.5K40

    linux 内核pollselectepoll实现剖析

    EPOLL_CTL_DEL EPOLL_CTL_DEL 的实现调用的是 ep_remove 函数,函数只是清除ADD时, 添加的各种结构,EPOLL_CTL_MOD 的实现调用的是ep_modify...,在ep_modify中用新的事件掩码调用f_ops->poll,检测事件是否已可用,如果可用就直接唤醒epoll,这两个的实现与EPOLL_CTL_ADD 类似,代码上比较清晰,这里就不具体分析了。...(pwake) ep_poll_safewake(&ep->poll_wait); return 0; } epoll_wait /* epoll_wait实现...} return eventcnt; } eventpoll_poll 由于epoll自身也是文件系统,其描述符也可以被poll/select/epoll监视,因此需要实现...); } } return 0; } epoll全景 以下是epoll使用的全部数据结构之间的关系图,采用的是一种类UML图,希望对理解epoll的内部实现有所帮助

    1.1K10
    领券