- 博客(26)
- 收藏
- 关注
原创 当循环输入遇到EOF
一. 写出下面代码输出结果,并解释原因。#include <stdio.h>int main(int argc, char *argv[]){ int val_1 = -42; int val_2 = val_1 >> 10; printf("%d\n%d\n", val_1, val_2); unsigned int a = 42; unsigned int b = a >> 10; printf("%u\n%u
2021-12-14 22:10:28
1572
原创 聊天室项目文档
聊天室项目文档项目简述项目需求功能展示使用准备更改端口和IPmysql 中使用的表需要提前准备的mysql tables程序自动创建的mysql tables项目简述实现Linux环境下的简易聊天室,采用C/S模型,实现多客户端之间的稳定数据传输。可参考QQ、微信功能。聊天室项目源码聊天室项目分析聊天室项目文档项目需求1.账号管理登录、注册找回密码2.好友管理私聊(实时性)好友的添加、删除、查询查看好友列表显示好友状态(在线与否)查看聊天记录屏蔽好友消息3.群管
2021-08-07 17:48:09
523
原创 聊天室项目分析
聊天室项目分析项目介绍服务器架构项目介绍聊天室项目是实验室为了让我们能够更好的掌握linux下网络编程的知识的任务,也同样让我们感受到用自己所学的知识做出一些东西时的喜悦。在只有需求的背景下也极为考验对整体架构构建能力,如果不能看清全局,那就只能推到重来。服务器架构服务器要想有稳定且高效的性能就要有好的架构,epoll是IO复用中不错的方式,但仅仅使用epoll并不是最高效的,当然我实现的也并不是最高效的。...
2021-08-07 17:45:15
472
1
原创 聊天室项目源码
聊天室项目源码聊天室服务器ser.hser.cserver.c客户端cli.hcli.cclient.c聊天室在linux下使用C语言开发的一款简单的聊天程序。服务器ser.h#include <stdio.h>#include <stdlib.h>#include <string.h>#include <mariadb/mysql.h>#include <sys/types.h>#include <sys/socket.
2021-08-07 17:44:05
262
1
原创 Linux C 网络编程(select 与 poll)
Linux C 网络编程功能selectselect介绍select应用pollpoll介绍功能有了套接字我们便可以在客户端和服务器之间传递信息,由send和recv函数来发送和接收文件,而我们不能提前知道客户端或服务器什么时候发送信息,如果客户端比较多,还要判断是哪一个客户端发来的信息。这让我们需要类似于监听套接字一样的功能(有连接就返回),select, poll, epoll都提供了这些功能,当有信息发送就返回有信息的套接字描述符,然后用recv接收信息。selectselect介绍在客户端
2021-07-30 21:14:27
255
原创 Linux C 网络编程(socket 套接字)
Linux C 网络编程功能套接字功能前面我们学习了系统编程,通过管道等我们可以将一个系统中的资源和信息调用起来,但这是远远不够的,我们还可以通过网络编程和其他的的系统来交互信息。为了相互通信,国际制定了TCP/IP协议,通过IP地址和端口好进行通信。套接字...
2021-07-28 21:38:13
676
原创 Linux C哲学家吃饭问题
哲学家吃饭问题哲学家问题线程中的信号量无名信号量的定义:P操作:使信号量-1V操作:使信号量+1正常代码(可能发生死锁现象)解法1解法2哲学家问题有五个哲学家绕着圆桌坐,每个哲学家面前有一盘面,两人之间有一支筷子,这样每个哲学家左右各有一支筷子。哲学家有2个状态,思考或者拿起筷子吃饭。如果哲学家拿到一只筷子,不能吃饭,直到拿到2只才能吃饭,并且一次只能拿起身边的一支筷子。一旦拿起便不会放下筷子直到把饭吃完,此时才把这双筷子放回原处。如果,很不幸地,每个哲学家拿起他或她左边的筷子,那么就没有人可以吃到饭了
2021-05-24 22:23:38
1021
1
原创 Linux C生产者和消费者(线程)
生产者和消费者生产者消费者问题实现目标原理代码生产者消费者问题生产者消费者共享缓冲区,生产者向缓冲区中放数据,消费者从缓冲取中取数据,当缓冲区中被放满时,生产者进程就必须进入挂起状态,直到消费者从缓冲中取走数据时,生产者才能继续向缓冲区中存放数据,同样当缓冲取中没有数据时,消费者进程就必须进入挂起休眠状态,直到生产者向缓冲区中放入数据时,消费者才能被唤醒继续从缓冲区中取走数据。生产者消费者问题,也称有限缓冲问题,是一个多线程同步问题的经典案例。实现目标单生产者,单消费者多生产者,多消费者原理
2021-05-24 21:51:41
538
原创 LinuxC编程进程间的通信总结
LinuxC编程进程间的通信总结前言管道有名管道本文参考《LinuxC编程实战》前言进程的空间地址是各自独立的,因此进程间进行数据交流就需要特定的通信机制,在大型应用中往往需要多个进程同时工作,这就需要进程间的数据交流和配合。进程间的通信方式有:管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程间的亲缘关系一般指父子进程关系。有名管道(named pipe):有名管道也是半双工管道通信方式,但是它允许不具有亲缘关系的进程间的通信。信号量(
2021-05-16 21:26:25
272
原创 LinuxC编程实战信号详细总结
LinuxC编程实战信号总结信号的来源信号的种类1.可靠信号和不可靠信号2.信号的优先级信号的捕捉和处理信号处理函数的返回本文参考《LinuxC编程实战信号的来源信号来源按产生体哦啊间的不同分为硬件和软件两种方式。1.硬件方式:1). 用户按下某些键所产生的信号。如<ctrl + C>组合键产生一个SIGINT信号。2). 硬件异常产生的一些信号。2.软件方式:1). 用户在终端下用kill命令向进程发送任意信号;2). 进程调用kill 或 sigqueue 函数发送信号;
2021-05-11 17:33:00
273
原创 Linux中make和makefile简单讲解(实例)
make和makedile简单讲解make的作用make的使用makefile文件make的作用make的使用makefile文件
2021-05-07 16:42:39
319
原创 鸟哥第八章文件压缩,打包备份总结
文件压缩,打包,备份(本文参考《鸟哥》)压缩文件扩展名gzip,zcat/zmore/zless/zgrepbzip2,bzcat/bzmore/bzless/bzgrepxz, xzcat/xzmore/xzless/xzgrep打包指令:tarXFS 文件系统的备份和还原压缩文件扩展名文件扩展名含义* .zcompress 程序压缩的文件* .zipzip 程序压缩的文件* .gzgzip 程序压缩的文件* .bz2bzip2 程序压缩的文件*
2021-04-26 20:02:04
176
原创 myshell中readline的使用
myshell中readline的使用readline.htab补全readline.hreadline.h这个库需要大家自己安装,他有许多功能这里也只是一些皮毛,下面是下载readline库的地方,下载后你需要将它解压到include目录中。由于readline是一个动态库,编译的时候需要加上 -lreadline,不然会找不到相关的函数。readlinetab补全tab补全需要使用readline这个函数,该函数的原型为:char *readline(const char *prompt);
2021-04-16 20:50:36
688
原创 Linux C编程my_shell的实现
Linux C编程my_shell的实现功能流程图完整代码命令功能1.普通命令2.重定向符3.管道符实现普通命令功能支持的命令:单个命令,如:ls 。带一到多个参数的命令,如:ls -l。带一个输出重定向的命令,如:ls > text带一个输入重定向的命令,如:wc < text带一个管道的命令,如 :ls -l |wc -c后台运行符&加在以上各个命令后面如:ls &如:ls -l &输入exit或logout退出myshell错误处理:
2021-03-24 20:17:48
1059
3
原创 Linux C编程my_ls 的实现
Linux C编程my_ls 的实现功能参数: -a -l -R -t -r -i -s-R需要实现对根目录的查询需要实现各种参数的随意组合在所有目录下都可使用自己的my_ls界面美观( 输出对齐等)能屏蔽Ctrl+c杀死程序按照文件类型以及权限的不同分颜色输出流程图代码github参数输入及处理...
2021-03-14 21:03:47
3129
11
原创 西邮Linux兴趣小组面试题总结(2020)
面试题总结宏定义功能语法背景background:颜色 图片 平铺方式 固定方式 位置背景颜色background-color:#ccc;背景图像background-image:url(背景图像的位置及全称)背景图像的重复方式background-repeat:[repeat、no-repeat、repeat-x、repeat-y]背景图像的位置background-position:top[left center right]center[lef
2021-02-27 15:24:15
397
2
原创 Git简单讲解
push代码的时候,别人已经更新代码error: 您尚未结束您的合并(存在 MERGE_HEAD)。提示:请在合并前先提交您的修改。fatal: 因为存在未完成的合并而退出。解决办法git merge --abortgit reset --merge...
2021-02-24 17:55:39
82
原创 GDB简单讲解
GDB的作用gdb是一款调试工具在 Windows 操作系统中,使用的大多是集成的开发环境(IDE),也就是说软件开发工具中已经包含了调试工具,例如 VC、BCB、Dev-C++ 等,这些软件中都集成了调试器。在 Linux 操作系统中,编译程序使用GCC(GCC 编译器的功能非常的强大,几乎可以编译所有的编程语言),集成的开发环境相对较少,但可以使用的调试工具有很多,例如 GDB、binutil、strace 等,最常用的调试工具是 GDB。GDB的安装(linux 终端下)(1)
2021-02-03 18:19:01
282
原创 哈希表简单讲解
哈希表简单应用什么是哈希表哈希表按我自己的理解就是一个查找表,简单应用比如一个链表,它一个节点里含有两个内容typedef struct ListNode{ int value; char name[5]; struct ListNode* next;}ListNode;value用来存学生的学号,name[5]字符数组用来存学生姓名,对与这样一个链表如果我们想要找到某个学号的学生姓名就需要遍历整个链表,而哈希表便可以直接找到他/她,这里我们可以用以下指针数组Lis
2021-01-25 13:38:19
345
原创 前缀树讲解
前缀树功能:以树的形式存放单词组例:ininterinputappleappend红色表示一个单词的结束代码先给出代码,运行了解一下前缀树的用处:#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct Tree{ int count; struct Tree *child[26];}Node,*Trie_node;Node *Cr
2021-01-09 20:48:46
1218
3
原创 KMP算法
KMP算法给定一个 s 字符串和一个 h 字符串,在 s 字符串中找出 h字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。事例:输入:s = "aabaabaaf" h = "aabaaf"输出:3在该算法中主要难在next数组的建立,该数组有多种建立方法,我讲的是我认为较简单的.每一个字符串数组都有一个自己的next数组,例如:h = "aabaaf"next[6] = { 0, 1, 2, 0, 0, 5 }下面我们来研究如何建立next数组:为了方便我们建
2020-12-28 21:29:01
351
1
原创 排序---堆排
#排序—堆排##堆排采用简单的二叉数首先我们简单的介绍一下二叉数:这是一个简单的二叉数(该二叉数父节点的值比子节点的大)下面我们看一个父节点小于子节点的二叉数可以由数组来表示在这里圆圈里面的数表示数组的值数组的下标就是它们的序号它们的序号有一些规律:左子节点序号 = 父节点序号×2 +1右子节点序号 = 父节点序号×2 +2##下面我们简单的以图片的方式了解二叉数的原理:##下面讲解如何操作:首先把要排序的数变成一个二叉数,这里就不需要了,我们可以把数组看成一个二叉数1.我们需
2020-12-28 20:01:48
196
2
原创 算数位移和逻辑位移
算数左移和逻辑左移: 这两种位移相等,都是整体向左移,在右边加0,若最高位不为1则相当与给该数乘以2的(位移数)次方。 例: 14的二进制为00001110 14<<1--------->00011100----------->28(注意:在最高为不为1时才有增减倍性质)算数右移和逻辑右移: 算数右移:将二进制整体向右移且左边加上符号位。 例: 14的二进制为00001110 14>>1--------->
2020-12-16 22:10:00
575
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人