Linux
loreal8
学生
展开
-
Linux进程知识总结
进程什么是进程描述进程-PCB什么是PCBtask_ struct内容分类组织进程进程状态僵尸进程危害孤儿进程进程优先级查看系统进程用top命令更改已存在进程的nice并行 & 并发虚拟地址fork函数写时拷贝fork调用失败的原因进程等待进程等待必要性进程等待的方法进程程序替换替换原理什么是进程课本概念:程序的一个执行实例,正在执行的程序等。内核观点:担当分配系统资源(CPU时间,内存)的实体 。描述进程-PCB什么是PCB进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属原创 2020-09-14 17:38:09 · 125 阅读 · 0 评论 -
自制网络工具集合(抓包,扫描主机,扫描端口,获取本机信息,dos攻击)
网络工具集1.shark抓包工具(1).数据包格式(2).系统协议的类型(3).原始套接字1.shark抓包工具(1).数据包格式(2).系统协议的类型(3).原始套接字抓包工具获取链路层的数据包,手动层层解析,对链路层,网络层,传输层的报头格式有更加深入的理解。首先从网络层抓取的包都是这个样子的...原创 2020-09-03 17:54:37 · 648 阅读 · 0 评论 -
Linux--UDP通信简单程序
服务器程序:使用recvfrom函数阻塞接收信息。并将信息用sendto函数发回去客户端程序:使用sendto函数,发送数据给客户端。然后使用recvfrom函数接收服务器发回的消息。服务器程序#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys.原创 2020-08-06 21:33:50 · 223 阅读 · 0 评论 -
Linux--select函数的使用
select函数:当有多个客户端链接上来时,一般会采用多线程的方式去处理客户端的请求交互。但是当连接上来的客户端很多的时候,多线程对于网络的开销太大了。所以就有了select这个函数,在一个程序内处理多个连接。#include <sys/select.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>int select(int nfds, fd_set *readf原创 2020-07-22 18:02:03 · 146 阅读 · 0 评论 -
Linux--socket套接字相关函数的使用
套接字socket函数:创建监听套接字#include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol); //参数一:网络协议关键字。AF_INET,指IPV4协议 //参数二:流式套接字。SOCK_STREAM指TCP协议 //参数三:一般写0,让操作系统根据前两个参数自动匹配协原创 2020-07-22 16:35:52 · 173 阅读 · 0 评论 -
Linux--sem函数实现生产者消费者模型
生产者消费者#include <semaphore.h>int sem_init(sem_t *sem, int pshared, unsigned int value);int sem_wait(sem_t *sem);int sem_post(sem_t *sem);原创 2020-07-03 12:46:28 · 526 阅读 · 0 评论 -
Linux--生产者消费者模型,信号量和条件信号量
生产者和消费者一个生产者,三个消费者模型,利用#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#define PRO 1#define CON 3int ready = 0; // 生产的产品编号pthread_cond_t cond;pthread_mutex_t mutex;pthread_t tids[PRO+CON] ;原创 2020-06-30 21:47:37 · 156 阅读 · 0 评论 -
Linux--利用PV操作模拟互斥
互斥#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>int semop(int semid, struct sembuf *sops, unsigned nsops);//参数一:信号量集的id//参数二:一个结构体数组的首地址//参数三:结构体数组的大小//这个结构体如下:struct sembuf { unsigned short sem_num; /* 第几个信号量原创 2020-06-19 15:58:05 · 627 阅读 · 0 评论 -
Linux--信号量集semget,semctl函数使用
信号量#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>int semget(key_t key, int nsems, int semflg); //创建/打开信号量集//参数一:起个名//参数二:信号量集合中信号量的个数,打开的话写0;//参数三:打开写0,创建写O_CREAT | 权限//返回创建好的信号量集的semidint semctl(int semid, int原创 2020-06-19 15:40:04 · 942 阅读 · 0 评论 -
Linux--共享内存shmget,shmat,shmdt,shmctl函数使用
共享内存#include <sys/ipc.h>#include <sys/shm.h>int shmget(key_t key, size_t size, int shmflg); //创建/打开共享内存//参数一:起个名//参数二:共享内存的大小//参数三:打开的话填0,创建的话O_CREAT | 权限//返回值是共享内存的shmid,-1代表出错void *shmat(int shmid, const void *shmaddr, int shmflg);原创 2020-06-19 15:10:46 · 410 阅读 · 0 评论 -
Linux--共享内存mmap函数
共享内存mmap函数#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);//参数一:要映射的地址,不知道就写NULL去让系统选择//参数二:映射的大小//参数三:保护的方式有读,写,执行,空 PROT_READ PROT_WRITE PROT_EXEC PROT_NONE//参数四:标志位原创 2020-06-19 14:39:11 · 393 阅读 · 0 评论 -
Linux--借助消息队列,模拟实现服务器与多个客户端之间独立发送消息
假设有一个服务器,有多个客户端访问它,怎么借助消息队列,让它把a客户端的回复消息只发给a,而b客户端的回复消息只发给b。首先是服务器程序:#include <unistd.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/ipc.h>#include <sys/msg.h>#include<signal.h>str原创 2020-06-18 16:27:15 · 1558 阅读 · 0 评论 -
Linux--消息队列相关函数使用
消息队列消息队列(message queue):不在磁盘上,没有文件名,有一个关键字key可以打开消息队列,消息队列中有很多通道,专门用来写入/读取信息的。#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgget(key_t key, int msgflg); //创建或者打开消息队列//参数一:自己指定的关键字key的编号//参数二:标志位,如果是创建消息队列则 O原创 2020-06-18 15:28:17 · 322 阅读 · 0 评论 -
Linux--sigaction函数使用
sigaction函数#include <signal.h>int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);第一个参数:信号第二个参数:信号处理函数结构体第三个参数:旧的信号处理函数struct sigaction { void (*sa_handler)(int); //函数指针,一般用这个,不用第二个函数指针原创 2020-06-12 12:29:25 · 192 阅读 · 0 评论 -
Linux--sigsuspend函数的使用
sigsuspend函数#include <signal.h>int sigsuspend(const sigset_t *mask);在sigsuspend函数执行期间,不管之前的信号屏蔽集,使用sigsuspend函数参数的屏蔽集,直至函数执行完毕。相当于信号屏蔽集暂时被替换。...原创 2020-06-12 11:25:49 · 1056 阅读 · 0 评论 -
Linux--信号屏蔽函数setprocmask函数的使用
setprocmask函数关于函数介绍在之前的文章已经介绍过了要复习点这里上次没有使用SET_SETMASK模式,这次使用这个模式完成情景模拟#include<stdio.h>#include<unistd.h>#include<signal.h>#include<stdlib.h>void handler(int s) { printf("signal is %d\n", s);}int main() { //设置俩信号集,一个放我原创 2020-06-11 21:40:04 · 404 阅读 · 0 评论 -
Linux--子进程继承父进程那些信息,以及父子进程的区别
子进程的继承fork出子进程后,子进程都会继承父进程以下信息;1.文件描述符2.实际用户ID,实际组ID,有效用户ID,有效组ID3.进程组ID4.添加组ID5.对话期ID6.控制终端7.设置-用户-ID标志和设置-组-ID标志8.当前工作目录9.根目录10.文件方式创建字11.信号屏蔽和排列12.对任意打开文件描述符大的在执行时关闭标志。13.环境14.链接的共享存储段15.资源限制父子进程间的区别1.fork的返回值2.进程ID3.不同的父进程ID4.子进程的t原创 2020-06-05 16:15:26 · 2344 阅读 · 0 评论 -
Linux--信号的内核结构,信号集,信号屏蔽/阻塞
信号的内核结构(注意:子进程会继承父进程的信号的屏蔽和排列)在进程的PCB中会有关于信号的模块,当一个进程发出某个信号后,会被操作系统拿到,操作系统又会给对应的PCB,然后PCB根据第几号信号在block信号集中查看是否上锁,并把pending信号集里的对应位置置为1。如果block信号集没有锁,那就直接去sighand信号集里找对用的操作,如果这个信号没有指定的话那里边写的就是SIG_DFL就是默认操作,指定了的话就是存指定函数的函数地址,然后去执行那个函数。如果block信号集是1锁了的话,p原创 2020-06-05 16:02:14 · 340 阅读 · 1 评论 -
Linux--可重入函数/不可重入函数
当我们在使用malloc函数的时候,如果有信号中断了我们malloc操作,假设malloc刚刚从堆上的空闲链上找到合适的位置,结果打断后去执行其他操作,刚好其他操作里也有malloc,也恰好找到了刚刚malloc的地方,把那个空间从空闲空间链上取下,然后其他操作结束,返回。此时主函数内的那个malloc就取到了一个非法地址。可见,某一些操作不可以被随意中断。不可重入函数所谓不可重入函数就是说,在函数执行时,被打断了,那么如果这个函数是不可重入的,这个函数就将从头重新执行。函数内使用了以下内容就是不.原创 2020-06-05 14:31:40 · 390 阅读 · 0 评论 -
Linux--alarm与setitimer两个定时函数
alarm函数和setitimer函数都可以触发14号SIGALRM信号alarm#include <unistd.h>unsigned int alarm(unsigned int seconds); //参数为定时的秒注意:alarm只会触发一次。示例程序:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<signal.h>void handle原创 2020-06-04 18:26:05 · 440 阅读 · 0 评论 -
Linux--信号小程序
信号信号源来自:键盘,操作系统,硬件,kill pid等。查看系统信号:kill -l信号处理:方式1:缺省处理,就是按照原本操作系统默认的方式处理方式2:忽略处理,但是SIGKILL 和SIGSTOP不可忽略。方式3:自己处理,但是SIGKILL 和SIGSTOP不可自行处理。信号函数:#include <signal.h>typedef void (*sighandler_t)(int); //宏定义sighandler_t指针,指向一个返回值void参数int原创 2020-05-29 14:06:20 · 162 阅读 · 0 评论 -
Linux--动态库手动链接
动态库手动链接使用dlopen可以在程序指定位置调用指定函数。打开一个库文件:返回值时一个句柄参数一指定库文件名,参数二指定方式,RTLD_LAZY用到的时候打开,RTLD_NOW立即打开void *dlopen(const char *filename, int flag);指定使用那一个函数:参数一是dlopen的返回值。参数二是函数名,返回函数的地址。void *dlsym(void *handle, const char *symbol);关闭打开的文件句柄:int d原创 2020-05-29 13:11:41 · 880 阅读 · 0 评论 -
Linux--创建使用动态库流程
动态库Linux下动态库文件的文件名形如 libxxx.so,其中so是 Shared Object 的缩写,即可以共享的目标文件。在链接动态库生成可执行文件时,并不会把动态库的代码复制到执行文件中,而是在执行文件中记录对动态库的引用。程序执行时,再去加载动态库文件。如果动态库已经加载,则不必重复加载,从而能节省内存空间。使用动态库分为三步:假设我们已经有了头文件groable.h,加法函数add.c,减法函数sub.c首先生成.o文件:gcc -c add.c -I. //-I.代表在当原创 2020-05-29 12:32:06 · 237 阅读 · 0 评论 -
Linux--用stat函数实现ls -l功能
stat函数函数常用的定义: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *path, struct stat *buf);第一个参数是文件名,第二个参数是stat的结构体,用来存放stat取出来的元数据stat结构体内容如下:struct stat { dev_t st_dev; /* I原创 2020-05-29 11:11:16 · 900 阅读 · 0 评论 -
Linux--打开目录,读取目录函数操作
打开目录函数打开目录使用的函数:#include <sys/types.h>#include <dirent.h>)//头文件如上DIR *opendir(const char *name); //打开函数int readdir(unsigned int fd, struct old_linux_dirent *dirp,unsigned int count); //读取函数dirent的结构体内容如下: struct old_linux_dirent {原创 2020-05-28 18:30:25 · 934 阅读 · 0 评论 -
Linux--文件锁fcntl的使用
文件锁fcntl的使用fcntl函数主要用于锁文件。函数原型:第一个参数fd就是文件描述符。第二个参数是锁的命令,有三种分别是(F_GETLK获得锁, F_SETLK非阻塞方式设置锁, F_SETLKW阻塞方式设置锁)如果以第三种阻塞方式设置锁,则参数要加上flock结构体地址struct flock 结构体如下:结构体第一个参数l_type就是锁的状态,是写锁,读锁,还是不锁。第二个whence参数表示从哪里开始锁,一般是SEEK_SET位置。第三个l_start从开始位置原创 2020-05-28 16:34:47 · 359 阅读 · 0 评论 -
Linux--自制shell
自制shell#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<unistd.h>#include<sys/wait.h>#define ERR_EXIT(msg)\ do{ printf("[%s][%d] %s:%s\n", __FILE__, __LINE__, msg, strerror(errno)原创 2020-05-15 13:54:28 · 292 阅读 · 0 评论