Linux
文章平均质量分 76
rugu-sco
记得一定要快乐
展开
-
通讯录--动态开辟内存+文件存储
终极版–增删改查 排序 动态开辟内存 文件存储 addressbook.h#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<assert.h>#include<string.h>#define DEFAULT_SZ 3//初始通讯录大小为3...原创 2018-03-15 20:17:54 · 248 阅读 · 0 评论 -
gdb 调试多进程与多线程
gdb的基础知识介绍: gdb是Linux环境下的代码调试工具。 使用:需要在编译的时候加上 -g 选项. 开始使用: gdb 可执行程序名 退出:ctrl + d 或 quit 调试过程中的常用命令list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行list/l 函数名:列出某个函数的源代码r或run:运行程序s或step:进入函...原创 2018-04-21 13:06:07 · 342 阅读 · 0 评论 -
Linux -- 进程间关系和守护进程
1, 进程组(Process Group)每个进程除了有一个进程ID之外,还属于一个进程组。 进程组是一个或多个进程的集合。 通常,它们与同一 作业 相关联,可以接收来自同一终端的各种信号。 每个进程组有一个唯一的进程组ID。每个进程组都可以有一个组长进程。 组长进程的标识是,其进程组ID等于其进程ID。 组长进程可以创建一个进程组,创建该组中的进程,然后终止。 只要在某个进程组中...原创 2018-04-25 15:55:39 · 373 阅读 · 0 评论 -
网络编程套接字(一)
一,认识 IP 地址IP协议有两个版本, IPv4和IPv6 IP地址是在IP协议中, 用来标识网络中不同主机的地址 对于IPv4来说, IP地址是一个4字节, 32位的整数 我们通常使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 用点分割的每一个数字表示一个字节, 范围是 0 - 255源IP地址和目的IP地址在IP数据包头部中, 有两个IP地址...原创 2018-05-03 13:24:00 · 514 阅读 · 0 评论 -
网络基础 (一)
计算机网络背景网络发展独立模式: 计算机之间相互独立网络互联: 多台计算机连接在一起, 完成数据共享局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起广域网WAN: 将远隔千里的计算机都连在一起所谓 “局域网” 和 “广域网” 只是一个相对的概念, 并没有绝对的广域网认识”协议”协议是一种约定, 就好比接头暗号(天王盖地虎, 提莫一米五), 是大家约定好...原创 2018-05-10 21:40:25 · 932 阅读 · 0 评论 -
网络编程套接字(二)
简单的TCP服务器/客户端程序server/*================================================================# File Name: tcp_server.c# Author: rjm# mail: rjm96@foxmail.com# Created Time: 2018年05月06日 星期日 11时24分3...原创 2018-05-17 20:07:16 · 296 阅读 · 0 评论 -
netstat 工具
netstat 工具netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况netstat -a 或 --all #显示所有连线中的Socketnetstat -at #列出所有tcp端口netstat -au #列出所有udp端口 #列出所有处于监听状态的 Socketsnetsta...原创 2018-05-17 20:39:47 · 468 阅读 · 0 评论 -
函数实现 -- 分割字符串,并获取最后一段字符串
在写myshell的时候, 发现系统shell会显示当前目录, 也想实现这样的效果, 但是我只找到了一个函数char *getcwd( char *buffer, int maxlen );//功 能:获取当前工作目录//参数说明:getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中//参数maxlen为buffer的空间大小。//返 回 值:成功则返回当前...原创 2018-04-29 10:21:07 · 6481 阅读 · 0 评论 -
myshell -- 支持cd, 管道, 可执行程序后台运行等
myshell支持cd命令输入输出重定向输出追加重定向支持可执行程序后台运行头文件#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<sys/types.h>#include<sys/wait....原创 2018-04-29 19:12:58 · 1124 阅读 · 0 评论 -
网络基础(二)
应用层协议协议是一种 “约定”. socket api的接口, 在读写数据时, 都是按 “字符串” 的方式来发送接收的. 如果我们要传输一些 “结构化的数据” , 该怎么办呢?例如: 我们需要实现一个服务器版的加法器 我们需要客户端把要计算的两个数发过去, 然后由服务器进行计算, 再把结果返回给客户端方案一 客户端发送一个形如”1+1”的字符串 这个字符串中有两个操作...原创 2018-05-28 16:46:32 · 653 阅读 · 0 评论 -
网络基础_应用层传输层解析
应用层协议 协议是一种 “约定”. socket api的接口, 在读写数据时, 都是按 “字符串” 的方式来发送接收的. 如果我们要传输一些 “结构化的数据” , 该怎么办呢?例如: 我们需要实现一个服务器版的加法器 我们需要客户端把要计算的两个数发过去, 然后由服务器进行计算, 再把结果返回给客户端方案一 客户端发送一个形如”1+1”的字符串 这个字符串中有两个操作数...原创 2018-05-30 10:30:49 · 2125 阅读 · 2 评论 -
IO多路转接 -- epoll
epollepoll 是Linux特有的I/O复用函数 它使用一组函数来实现对应任务.1, epoll_create使用 epoll_create 来创建一个 epoll 模型int epoll_create(int size);创建一个epoll的句柄,size用来告诉内核这个监听的数目一共有多大。 需要注意的是,当创建好epoll句柄后,它就是会占用一个fd值,在l...原创 2018-06-06 17:18:57 · 247 阅读 · 0 评论 -
shell 基本语法(条件测试, 引号, 逻辑与或非)
shell 基本语法(条件测试, 引号, 逻辑与或非)条件测试常见的测试命令 test [, 通过检测退出码, 来决定条件测试是否成立.例如:read myinttest $myint -eq 100 # 判断从标准输入读到的值是否等于 100echo $? # 等于返回 0, 不等于返回 1常见的测试选项有:整数测试: -ep(等于) -ne...原创 2018-06-08 17:18:10 · 1691 阅读 · 2 评论 -
Linux - 三组 I/O 复用函数的比较
三组 I/O 复用函数的比较selectpollepollselect/* According to POSIX.1-2001 */#include <sys/select.h>/* According to earlier standards */#include <sys/time.h>#include <sys/types....原创 2018-07-24 16:15:04 · 253 阅读 · 0 评论 -
死锁问题
1, 什么是死锁?2, 死锁是如何产生的?3, 如何避免死锁?1. 什么是死锁死锁的规范定义集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件,那么该组进程是死锁的。一种情形执行程序中两个或多个线程发生永久堵塞(等待)每个线程都在等待被其他线程占用并堵塞了的资源。例如如果线程A锁住了记录1并等待记录2,而线程B锁住了...原创 2018-04-25 13:08:10 · 491 阅读 · 0 评论 -
Linux -- 线程
线程概念准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个线程线程是程序执行的最小单位(调度的最小单位)Linux下线程的特点1,线程共享进程数据,但也拥有自己的一部分数据线程ID 一组寄存器(硬件上下文)栈 errno 信号屏蔽字 调度优先级2,一个进程的多个线程共享同一地址空间,因此Text Segment、Data Segm...原创 2018-04-19 21:38:17 · 145 阅读 · 0 评论 -
Linux进程杂谈
01.进程的调度算法1、时间片轮转调度算法(RR) 给每个进程固定的执行时间,根据进程到达的先后顺序让进程在单位时间片内执行,执行完成后便调度下一个进程执行,时间片轮转调度不考虑进程等待时间和执行时间,属于抢占式调度。优点是兼顾长短作业;缺点是平均等待时间较长,上下文切换较费时。适用于分时系统。2、先来先服务调度算法(FCFS) 根据进程到达的先后顺序执行进程,不考虑等待...原创 2018-03-16 12:29:59 · 206 阅读 · 0 评论 -
popen与system
popen函数popen函数 进程IO函数 与pclose一起使用函数说明 popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程函数原型FILE* popen ( const char* command, const char* type );int pclose ( FILE* stream );...原创 2018-03-23 11:42:51 · 427 阅读 · 0 评论 -
Linux重要命令和目录
01.基本命令ls: 罗列当前目录下的内容 pwd:查看当前位置 cd:进入目录 touch:新建文件(touch 已经存在的文件名 - 可更新文件的修改时间) rm:删除文件 rm -rf:直接删除目录及其下面所有文件 mkdir:创建目录,即文件夹man:manual 查询工具 不会的命令之类的都可以 man 命令名字 查询 当然可查询的东西很多 man手册共8章:...原创 2018-03-06 17:47:14 · 245 阅读 · 0 评论 -
进程间通信之消息队列
进程间通信进程间通信就是在不同进程之间传播或交换信息 进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。 进程间通信主要包括管道 系统IPC(包括消息队列,信号,共享存储) 套接字(SOCKET)消息“消息”是在两台计算机间传送的数据单位。消息可以非...原创 2018-03-29 20:49:05 · 215 阅读 · 0 评论 -
简单实现myshell
一个简易的myshellfock函数//fork函数 创建子进程pid_t fork(void);execvp函数//进程替换int execvp(const char *file ,char * const argv []);waitpid函数//进程等待pid_t waitpid(pid_t pid,int * status,int options);...原创 2018-03-24 21:27:46 · 989 阅读 · 0 评论 -
封装 fork wait execvp, 编写函数 process_create
利用回调函数封装fork wait execvp 等函数, 编写一个progress_create函数#include<stdio.h>#include<stdlib.h>#include<unistd.h>int process_create(int(*func)(), const char *file, char *argv[]){ ...原创 2018-03-25 09:51:54 · 420 阅读 · 1 评论 -
新手教程 — git github 码云
本文主要介绍git github 以及 码云 的基本操作如何在GitHub和码云上创建项目并通过git上传代码 环境: Linux 前提: 1.Linux上安装了git 2.注册了GitHub 或者码云账号01.先在GitHub或者码云上创建一个项目02.创建完成后,记住项目链接 左上角地址栏的链接记下来 我这里是 http...原创 2018-03-25 20:52:38 · 578 阅读 · 0 评论 -
文件相关系统调用 open/read/write/close
一些文件相关的系统调用 例如open/read/write/closeopenint open(const char* filename, int flags, mode_t mode);filename:文件名 flags:打开文件的方法 mode:若文件不存在,设置新文件的权限返回值:成功则返回文件描述符,否则返回-1flags 用于指定文件的打开/创建模式,这个...原创 2018-03-26 12:43:06 · 1130 阅读 · 0 评论 -
进程通信 -- 共享内存 信号量
共享内存共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间的数据传递便不再 涉及到内核,换句话说就是进程不再通过执行进入内核的系统调用来传递彼此的数据但是共享内存没有进行同步与互斥测试两个进程利用共享内存进行通信的代码comm.h#pragma once#include <stdio.h>#include &l...原创 2018-04-08 21:12:41 · 257 阅读 · 0 评论 -
打包动静态库以及myshell
静态库程序编译一般需经预处理、编译、汇编和链接几个步骤静态库是指在我们的应用中,有一些公共代码是需要反复使用的,就把这些代码编译为“库”文件在链接步骤中,链接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库静态库特点是可执行文件中包含了库代码的一份完整拷贝缺点就是被多次使用就会有多份冗余拷贝练习打包静态库编写简单的 add sub mul div 函数, 编译...原创 2018-04-09 14:23:48 · 190 阅读 · 0 评论 -
Linux -- 进程信号
进程信号的基本概念用户输入命令,在Shell下启动一个前台进程用户按下Ctrl-C,这个键盘输入产生一个硬件中断如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断终端驱动程序将Ctrl-C解释成一个SIGINT信号,记在该进程的PCB中(也可以说发送了一 个SIGINT信号给该进程)当某个时刻要从内核返回到该进程的用户空间代码...原创 2018-04-15 21:24:14 · 529 阅读 · 0 评论 -
进程间通信--管道
匿名管道匿名管道只能使有亲缘关系的进程通信01.利用匿名管道从键盘获取数据显示到屏幕//匿名管道#include <stdio.h>#include <string.h>#include <unistd.h>//创建一个匿名管道 fd:文件描述符数组 fd[0]:读端 fd[1]:写端//成功返回 0 , 失败返回错误代码i...原创 2018-04-05 17:32:20 · 146 阅读 · 0 评论 -
关于write和read以及文件读写位置
write#include <unistd.h>ssize_t write(int fd, const void *buf, size_t nbyte);fd:文件描述符 buf:指定的缓冲区,即指针,指向一段内存单元 nbyte:要写入文件指定的字节数 返回值:写入文档的字节数(成功);-1(出错) write函数把buf中nbyte写入文件描述符handle所...原创 2018-04-19 10:25:06 · 12412 阅读 · 0 评论 -
listen(), connect(), accept() 三者的关系
listen(), connect(), accept() 三者的关系socket 编程流程listen()函数#include &lt;sys/types.h&gt; #include &lt;sys/socket.h&gt;int listen(int sockfd, int backlog);在网络通信中, 客户端通常处于主动的一方, 而服务器...原创 2018-08-23 17:01:53 · 7419 阅读 · 0 评论