Linux系统编程
橙子@C
这个作者很懒,什么都没留下…
展开
-
韦东山TCP/UDP编程
注意UDP,client如果使用connect,则用send;没有使用,用sendto带上server结构体信息。原创 2024-03-30 18:29:13 · 400 阅读 · 0 评论 -
简单的socket TCP编程
grep "struct test {" * -nir //n带行号 i不区分大小写 r 递归。(1)ifconfig :查看虚拟机ip 192.168.124.7。电脑cmd : telnet 192.168.124.7 8989。电脑cmd : ping 192.168.124.7 是否能通。原创 2024-03-30 12:28:18 · 707 阅读 · 0 评论 -
Linux环境变量
一、环境变量的概念1、环境变量的含义程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的。2、环境变量的分类1)按生效的范围分类。系统环境变量:公共的,对全部的用户都生效。用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。2)按生存周期分类。永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。临时环境变量:使用时在Shell中临时定义,退出Shell后失效。3、Linux环境变量Lin原创 2021-12-26 11:12:00 · 27059 阅读 · 6 评论 -
select /poll/epoll : I/O复用处理高并发
(2)select能够监听到事件的发生,但是不知道 是哪一个fd,需要循环判断。(1)最大只能监听1024个fd;2、free -m 查看内存情况;1、top 查看CPU使用情况;原创 2021-11-20 17:46:37 · 381 阅读 · 0 评论 -
网络编程:Linux提供的API解析
1、int socket(int domain, int type, int protocol);地址转换APIint inet_aton(const char* straddr,struct in_addr *addrp); 把字符串形式的“192.168.1.123”转为网络能识别的格式char* inet_ntoa(struct in_addr inaddr); 把网络格式的ip地址转为字符串形式客户端的connect函数...原创 2021-08-29 10:25:19 · 167 阅读 · 0 评论 -
网络编程:socket编程步骤
Sockt服务器和客户端的开发步骤1.创建套接字2.为套接字添加信息(IP地址和端口号)3.监听网络连接原创 2021-08-22 14:44:15 · 2437 阅读 · 0 评论 -
网络编程:字节序
概述字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。常见序1. Little endian:将低序字节存储在起始地址2. Big endian:将高序字节存储在起始地址原创 2021-08-22 14:22:43 · 144 阅读 · 0 评论 -
网络编程:概述TCP/UDP以及端口号的作用
TCP/UDP对比1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前 不需 要建立连接2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付 3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的 UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)4. 每一条TCP连接只能是点到点的.原创 2021-08-22 13:22:37 · 3647 阅读 · 0 评论 -
进程间通信:【共享内存 + 信号量 + 消息队列】
共享内存用来传递数据;信号量用来同步;消息队列用来 在客户端修改了共享内存后 通知服务器读取。server.c#include<stdio.h>#include<stdlib.h>#include<sys/shm.h> // shared memory#include<sys/sem.h> // semaphore#include<sys/msg.h> // message queue#include<stri转载 2021-08-22 12:20:43 · 249 阅读 · 0 评论 -
进程间通信:信号量
信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。1、特点 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。 支持信号量组。 2、原型最简单的信号量是只能取 0 和 1 的变量,这也是信号量最常见的一种形式原创 2021-08-22 12:15:10 · 836 阅读 · 2 评论 -
进程间通信:信号
对于 Linux来说,实际信号是软中断,许多重要的程序都需要处理信号。信号,为 Linux 提供了一种处理异步事件的方法。比如,终端用户输入了 ctrl+c 来中断程序,会通过信号机制停止一个程序。信号概述 信号的名字和编号: 每个信号都有一个名字和编号,这些名字都以“SIG”开头,例如“SIGIO ”、“SIGCHLD”等等。 信号定义在signal.h头文件中,信号名都定义为正整数。 具体的信号名称可以使用kill -l来查看信号的名字以及序号,信号是从1开始编号的,不存在0号信号。ki原创 2021-08-21 19:06:51 · 278 阅读 · 0 评论 -
进程间通信:共享内存
共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。1、特点共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。因为多个进程可以同时操作,所以需要进行同步。信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。2、原型#include <sys/shm.h>// 创建或获取一个共享内存:成功返回共享内存ID,失败返回-1int shmget(key_t key, size_t size, int flag);// 连接原创 2021-08-21 11:26:53 · 277 阅读 · 0 评论 -
进程间通信:消息队列
消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列 ID)来标识。1、特点消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。消息队列存在于内核当中,一个消息队列有很多的消息节点,每一个消息节点包括消息类型,用一个整数表示,还有消息内容,根据key值找到队列号;2、原型#inclu.原创 2021-08-14 17:40:28 · 450 阅读 · 0 评论 -
进程间通信:FIFO命名管道
FIFO,也称为命名管道,它是一种文件类型。1、特点FIFO 可以在无关的进程之间交换数据,与无名管道不同。FIFO 有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。2、原型#include <sys/stat.h>// 返回值:成功返回0,出错返回-1int mkfifo(const char *pathname, mode_t mode);其中的 mode 参数与 open 函数中的 mode 相同。一旦创建了一个 FIFO,就可以用一般的文件 I/O 函原创 2021-08-08 22:17:56 · 543 阅读 · 0 评论 -
进程间通信:无名管道
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC 的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams 等。其中 Socket 和 Streams 支持不同主机上的两个进程 IPC。一、管道管道,通常指无名管道,是 UNIX 系统 IPC 最古老的形式。1、特点:它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。它只能用于具有亲缘关系的进程之间的通信(也是父转载 2021-08-08 17:01:41 · 172 阅读 · 0 评论 -
进程:popen的使用
参考文章:https://blog.csdn.net/libinbin_1014/article/details/51490568比system在应用中的好处: 可以获取运行的输出结果函数原型: #include “stdio.h” FILE popen( const char command, const char* mode )参数说明: command: 是一个指向以 NULL 结束的 shell 命令字符串的指针。这行命令将被传到 bin/sh 并使用 -...原创 2021-08-08 15:10:33 · 757 阅读 · 0 评论 -
进程:system 的使用
参考博文:https://www.cnblogs.com/leijiangtao/p/4051387.htmlsystem()函数的返回值如下: 成功,则返回进程的状态值; 当sh不能执行时,返回127; 失败返回-1;#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include <unistd.h>#include<stdio.h>#include&...原创 2021-08-08 15:00:49 · 450 阅读 · 0 评论 -
进程:exec族函数配合fork使用
#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include <unistd.h>#include<stdio.h>#include<string.h>#include <stdlib.h>int main(){ pid_t pid; int data; while(1) .原创 2021-07-26 21:28:59 · 125 阅读 · 0 评论 -
进程:exec族函数
1.exec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。2.功能: 在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。3.函数族:exec函数族分别是:execl, execlp, execle, execv, execvp, execvpe函数原型...转载 2021-07-25 19:40:22 · 404 阅读 · 0 评论 -
进程:fork的使用
1.用fork函数创建一个进程 pid_t fork(void);fork函数调用成功,返回两次返回值为0,代表当前进程是子进程返回值非负数(子进程的进程ID),代表当前进程为父进程调用失败,返回-12.fork创建一个子进程的一般目的#include<stdio.h>#include <sys/types.h>#include <unistd.h>int main(){ pid_t pid; ...原创 2021-07-18 18:13:07 · 487 阅读 · 0 评论 -
进程:相关概念
问1. 什么是程序,什么是进程,有什么区别?程序是静态的概念,gcc xxx.c –o pro 磁盘中生成pro文件,叫做程序进程是程序的一次运行活动, 通俗点意思是程序跑起来了,系统中就多了一个进程问2. 如何查看系统中有哪些进程?a.使用ps指令查看 实际工作中,配合grep来查找程序中是否存在某一个进程ps -aux|grep a.outb.使用top指令查看,类似windows任务管理器问3. 什么是进程标识符?每个进程都有一个非负整数表示的唯一ID, 叫做pid..原创 2021-07-18 17:09:01 · 110 阅读 · 1 评论 -
线程:线程条件控制实现线程的同步
线程1等待,线程2对gParam自加,当等于3时触发线程1,线程1将其置为0#include<stdio.h>#include<pthread.h>#include <unistd.h>//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,// void *(*start_routine) (void *), void *arg.原创 2021-06-27 16:38:15 · 98 阅读 · 0 评论 -
线程:什么情况造成死锁
两把锁可以造成死锁,具体事例如下:#include<stdio.h>#include<pthread.h>#include <unistd.h>//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,// void *(*start_routine) (void *), void *arg);int gParam = 0;//p.原创 2021-06-27 15:20:40 · 114 阅读 · 0 评论 -
线程:线程同步之互斥量加锁解锁
#include<stdio.h>#include<pthread.h>#include <unistd.h>//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,// void *(*start_routine) (void *), void *arg);int gParam = 0;//public source;pthrea.原创 2021-06-27 15:05:07 · 107 阅读 · 0 评论 -
线程:共享内存空间的代码验证
仔细观察对全局变量gParam的打印信息,看看是否线程共享内存空间#include<stdio.h>#include<pthread.h>#include <unistd.h>//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,// void *(*start_routine) (void *), void *arg);int原创 2021-06-27 12:08:01 · 146 阅读 · 0 评论 -
线程:线程创建等待及退出
#include<stdio.h>#include<pthread.h>//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,// void *(*start_routine) (void *), void *arg);void *funktion1(void *argv){ static int data = 3; .原创 2021-06-20 20:12:11 · 126 阅读 · 0 评论 -
文件:feof的用法
当文件没读到尾巴之前,feof(fd)=0 ;当文件读到尾巴 ,feof(fd) = !0 ;原创 2021-06-20 15:37:42 · 346 阅读 · 0 评论 -
文件:标准c库打开创建文件以及光标移动
#include<stdio.h>#include<string.h>int main(){ //FILE *fopen(const char *pathname, const char *mode); FILE *fd; char *writebuff = "huangcaichenghenshuai"; char readbuff[128] = {0}; fd = fopen("./tex.原创 2021-06-20 14:54:38 · 135 阅读 · 0 评论 -
文件:修改配置文件
修改前:#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include <unistd.h>#include<stdio.h>#include<string.h>#include <stdlib.h>int main(int argc ,char **argv){ if(argc != 2) {..原创 2021-06-19 20:52:01 · 119 阅读 · 0 评论 -
文件:自己实现 CP 的功能
1.首先先认识一下什么是系统传参 argc ,argv,比如现在运行程序./a.out src dest ; argc原创 2021-06-19 18:48:39 · 158 阅读 · 0 评论 -
文件:打开创建的补充
1.当已经使用O_CREAT ,此时文件已经存在,又使用O_EXCL ,会出错#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include <unistd.h>#include<stdio.h>#include<string.h>#include <stdlib.h>int main(){ int fd; fd =原创 2021-06-14 21:30:34 · 89 阅读 · 0 评论 -
文件:读写操作以及光标移动
#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include <unistd.h>#include<stdio.h>#include<string.h>#include <stdlib.h>//int open(const char *pathname, int flags);//int open(const char *pathnam.原创 2021-06-14 21:08:09 · 256 阅读 · 0 评论 -
文件:写入
原型:ssize_t write(int fd, const void *buf, size_t count);#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include <unistd.h>#include<stdio.h>#include<string.h>//int open(const char *pathname, int flags)原创 2021-06-14 19:01:18 · 76 阅读 · 0 评论 -
文件:打开或者创建
1.文件打开函数原型: int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 返回值是int 型,一般用 fd 接收,叫作文件描述符,例如:fd = open("./file",O_RDWR); 打开成功返回一个非负整数,打开失败返回-1;2.参数描述:Pathname:要打开的文件名(...原创 2021-06-14 17:50:00 · 697 阅读 · 0 评论