- 博客(22)
- 收藏
- 关注
原创 UDP编程
■ MSG_OOB:用于TCP类型的带外数据(out of band)sendto():指定服务器的IP地址和端口号,要发送的数据。■ flags:发送方式(通常为0),作用和write一样。receivefrom():阻塞等待客户端数据。■ sockfd:socket函数返回的fd。bind:绑定服务器:TCP地址和端口号。■ MSG_DONTWAIT,非阻塞。无连接尽力传输,UDP:是不可靠传输。■ MSG_OOB:读取带外数据。■ length:发送的字节。成功:实际发送的字节数。
2025-01-31 17:16:31
771
原创 TCP编程
协议族决定了socket的地址类型,在通信中必须采用对应的地址, 如AF_INET决定了 要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、 IPPROTO_SCTP、 IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议,type 和protocol并不 是可以随意组合的,如SOCK_STREAM不可以跟IPPROTO_UDP组合。
2025-01-30 16:26:31
1130
原创 网络基础
IP地址是Internet中主机的标识,Internet中的主机要与别的机器通信必须具有一个IP地址,IP地址为32位(Ipv4)或者128位(Ipv6),每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由。是一个编程接口,是一个特殊的文件描述符(对他执行IO的操作函数,比如read, write, close等),并不仅限于TCP/IP协议,面向连接TCP,无连接UDP。早期的ARPAnet使用网络控制协议,不能互联不同类型的计算机和不同类型的操作系统,没有纠错功能。
2025-01-29 18:27:35
760
原创 线程的分离属性
• PTHREAD_CREATE JOINABLE(非分高)1.线程属性类型:pthread_attr.t attr;• PTHREAD_CREATE_DETACHED(分离)•对线程属性变最的初始化。通过属性设置线程的分离。2.线程属性操作函数。
2025-01-29 11:33:45
185
原创 线程的创建
int pthread_create( pthread_t *thread), //线程ID - 无符号长整型。函数原型:int pthread_datach(pthread_t thread);const'pthread attr t *attr, //线程属性,NULL。void *(*start_routine)(void*),//线程处理函数。主线程退出,for循环只执行了子线程里面的,主线程里面的for是没有打印的。pthread:要回收的子线程的ID。retval:读取线程退出的携带信息。
2025-01-28 18:45:28
395
原创 线程的概念
多进程: 始终共享的资源 代码、文件描述符、内存映射区-mmap。多线程:始终共享的资源:堆、全局变量,节省资源。在Linux下:线程就是进程·轻量级进程。一共五个线程,栈区被平均分成五块。对于内核来货,钱程就是进程。
2025-01-28 16:17:51
235
原创 守护进程
获取进程所属的会话ID pid_t getsid(pid_t pid);创建一个会话 pid_t setid(void);改变当前工作目录chdir(不是必须的) U盘,./a.out。子进程创建新会话(必须) setsid();fork子进程,父进程退出(必须)一般采用以d结尾的名字(服务)执行核心工作(必须的)不受用户登录注销影响。创建一个会话注意事项。
2025-01-28 13:44:59
529
原创 信号灯 ..
信号灯集合(可以包含多个信号灯)IPC对象是一个信号的集合(多个信号量)semaphore在Linux系统中,使用信号量通常分为以下4个步骤: 1.创建信号量或获得在系统中已存在的信号量,此时需要调用 semget() 函数。不同进程通过使用同一个 信号量键值来获得 同一个信号量。2.初始化信号量,此时使用 semctl() 函数的SETVAL操作。当使用互斥信号量时,通常将信号量初始化为 1。3.进行信号量的PV操作,此时,调用 semop()函数。这一步是实现进程间的同步和互斥的核心工作部 分。
2025-01-27 19:02:59
489
原创 信号.....
信号通信,其实就是内核向用户空间进程发送信号,只有内核才能发信号,用户空间进程不能发送信号。内核可以发送多少种信号呢?kill -l命令:kill-9 pid信号通信的框架• 信号的发送(发送信号进程):kill raise alarm•信号的接收(接收信号进程)pause()、sleep、 while(1)• 信号的处理(接收信号进程) signal。
2025-01-27 18:09:00
1056
原创 共享内存(Shared Memory)
共享内存,就是两个或多个进程都可以访问的同一块内存空间,一个进程对这块空间内容的 修改可为其他参与通信 的进程所看到的。显然,为了达到这个目的就需要做两件事:一件是在内存划出一块区域来作为共享 区;另一件是把这个区域映 射到参与通信的各个进程空间。共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地 址空间,这些进程间数 据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。
2025-01-23 15:49:02
955
原创 有名管道
函数形式:int mkfifo(const char \*filename, mode_t mode);功能:创建管道文件参数:营道文件文件名,权限,创建的文件权限仍然和umask有关系。返回值:创建成功返回0,创建失败返回-1。
2025-01-21 16:46:04
559
原创 IPC
什么是IPC(Inter Process Communicatian)1.管道通信:有名管道,无名管道。3.消息队列-内核的链表。2.信号·系统开销小。
2025-01-21 14:50:28
164
原创 无名管道
写端被全部关闭,read返回0,相当于读文件到了尾部 没有全部关闭:read阻塞。管道破裂,进程被终止 :内核给当前进程发送信号SIGPIPE-13,默认处理动作 读端没全部关闭。• 两部分,连编(read),写端(write),对应两个文件描述符。父进程在写的时候关闭读,子进程在读的时候关闭写端。操作管道的进程被销段之后,管道自动释放。大小根据实际情况进行适当调整。
2025-01-21 14:48:01
267
原创 进程退出
对于三个终止函数(exit,_exit和_Exit),实现这一点的方法是,将其退出状态(exit status)作为参数传送给函数,在异常终止情况下,内核(不是进程本身)产生一个指示其异常终止原因的终止状态(termination status),在任意一种情况下,该终止进程的父进程都能用walt或waitpid函数取得终止状态。不管进程如何终止,最后都会执行内核中的同一段代码,这段代码和相应进程关闭所有打开描述符,释放它所使用的存储器资源等。• 2.进程调用exit()标准C库。1.调用abort函数。
2025-01-20 10:27:01
144
原创 vfork函数
vfork可以保证子进程先运行,当子进程调佣exit退出后,父进程才执行。vfork可以直接使用父进程存储空间,不拷贝。vfork也可以创建进程。
2025-01-20 10:06:56
114
原创 孤儿进程和僵尸进程
一个比较特殊的状态,当进程退出父进程(使用wait)系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程,僵尸进程会在以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
2025-01-19 18:24:38
132
原创 exec函数组
•e (environment) 使用环境变量数组,不使用进程原有的环境变量,设置新加载程序运行的环境变量。父进程只执行一次,子进程调用execl后内容直接被删除了,只有父进程执行。•p(path) 搜素file时使用path变量。执行另外的程序,不需要创建额外的的地址空间。•v(vector) 使用命令行参数数组。能够着换进程地址空间的代码.text段。如果执行失败,打印错误信息,退出子进程。• I(list) 命令行参数列表。让父子进程来执行不相干的操作。指定执行目录下的程序。
2025-01-19 15:25:59
140
原创 父子进程间的数据共享
写的时候分别在物理地址上拷贝一份变量进行单独读写。各个进程的地址空间中的数据是完全独立的。父子进程之间可不可以通过全局变量通信?fork后两个地址空间区数据完全相同。不能,两个进程内存不能共享。后续各自进行了不同的操作。对于同一个变量,读时共享。
2025-01-18 18:39:37
121
原创 forkforkfork
1.fork函数一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。包含的头文件:函数原型:两个返回值:=0:当前进程为子进程。
2025-01-18 17:48:05
173
原创 fork和vfork的区别
fork()是用于创建新进程的系统调用之一,它会创建一个与当前进程完全相同的子进程。子进程将复制父进程的所有资源,包括代码段,数据段、堆栈、文件描述符等。父进程和子进程之间的执行是并发的,它们在不同的地址空间中运行,通过返回值来区分父进程和子进程。vfork()也是用于创建新进程的系统调用之一它会创建一个新进程,但子进程会与父进程共享地址空间。这意味着子进程使用父进程的地灶空间,而不是创建自己的副本。子进程与父进程共享代段。
2025-01-18 15:10:22
345
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人