- 博客(17)
- 收藏
- 关注
原创 UDP通讯实现
bzero()` 函数在许多系统中已经被废弃,应该使用更现代的函数`memset()` 来替代。`bzero()` 函数在许多系统中已经被废弃,应该使用更现代的函数`memset()` 来替代。- `dest_addr`: 目标地址的结构体指针,其中包含目标主机的IP地址和端口号。返回值:成功接收到数据时,返回接收到的数据的长度;其中,参数 `s` 是指向要清零的内存区域的指针,参数 `n` 是要清零的字节数。其中,参数 `s` 是指向要清零的内存区域的指针,参数 `n` 是要清零的字节数。
2024-07-08 22:13:16 1909
原创 tcp并发设计
4注意:原始代码,如果先关闭服务器端,再次开启服务器的时候会报"connect: Connection refused"错误,这是因为先关服务器端,导致系统认为客户端仍然在与服务器端连接造成。可以使用setsockoptsetsockopt函数用于设置套接字选项,可以用来控制套接字的行为和属性。通过setsockopt函数,可以设置套接字的各种选项,如超时设置、缓冲区大小、复用地址、广播等。这些选项可以影响套接字的连接、通信、数据传输等方面的行为,使程序更加灵活、高效地运行。
2024-07-08 15:39:57 690
原创 linux网络编程-tcp通讯
/IP v6,将主机字节序转换为网络字节序。//IP v4,将网络字节序转换为主机字节序。//IP v4,将主机字节序转换为网络字节序。//IP v6,将网络字节序转换为主机字节序。-type: 指定套接字类型 TCP唯一对应流式套接字,所以选择SOCK_STREAM(数据报套接字:SOCK_DGRAM)-domain: 通讯地址族 AF_INET: 使用IPv4 互联网协议 AF_INET6: 使用IPv6 互联网协议。
2024-07-07 13:55:43 949
原创 信号灯/信号量
信号灯也叫信号量:信号量代表某一类资源,其值表示系统中该资源的数量信号量是一个受保护的变量,只能通过三种操作来访问1.初始化2.P操作(申请资源)3.V操作(释放资源)
2024-06-30 16:02:12 944
原创 进程间通讯—消息队列
(进程间通讯的手段)消息队列是System V IPC对象的一种消息队列由消息队列ID来唯一标识消息队列就是一个消息的列表。用户可以在消息队列中添加消息、读取消息等消息队列可以按照类型来发送/接收消息概念:消息队列是System V IPC对象的一种内核中的数据结构(通过链表实现)发送端:1 申请Key2打开/创建消息队列 msgget3向消息队列发送消息 msgsnd接收端:1打开/创建消息队列 msgget2从消息队列接收消息 msgrcv。
2024-06-28 22:14:20 853
原创 信号机制(阻塞、信号集、信号驱动任务)
在sigpricmask函数解除阻塞的时候,来的信号就会被处理了,所以pause接受不到来的信号,因此有了sigsuspend函数;有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。信号递达(Delivery ):实际信号执行的处理过程(3种状态:忽略,执行默认动作,捕获)信号的”阻塞“是一个开关动作,指的是阻止信号被处理,但不是阻止信号产生。将一个信号写进信号屏蔽字,如果信号来了,就将信号写入未决信号集里(挂起)
2024-06-28 19:57:57 769
原创 信号机制以及定时器应用
/ 闹钟触发周期(例如触发后,每隔1秒触发)SA_SIGINFO:使用 sa_sigaction 成员而不是 sa_handler 作为信号处理函数。参数2,3:act,oldact: 处理信号的新行为和旧的行为,是一个sigaction结构体。sa_sigaction: 另一个信号处理函数,它有三个参数,可以获得关于信号的更详细的信息。SA_NODEFER:使对信号的屏蔽无效,即在信号处理函数执行期间仍能发出这个信号。= 0:发送信号给跟调用kill函数的那个进程处于同一进程组的进程。
2024-06-27 22:04:26 912
原创 进程间通讯-共享内存
功能:创建共享内存映射函数返回值:成功返回创建的映射区首地址,失败返回宏:MAP_FAILED( ((void *) -1) )(也就是-1的地址),设置errno值。
2024-06-27 15:29:07 1048
原创 进程间的通信-有、无名管道
如果open调用是非阻塞的(即第二个参数为O_WRONLY | O_NONBLOCK),open总会立即返回,但如果没有其他进程以只读方式打开同一个FIFO文件,open调用将返回-1,并且FIFO也不会被打开。`read`函数从文件描述符`fd`对应的文件中读取最多`count`字节的数据,存储到`buf`指向的缓冲区中。2 第二个参数中的选项O_NONBLOCK,选项O_NONBLOCK表示非阻塞,加上这个选项后,表示open调用是非阻塞的,如果没有这个选项,则表示open调用是阻塞的。
2024-06-26 17:51:46 1857
原创 条件变量(条件锁)
如果不来信号,将会一直等待cond:指向待等待的条件变量(类型)的指针。mutex:指向互斥锁(类型)的指针。在调用之前,应该先锁住这个互斥锁,以确保线程安全。函数是 POSIX 线程库中用于条件变量等待的函数之一。它会使当前线程在指定的条件变量上等待,直到满足特定条件或者超时。cond:指向待等待的条件变量(类型)的指针。mutex:指向互斥锁(类型)的指针。在调用之前,应该先锁住这个互斥锁,以确保线程安全。abstime:指向结构的指针,用于指定等待的绝对时间。
2024-06-24 14:59:43 1958
原创 线程的互斥锁、读写锁、
1.定义一个pthread_mutex_t变量,利用函数pthread_mutex_init(&mutex,NULL);读写锁出于写锁状态时,所有试图对读写锁加锁的线程,不管是读者试图加读锁,还是写者试图加写锁,都会被阻塞。读写锁处于读锁状态时,有写者试图加写锁时,之后的其他线程的读锁请求会被阻塞,以避免写者长时间的不写锁。3.访问临界资源后释放锁,pthread_mutex_unlock(&mutex);
2024-06-23 22:14:57 593
原创 线程的取消和清理
线程内的return 可以结束线程,也可以给pthread_join返回值,但不能触发pthread_cleanup_push里面的回调函数,所以我们结束线程尽量使用pthread_exit退出线程。介绍:Pyhread_exit(void *)使结束当前线程,如果运行不到exit函数,当前线程就结束不了,因此可以用pthread_cancel函数在主线程或者子线程中调用,杀死指定的线程。子线程调用cancel,cancel函数到取消点之间的代码不执行,取消线程之后,取消点之后的代码也不执行。
2024-06-23 18:54:52 1046
原创 线程回收与线程分离
注意:pthread_join 是阻塞函数,如果回收的线程没有结束,则一直等待第一个参数:线程tid第二个参数:函数pthread_exit(void *retval)将参数返回给调用它的线程,pthread_join函数的第二个参数接收该线程的返回值编译错误:错误类型:未知的类型pthead_t错误可能:1拼写错误,2对应的头文件没有包含错误类型:参数不匹配,期望的是char * ,但参数retv是void *解决:在参数前面加强制类型转换(char*)retv。
2024-06-22 18:40:30 313
原创 线程的创建及相关函数
成功返回0,失败时返回错误码参数1:Tthread_t是无符号long型, thread 变量存放线程tid地址参数2:Thread_attr_t是一个结构体,传入线程的属性,attr 线程属性,NULL代表默认属性参数3:void *(*routine)(void *)传入线程的回调函数,routine 表示线程执行的函数;函数返回值为(void *)类型,函数参数也为(void *)类型参数4: arg 传递给routine函数的参数 ,参数是void * ,注意传递参数格式,
2024-06-22 16:45:23 807
原创 守护进程创建
由于在 Linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。守护进程又叫精灵进程(Daemon Process),是linux三种进程之一,是linux中的后台服务进程,它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。:ps ajx命令查看系统中的进程。进程fork一个子进程,此父进程和子进程就是一个进程组,父进程就是进程组组长;
2024-06-21 20:47:02 918
原创 exec函数族
ork创建进程之后,子进程和父进程执行相同的代码,但是在实际开发当中,我们希望父子进程执行不同的代码。file 执行的程序的名称,在PATH(环境变量)中查找(不需要路径)file 执行的程序的名称,在PATH(环境变量)中查找(不需要路径)3.进程执行函数后的内容被指定的程序替换,但进程号不变。3.进程执行函数后的内容被指定的程序替换,但进程号不变。path 执行的程序名称,包含路径(需要路径)path 执行的程序名称,包含路径(需要路径)传递给执行的程序的参数列表。
2024-06-21 17:57:07 365
原创 二维数组的初始化规则
2.行列数都给出,初始值可以不给,输出默认为0。测试总结:1:列数不能省(省列数全部编译报错)如果初始值也不给,默认没有行数,也就没有输出。3.仅行数不给,会根据给的初始值的行数输出。经过测试:得出以下规律。
2024-05-13 17:37:20 112
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人