![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux-系统编程
少言才不会咸
这个作者很懒,什么都没留下…
展开
-
Linux C实现纯用户态抢占式多线程
原文: [https://www.toutiao.com/a6808804287469060612/?tt_from=mobile_qq&utm_campaign=client_share×tamp=1585487900&app=news_article_social&utm_source=mobile_qq&utm_medium=toutiao_...转载 2020-03-29 23:32:31 · 511 阅读 · 0 评论 -
【转】用shell模拟多进程
#!/bin/bash#sub process do somethingfunction a_sub_process { echo "processing in pid [$$]" sleep 1}#创建一个fifo文件FIFO_FILE=/tmp/$.fifomkfifo $FIFO_FILE#关联fifo文件和fd6exec 6<>$FIFO_FILE #转载 2017-02-26 19:59:38 · 291 阅读 · 0 评论 -
Linux系统编程复习
@@@@cpu如何操作内存?①通过地址总线告诉内存控制器。在什么地方操作数据②控制总线,发送读/写的信号③数据总线,传送数据----------------------------------------------#makefile文件.PHONY:clean allCC=gccCFLAGS=-Wall -gBIN=dm01_baseforkall:$(BIN)%.o:%.c原创 2017-06-30 16:17:48 · 534 阅读 · 0 评论 -
Socket PRGM: chat_1Vn
//client.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h原创 2017-06-26 15:54:22 · 339 阅读 · 0 评论 -
Socket PRGM: chat_p2p
//client_p2p#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet原创 2017-06-26 15:49:55 · 243 阅读 · 0 评论 -
SimpleSniffer
/***************SimpelSniffer.c*************/#include <stdio.h>#include <unistd.h>#include <sys/socket.h>#include <stdlib.h>#include <sys/types.h>#include <linux/if_ether.h>#include <linux/in.h>转载 2017-06-26 15:46:38 · 338 阅读 · 0 评论 -
基于Linux的Tcp端口扫描器的实现
【代码】基于Linux的Tcp端口扫描器的实现。原创 2017-06-14 21:02:51 · 1087 阅读 · 0 评论 -
进程扇和进程链的实现
#include "io.h"//进程链int main(int argc, char const *argv[]){ pid_t pid; int i = 0; int counter = atoi(argv[1]); for (i = 0; i < counter; ++i) { pid = fork(); if (p原创 2017-11-11 14:52:40 · 733 阅读 · 0 评论 -
GCC 编译器分步生成
源文件经过预处理器,完成预编译,生成预编译.i文件 gcc -o hello.i -E hello.c 预编译文件经过编译器,完成编译,生成汇编.s文件 gcc -o hello.s -S hello.i 汇编文件进过汇编器,生成.o目标文件 gcc -o hello.o -c hello.s 多个目标文件经过链接器,完成链接,生成可执行文件 gcc -o hello....原创 2017-05-17 19:47:41 · 888 阅读 · 0 评论 -
分析一段程序内存segment分配
#include <stdio.h>#include <stdlib.h>/** * * bss段的变量 * 没有初始化的和初始化为0的全局变量和静态变量,bss类型的全局变量只占运行时的内存空间,而不占文件空间。 * */int num_bss_1;int num_bss_2 = 0;static int num_bss_3;/** *...原创 2019-03-01 15:41:06 · 477 阅读 · 0 评论 -
linux下生成动态库和静态库的方法
生成动态库:#首先,生成带有PIC选项的.o文件 gcc -fPIC -c *.c -I ../include#将.o文件打包为动态库gcc -shared -o libDynamic.so *.o生静态库:#首先,生成普通的.o文件 gcc -c *.c -I ../include#生成静态库ar rcs libStatic.a *.o...原创 2019-03-20 20:29:38 · 140 阅读 · 0 评论 -
execv函数族
转载 2019-03-21 15:41:52 · 221 阅读 · 0 评论 -
pipe实现管道命令
int main(){ int fd[2]; pipe(fd); pid_t pid = fork(); if(pid == 0) { close(fd[0]); dup2(fd[1], STDOUT_FILENO); ...转载 2019-03-22 14:28:56 · 316 阅读 · 0 评论 -
mmap相关
存储映射I/O 存储映射I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。这样,就可在不适用read和write函数的情况下,使用地址(指针)完成I/O操作。 使用这种方法,首先应通知内核,将一个指定文件映射到存储区域中。这个映射工作可以通过...转载 2019-03-22 16:07:05 · 234 阅读 · 0 评论 -
signal信号相关
(一)Linux常规信号一览表1) SIGHUP: 当用户退出shell时,由该shell启动的所有进程将收到这个信号,默认动作为终止进程2) SIGINT:当用户按下了<Ctrl+C>组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动作为终止进程。3) SIGQUIT:当用户按下<ctrl+\>组合键时产生该信号,用户终端向正在运行中的由该终端启动...转载 2019-03-23 13:14:39 · 930 阅读 · 0 评论 -
线程相关
LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下) 进程:独立地址空间,拥有PCB 线程:也有PCB,但没有独立的地址空间(共享) 区别:在于是否共享地址空间。 独居(进程);合租(线程)。 Linux下: 线程:最小的执行单位 进程:最小分配资源单位,可看成是只有一个线程的进程。Linux内核线程实现原理类Unix系统中,早...转载 2019-03-23 17:19:41 · 107 阅读 · 0 评论 -
Linux下Mysql
使用数据库步骤:1.引用头文件<mysql/mysql.h>2.makefile 链接加上-lmysqlclient3.初始化client4.建立连接5.client向server发送sql语句,server返回client结果6.断开连接一 连接数据库mysql_init(MYSQL * pmysql)MYSQL *mysql_real_connect(MYSQL *pmysql原创 2017-02-16 11:05:52 · 180 阅读 · 0 评论 -
Linux进程控制demo
/** 1、编写一个孤儿进程,这个孤儿进程可以同时创建100个僵死进程。*/#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <unistd.h>int main(){ pid_t pid; pid = fork(); if(pid == 0原创 2016-11-25 19:15:17 · 308 阅读 · 0 评论 -
Linux进程间通信(IPC)demo
/*1、编写两个进程a和b,利用共享内存技术,a向共享内存写字符串,b将从共享内存中读到的字符串在屏幕上打印出来。*/#include <stdio.h>#include <stdlib.h>#include <sys/ipc.h>#include <sys/shm.h>#include <string.h>#include <unistd.h>int main(int argc, c原创 2016-11-25 22:24:10 · 607 阅读 · 0 评论 -
Linux内核链表学习
//从内核链表抽象模拟的小程序#include "stdlib.h"#include "stdio.h"#include "string.h"struct List{ struct List * prev,*next;};struct Content{ char A[32]; int B; char C[32]; struct List ptr;原创 2016-11-03 19:01:03 · 264 阅读 · 0 评论 -
DNS中NS和SOA区别
ns 授權很簡單… 假設你註冊的 domain 叫 abc.com ,而你有 ns1 與 ns2 兩台 server 。 那,你必需從 .com 的權威伺服器授權給你,其設定或類似如此: $ORIGIN com.abc IN NS ns1.abc.com.abc IN NS ns2.abc.com.ns1.abc IN A 1.2.3.4ns1.abc IN A 1.2.3.5然後,你转载 2016-11-07 10:37:49 · 25135 阅读 · 0 评论 -
Linux多线程
一 什么是线程?- 进程执行的最小单元是线程,被称为轻量级进程(LightWeight Process,LWP)- 单线程的进程可以简单认为是只有一个线程的进程- 一个进程在同一时间可以做一件事,有了多线程后一个进程同一时间做很多件事情- 无论系统有几个cpu,多线程都可以使进程并发处理多个事务- 一个线程阻塞并不会影响到另一个线程- 多线程的进程可以尽可能的利用系统cpu系统- 有几原创 2016-11-29 11:10:12 · 382 阅读 · 0 评论 -
Linux守护进程demo
/*自己动手实现一个守护进程,当控制台窗口关闭时还可以在后台运行。每隔一秒钟向my.log文件中插入一条记录,记录格式如下:yyyy-mm-dd hh:mi:se记录内容,其中yyyy为年,mm为月,dd为天,hh为小时,mi为分钟, se为秒。*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ti原创 2016-11-29 11:11:18 · 421 阅读 · 0 评论 -
Linux下socket编程
一 TCP/IP与套接字- 套接字是通信端点的抽象- 套接字同样适用于本地的通信,代替管道- wirte和read同样适用于套接字二 TCP通讯1)tcp使用的过程,client端,主动连接方叫client。server端,被动接收方叫server。=>TCP先连接(三次握手)client > server:发送SYN aserver > client:回复SYN b,ack a原创 2016-12-10 17:33:12 · 875 阅读 · 0 评论 -
GDB\Makefile的用法
一、 环境 vim .bashrc ulimit -c unlimited //启用core二、makefile 启用gdb.SUFFIXES: .cpp .oCC=g++SRCS=main.c \ work.cppOBJS=$(SRCS:.cpp=.o)EXEC=myexec>all: $(OBJS) $(CC) -o $(EXEC) $(OBJS) @ech原创 2016-11-19 19:19:27 · 521 阅读 · 0 评论 -
Linux下利用Socket+Multithreading实现聊天
/*tcp:client端*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/i原创 2016-12-02 15:58:54 · 508 阅读 · 0 评论 -
Linux下利用FIFO+Thread实现聊天
/*client1_str.c*/#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h>#include <errno.h>#include <pthread.h>#include <unistd.h>原创 2016-12-02 15:54:32 · 562 阅读 · 0 评论 -
“隔山打牛”之用open函数改变标准输出
int main(void){ char s[] = "hello.txt"; int i = 0; close(STDOUT_FILENO); //关闭标准输出文件描述符 int fd1 = open("/dev/pts/1", O_WRONLY); //打开设备文件/dev/pts/1,该设备将做为标准输出文件描述符 int fd = op原创 2016-11-20 22:01:42 · 447 阅读 · 0 评论 -
Linux文件操作demo
/*1、编写一个程序读取a.txt文件,将文件内容数字从小到大排序,并将排序结果写入b.txt。a.txt文件内容如下:324565326745489542475367890321*/#include <stdio.h>#include <errno.h>#include <stdlib.h>#include <string.h>int main(int a原创 2016-11-20 22:36:23 · 442 阅读 · 0 评论 -
Linux进程控制
1,进程创建方式system 系统调用shellfork 创建和父进程一样的进程拷贝exec 创建一个新的进程,与父进程不同2,得到pid、和ppid#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>int main(void){ printf("pid = %d\n",原创 2016-11-22 17:03:35 · 265 阅读 · 0 评论 -
Linux信号处理和守护进程
一、信号的概念- 信号随时发生,接受信号的进程也可以没有控制权- 每个信号名都以SIG开头,包含在<signal.h>中- 当进程接收到一个信号,他可以对信号采取如下操作之一: 忽略这个信号 捕获这个信号,这需要执行一段称为信号处理器的特殊代码 允许执行信号的默认操作- 当进程对发送给它的信号采取措施,叫信号被传送- 产生信号和递送信号之间的时间间隔叫做信号为决- 进程不能简原创 2016-11-25 18:59:18 · 1543 阅读 · 0 评论 -
Linux文件操作
1、文件描述符STDIN_FILENO 0 标准输入STDOUT_FILENO 1 标准输出STDERR_FILENO 2 标准错误2、系统函数 open() close() 打开、关闭文件//该包含的头文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>int ope原创 2016-11-20 21:59:30 · 243 阅读 · 0 评论 -
Linux进程间通信
一、无名管道- 无名管道时半双工的,就是对于一个管道来讲,只能读或者写- 无名管道只能在相关、有共同祖先的进程间使用- 一个fork或者exec调用创建的子进程继承了父进程的文件描述符1,打开和关闭管道int pipe(int filedes[2]);//在你从一个管道中读写,管道必须存在//如果成功建立管道,则会打开两个文件描述符,并把它们的值保存在一个数值//第一个文件描述符用于读原创 2016-11-23 22:03:28 · 255 阅读 · 0 评论 -
Linux共享库.so的使用
so库简介so文件在linux中为共享库,与windows下的dll文件类似so文件中的函数可以供多个进程调用,最大可能的提供二进制代码的复用共享库可以使代码维护工作大大简化so文件不可实现两进程的通信1,so文件编译方法so文件的源文件不需要由main函数,即使有也不会被加载。编译的时候gcc需要加-fPIC选项,这可以使gcc产生与位置无关的代码链接的时候gcc使用-shared原创 2016-11-22 16:53:06 · 554 阅读 · 0 评论