Linux/Unix系统编程
文章平均质量分 89
Y__Can
这个作者很懒,什么都没留下…
展开
-
进程间的通讯:SOCKET(UDP)、广播、多播、丢包问题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档SOCKET(UDP)前言一、使用的API1、socket()创建2、bind()绑定地址①、bind()②、网络字节序转换:3、connect()请求连接服务端4、sendto() 发送 与 recvfrom()接收5、close()关闭socket二、案例1、单播2、组播3、广播总结前言UDP可分为单播,组播,广播使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址原创 2021-08-08 13:48:56 · 1111 阅读 · 0 评论 -
进程间的通讯:SOCKET(TCP)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档SOCKET(TCP)前言一、使用的API1、socket()创建2、bind()绑定地址①、bind()②、网络字节序转换:3、listen()转为被动监听4、accept()等待请求连接5、connect()请求连接服务端6、send() 发送 与 recv()接收7、close()关闭socket二、案例1.简单服务端和客户端连接互传信息2.服务端可被多个客户端连接(thread)3、服务器可被多个客户端连接(I/O多路复用)总结原创 2021-08-06 23:57:40 · 976 阅读 · 0 评论 -
同步方式:文件锁flock()/fcntl()、互斥锁与条件变量、信号量、读写锁
文件锁前言一、flock()给文件加锁二、fcntl()给记录(文件)加锁1、write_lock.c 互斥写2、read_lock.c 共享读前言1、文件锁包含劝告式锁和强制式锁。劝告式锁:要求每个使用上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁。在一般情况下,内核和系统都不使用建议性锁,它们依靠程序员遵守这个规定。强制式锁:是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。采用强制性锁对性能的影响很大,每次读写操作都必须检查是否有锁存在。.原创 2021-08-05 18:03:22 · 2143 阅读 · 0 评论 -
HTTP、TCP、UDP 区别原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、网络协议层OSI七层与TCP/IP四层1、OSI七层2、TCP/IP四层二、HTTP、TCP、SOCKET区别与原理1、TCP协议的三次握手和四次挥手①、三次握手②、四次挥手③、常见面试问题2、HTTP协议总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。一、网络协议层OSI七层与TCP/IP四层原创 2021-08-04 20:56:23 · 476 阅读 · 0 评论 -
进程间的通讯:共享内存
共享内存前言一、System V 共享内存shmget()1、创建或打开 shmget()2、使用 shmat() / 分离shmdt()①、标题使用 shmat()②、分离shmdt()3、控制操作(删除) shmctl()4、共享内存内放置posix无名信号量二、Posix 共享内存shm_open()1、创建/打开 shm_open()+ftruncate()①第一步先shm_open()创建内存对象②第二步设置/修改共享内存大小ftruncate()2、将内存对象映射到进程mmap()3、关闭映射.原创 2021-08-02 23:25:34 · 475 阅读 · 0 评论 -
进程间的通信:信号量
信号量前言一、POSIX信号量:有名sem_open/无名sem_init1、有名信号量sem_open()①、创建打开信号量sem_open()②、关闭sem_close()/删除sem_unlink()信号量2、无名信号量sem_init()①、初始化信号量 sem_init()②、摧毁信号量sem_destroy()3、无/有名共用等待( P)sem_wait/发布(V)sem_post()4、sem_trywait()/sem_timedwait()5、例子①、使用无名信号量,对共享变量的访问②、.原创 2021-08-01 22:43:38 · 788 阅读 · 0 评论 -
进程间的通讯:消息队列
消息队列前言一、System V 消息队列1、创建或打开msgget()2、控制(删除)msgctl()3、发送/接收消息 msgsnd()/msgrcv()4、demo.c5、修改消息队列参数二、POSIX 消息队列1.创建,关闭和删除2.发送与接收3.消息通知mq_notify()前言消息队列:1、消息队列是进程或线程间通讯的其中一种方式。遵循先进先出的原则,保证了时间的顺序性。拥有该消息队列读权限的进程可以从消息队列读出数据,拥有该消息队列写权限的进程可以向消息队列发送数据。2、消息作为.原创 2021-08-01 14:47:56 · 2051 阅读 · 1 评论 -
进程间的通信:管道与FIFO
管道与FIFO前言一、管道pipe()二、FIFO1.FIFO创建mkfifo()2、open()、read()、write()3、FIFO删除unlink()前言管道:无名管道,pipe()单向传递,父子进程之间进行传递 read writeFIFO:有名管道,mkfifo(),任意进程。open read write close unlink一、管道pipe()字节流传输,一次传输按规定大小才传送出去。注意关闭未使用管道文件描述符函数说明pipe(建立管道):1) 头文件 #i.原创 2021-07-30 17:34:47 · 417 阅读 · 0 评论 -
时间、定时器与休眠
时间、定时器与休眠前言1、时间:2、定时器与休眠一、时间数据结构与转化函数二、定时器与休眠总结前言1、时间:日历时间:UTC,格林威治时间,从1970.1.1.00:00开始,以秒数度量,存储于time_t类型时区:不同国家使用不同时区和夏时制,时区定义于系统本地时区文件/etc/localtime地区:显示格式差异,地区信息维护于/usr/hare/local软件时钟(jiffies):各系统调用的精度受限于此,大小定义于常量HZ(100=HZ=10ms)时间转换函数:日历时间、分解时间.原创 2021-07-29 11:53:47 · 1571 阅读 · 0 评论 -
信号处理函数创建signal、sigaction、kill、sigqueue
信号前言一、信号处理函数signal()1、信号处理函数注册signal()2、信号发送kill()3、阻塞信号(信号掩码)sigprocmask()与等待状态信号sigpending()①、阻塞状态字获取和设置②、信号集操作函数(状态字表示)4、等待信号pause()二、信号处理函数sigaction() 首选1、信号处理函数注册sigaction()2.信号发送sigqueue()总结前言信号是事件发生时对进程的通知机制。也称之为软件中断信号分两类:①、用于内核向进程通知事件,构成标准信号。.原创 2021-07-28 11:12:44 · 616 阅读 · 0 评论 -
线程创建、终止取消、同步(互斥锁条件变量)
线程创建、终止取消、同步前言一、线程创建pthread_create1、创建非分离线程2、创建分离线程①、在线程里使用 pthread_detach分离②、使用线程属性pthread_attr_t ,创建线程就分离3、线程连接pthread_join二、线程终止与取消1.线程正常终止 pthread_exit2.线程取消 pthread_cancel①、取消状态及类型、取消点②、清理函数push/pop三、线程同步:互斥量和条件变量1、互斥量①、静态/动态分配互斥量②、加锁和解锁互斥量③、互斥量死锁:④、.原创 2021-07-26 10:08:11 · 493 阅读 · 0 评论 -
进程的创建、终止、监控、执行
进程前言一、进程的创建 fork()/vfork()1、获得进程id2、fork()3、vfork()二、进程的终止 exit()/_exit()1、正常结束进程 exit()2、结束进程执行 _exit()3、exit()与_exit()区别三、监控子进程 wait()/waitpid()1、wait()2、waitpid()四、程序的执行 exec()族1、exec()族2、system()五、僵尸进程和孤儿进程1、概念2、危害与解决方法六、守护进程与后台进程前言fork创建一个子进程,该.原创 2021-07-23 19:38:18 · 388 阅读 · 0 评论 -
程序存储结构与虚拟内存
程序存储结构与虚拟内存一、程序存储结构1、存储时2、运行时二、虚拟内存一、程序存储结构程序存储结构分为:存储时和运行时的结构1、存储时C语言在还没调入内存之前,分为3个区域:代码区(text)、数据区(data)、未初始化数据区(bss)。代码区(text):存放二进制代码,代码区可共享(被别的程序调用)、只读防止被修改。数据区(data):包含全局初始化数据区和静态数据区。存放已经被初始化的全局变量、静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。未初始化数据区(b.原创 2021-07-23 10:23:31 · 662 阅读 · 3 评论 -
静态库与动态库
静态库与动态库前言一、静态库生成二、动态库生成三、利用动态库做成的程序无法运行?前言我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。①、静态库:在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。静态库的名字一般是libxxx.a(Linux),xxx是该lib的名称。②、动态库:在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。动态库的名字一般是libxxx.so(Linux),有时候也是 libx.原创 2021-07-22 10:54:33 · 129 阅读 · 0 评论 -
文件IO与标准库IO
文件IO与标准库IO一、文件(系统)IO与标准库IO二、标准IO 相关的API1.fopen / fcolse2.fread/fwrite/fseek/ftell3.fgetc/fgets fputc/fputs三、文件IO相关API1.open/close2.read/write3.lseek4.ioctl/fcntl四、进阶文件I/O1.独占方式创建文件2.向文件尾部追加数据 与非阻塞IO3.复制文件描述符4.在文件特定偏移量处的I/O:pread/pwrite5.分散输入和集中输出:readv/w原创 2021-07-21 23:56:52 · 164 阅读 · 0 评论