- 博客(20)
- 收藏
- 关注
原创 网络编程速递小项目
实现账号的注册、登录、注销、修改用户密码功能,当登录成功时可以寄快递、查快递、修改快递信息、取消订单等功能。实现账号的注册、登录、注销、修改用户密码功能,当登录成功时可以查快递、送快递、查看历史订单等功能。//0:表示未完成订单 1:表示已完成订单。//用户类型:1:用户 2:快递员。//用户类型:1:用户 2:快递员。//0:表示未完成订单 1:表示已完成订单。
2024-09-15 18:32:15 1904
原创 c语言快递小项目
struct pack_head{ int fd;//通信的文件描述符 unsigned char type; //消息类型 unsigned char usertype; //用户类型:1:用户 2:快递员 char name[32]; //用户名 char paaswd[32]; //密码 char buf[32]; //调试信息 struct order_msg msg; //单号信息};struct order_
2024-09-14 19:59:19 1602
原创 udp聊天室
if ((N->next->addr.sin_addr.s_addr == saddr.sin_addr.s_addr) && (N->next->addr.sin_port == saddr.sin_port)) //判断是否存在该客户端数据。//清空输入进来的内容。if (strcmp(data.type, "send_t") == 0) //聊天,跳过用户。
2024-09-12 11:55:32 1674
原创 IO多路复用
select:适用于小规模应用,简单易用但有文件描述符限制。poll:比select更灵活,适用于中等规模应用,但性能瓶颈仍然存在。epoll:最适合大规模、高并发应用,性能优越但在 Linux 上才可用。每有一个客户端连接创建一个进程进行通信创建套接字:使用socket()函数创建一个用于通信的套接字。绑定地址:用bind()函数将套接字绑定到指定的 IP 地址和端口上。监听连接:调用listen()函数,使服务器开始监听客户端的连接请求。接受连接:使用accept()
2024-09-10 15:20:37 1099
原创 网络编程及io多路复用
1.struct pollfd *fds: 关心的文件描述符数组,大小自己定义。3. timeout: 超时检测 (毫秒级):如果-1,阻塞 如果0,不阻塞。,响应键盘事件,输入鼠标事件,响应鼠标事件(两路IO)返回值: <0 出错 >0 表示有事件产生;功能: 监视并等待多个文件描述符的属性变化。2. nfds: 最大文件描述符个数。
2024-09-09 17:15:35 381
原创 liunx io模型多路复用
若设置多个进程/线程,分别处理一条数据通路,将新产生进程/线程间的同步与通信问题,使程序变得更加复杂;通过代码实现:输入鼠标的时候, 响应鼠标事件, 输入键盘的时候, 响应键盘事件 (两路IO)应用程序中同时处理多路输入输出流,若采用阻塞模式,得不到预期的目的;先构造一张有关描述符的表(最大1024),然后调用一个函数。函数返回时告诉进程哪个描述符已就绪,可以进行I/O操作。将关心的文件描述符添加到表中 FD_SET。nfds:关注的最大的文件描述符。构造一张关于文件描述符的表。当这些文件描述符中的。
2024-09-09 17:03:59 464
原创 io信号
3)司机捕捉SIGTSTP(代表到达终点站)信号,向售票员发送SIGUSR1信号,售票员打印(please get off the bus)2)售票员捕捉SIGQUIT(代表停车)信号,向司机发送SIGUSR2信号,司机打印(stop the bus)1)售票员捕捉SIGINT(代表开车)信号,向司机发送SIGUSR1信号,司机打印(let's gogogo)4)司机等待售票员下车,之后司机再下车。用信号的知识实现司机和售票员问题。
2024-08-31 08:41:09 2154
原创 有名管道的特点及代码
有名管道可以通过路径名来指出,并且在文件系统中可见,但内容存放在内存中。但是读写数据不会存在文件中,而是在管道中。有名管道可以使互不相关的两个进程互相通信。进程通过文件IO来操作有名管道。不支持如lseek() 操作。有名管道遵循先进先出规则。
2024-08-30 11:40:37 358
原创 io 互斥
通过互斥锁可以实现互斥机制,主要用来保护临界资源,每个临界资源都由一个互斥锁来保护,线程必须先获得互斥锁才能访问临界资源,访问完资源后释放该锁。循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用。:多个线程在访问临界资源时,同一时间只能一个线程访问。
2024-08-29 14:58:52 432
原创 创建一个守护进程,循环间隔1s向文件中写入一串字符“hello”
原因:子进程继承了父进程的一些已经打开了的文件,这些被打开的文件可能永远不会被 守护进程访问,但它们一样占用系统资源,而且还可能导致所在的文件系统无法被卸载。子进程继承了父进程的文件权限掩码,给该子进程使用文件带来一定的影响,因此把文件 权限掩码设置为0,可以增强该守护进程的灵活性。4.函数说明:chdir() 将进程当前的工作目录改变成以参数路径所指的目录4.重设文件权限掩码。让子进程成为会话组组长并且脱离终端:为了让子进程完全脱离终端;目的:增大进程创建文件时权限,提高灵活性;5. 关闭文件描述符。
2024-08-28 14:21:19 933
原创 标准io跟文件io的区别及一些函数的功能及参数
默认打开三个流:stdin/stdout/stderr。写文件:fputc/fputs/fwrite。在posix中定义的一组用于输入输出的函数。在C库中定义的一组用于输入输出的函数。默认打开三个文件描述符:0 1 2。围绕文件描述符进行操作,非负整数。可以操作除了目录以外任何类型文件。围绕流进行操作,FILE*定位操作: rewind/关闭文件: close。定位操作: lseek。关闭文件: flose。
2024-08-27 10:15:24 115
原创 使用Git的基本方式
合并(Merge):合并是将一个分支的更改合并到另一个分支的操作。当一个分支的开发任务完成后,可以将其代码合并到主分支或其他目标分支中。它可以是本地仓库(在开发者的本地机器上)或远程仓库(在服务器上)。推送(Push):推送是将本地仓库的更改上传到远程仓库的操作。它将本地仓库的更改同步到其他开发者或共享的远程仓库中。拉取(Pull):拉取是从远程仓库获取最新代码的操作。它将远程仓库的更改合并到本地仓库中。撤销(Undo):Git提供了撤销操作的能力,可以恢复之前的提交或将代码还原到之前的状态。
2024-08-19 13:50:11 603
原创 Linux安装工具
sudo apt-get upgrade 软件包名:将系统中指定的软件包升级到最新的版本。dpkg:离线安装,安装本地包,不能检查软件包的依赖关系,不关系仓库内的软件。sudo apt-get --purge remove:完全卸载软件包。sudo apt-get autoremove 软件包名:卸载软件。sudo apt-get remove 软件包名:卸载软件。sudo dpkg -s 软件包名:显示软件的安装状态。sudo dpkg -L 软件包名:显示软件的安装路径。dpkg -i 软件包全称。
2024-08-12 19:22:23 145
原创 编译方法及工具
步骤:代码写好后,先通过gcc -g进行编译代码,没有错误后,可以通过gdb a.out进行调试,输入l查看文件内容,通过b设置断点,输入r进行运行,n或s进行单步调试,q退出。动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作。链接库文件,将不可执行的二进制文件转换成可执行的二进制文件。#开头内容,展开头文件,替换宏定义,不会进行语法检查。检查语法错误,词法错误,将.i文件转换成.s汇编文件。make:工程管理器,顾名思义,是指管理较多的文件。
2024-08-12 14:05:55 491
原创 常见的学生管理系统
printf(" * S=按学号查询学生成绩 *\n");void Sort(struct score s[50], int n) // P=按平均成绩由高到低排序。void Search(struct score s[50], int n) // S=按学号查询学生成绩。void Type(struct score s[50], int *n) // T=成绩录入。
2024-08-10 18:30:49 1359
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人