
【Linux编程】
文章平均质量分 72
Linux编程点滴记录
重庆李四
追求卓越,过完一生
展开
-
Linux或Windows下判断socket连接状态
场景:客户端程序需要实时知道和服务器的连接状态。比较通用的做法应用层是采用心跳机制,每隔一端时间发送心跳能回复说明服务器正常。实际应用场景中,服务端和客户端并不是一家厂商的,比如说笔者这种情况,服务端是其他厂商,应用层协议没有心跳机制,客户端显示的连接状态需要客户端自己处理。笔者最开始使用的QTcpSocket进行socket连接,在客户端程序监听下面3个信息。原创 2024-03-01 11:59:46 · 1668 阅读 · 0 评论 -
RedHat gcc编译器版本升级到4.8.2支持C++11标准
原创 2018-05-10 01:06:44 · 4690 阅读 · 0 评论 -
Linux系统编程——孤儿进程模拟及分析
孤儿进程介绍父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程。孤儿进程就是父进程先死亡,子进程成为孤儿进了孤儿院了。孤儿进程模拟代码展示#include <stdio.h>#include <stdlib.h>#include <string.h>#include <...原创 2018-04-21 11:38:17 · 420 阅读 · 0 评论 -
Linux系统编程——僵尸的模拟以及僵尸进程的预防
僵尸进程介绍子进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸进程。由于我们的程序也许是7*24小时不宕机的,程序不结束,僵尸进程残留在PCB中资源就不会被回收,所以我们要清晰的认识僵尸进程,在程序中尽量避免僵尸进程。僵尸进程模拟我们通过下面程序来进行模拟僵尸进程,父进程fork()5个子进程,最后一个子进程用于查看僵尸进程,让父进程最后死亡。代码展...原创 2018-04-21 11:07:20 · 378 阅读 · 0 评论 -
Linux系统编程:使用semaphore信号量和mutex互斥量实现多个生产者和消费者模型
代码实现如题,使用semaphore信号量和mutex互斥量实现多个生产者和消费者模型。本来是想只用信号量实现生产者消费者模型的,但是发现 只能在一个生产者和一个消费者之间,要在多个生产者和消费者模型必须和mutex互斥锁搭配使用才行,sem信号量只是控制并发数的。采用数组模拟产品区,代码中有一定的注释。需要Linux下线程相关知识进行支撑,这里不细说,直接看实现代码。#include <s...原创 2018-04-14 00:11:55 · 1172 阅读 · 0 评论 -
Linux系统编程:使用mutex互斥锁和条件变量实现多个生成者和消费者模型
实现代码如题,使用mutex互斥锁和条件变量实现多个生成者和消费者模型。直接上代码,需要线程中的互斥锁和条件变量的相关知识进行支撑。这里就不细说了呀,代码中有一定的注释。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <...原创 2018-04-13 23:36:02 · 842 阅读 · 0 评论 -
Shell脚本编程:使用shell打印九九乘法表
前言学了东西就得用起来,学习任何东西都一样,学以致用嘛。下面是用shell脚本编写九九乘法。用到了shell函数、while循环、if条件控制 等shell基本语法。脚本代码#!/bin/bash99_table(){ num=$1 row=1 while [ $row -le $num ] ;do col=1 while [ $col...原创 2018-04-05 21:25:05 · 11511 阅读 · 1 评论 -
Linux系统编程:简单实现ls -R 功能
实现效果这是系统提供的这是自己实现的实现思路主要是目录项的读取和文件详细信息的获取以及文件类型的判断。打开目录opendir->读取目录readdir->展示文件名->判断是否是普通文件还是目录文件是目录文件保存目录文件路径->递归遍历目录文件。这里主要用到函数原型是 opendir,closedir,readdir,lstat函数。还有就是文件类型的判断,自己封装简单封装...原创 2018-04-05 11:57:21 · 4655 阅读 · 0 评论 -
Linux系统编程:习题,父子进程通过信号通信,实现交替数数
Linux练习题,父子进程通过信号通信,实现交替数数。习题思路父子进程交替发信号进行驱动从而实现数数,值得注意的是 不管是父进程或者子进程谁先发送信号 都会面临一个问题,另外一个进程的信号捕捉函数是否已经注册了!所以有2种方式,一种是 最先发送信号的进程先 sleep一下等另外一个进程的信号捕捉函数注册完毕了 就可以发送信号进行相互驱动。第二种方式,采用阻塞信号集的方式,在后数数的进程注册信号捕捉...原创 2018-04-12 10:26:54 · 5799 阅读 · 0 评论 -
APUE第二版源码编译问题解决
作为C/C++程序员肯定都知道APUE—《Unix环境高级编程》这本书。笔者在互联网上找了个遍 ,准备下个中文第三版,居然没有下载到 全TMD是第二版 冒充第三版,真气人。第二版就第二版呗,将就看呗 ,一样的是经典!接下来就是下载源码呗,看书的时候方便验证。APUE源码地址 http://apuebook.com/,1 2 3 版的源码都在里面。下面是笔者在运行源代码中发现的问题,以及解决办法。第...原创 2018-04-04 21:57:40 · 344 阅读 · 1 评论 -
Linux系统编程:lseek扩展文件大小失败原因分析
lseek函数原型off_t lseek(int fd, off_t offset, int whence);我们知道lseek可以显式地为一个打开文件设置偏移量。我们可以在文件末尾往后继续偏移,从而形成文件空洞,再对该文件的下一次写将加长该文件。测试代码笔者测试代码如下,按道理 每次会扩展200字节,然而结果扩展了2字节,只扩展了写入的\0。后来发现,将O_APPEND模式 去掉就可以正常的扩展...原创 2018-04-04 21:10:36 · 2381 阅读 · 0 评论 -
Linux系统编程:验证kernel内核缓存区大小->4096字节
使用的APIread/write函数 常常被称为Unbuffered IO。指的是无用户缓存区。但不保证不使用内核缓存区。我们可以用来验证内核缓存区的大小是不是4096字节。这里我们还用一个系统函数 dup2 文件描述符重定向函数,来实现 从终端输入 直接输出到文件中。验证内核缓存区大小思路很简单,就是测试4096这个临界点。首先往文件中写4096个字节,查看数据是否写入到磁盘文件,从终端读入数据...原创 2018-04-04 00:40:04 · 3872 阅读 · 4 评论 -
Linux系统编程:代码实现多重管道功能
代码功能介绍我们在linux命令中可以使用 | 进行数据的流动,比如命令 ls -l | grep fifo | wc -l 如下图。这就是多重管道,今天我们用代码来实现类似的功能。代码实现思路管道 | 的实现当然要用到pipe函数 用来创建管道,每条单独的命令 用一个子进程来实现,linux命令默认是STDIN_FILENO作为输入端,STDOUT_FILENO作为输出端。故此,会用到dup2文...原创 2018-04-08 16:53:39 · 3752 阅读 · 1 评论 -
Linux系统编程:fifo有名管道的使用
fifo介绍我们可以利用管道进行进程间通信,已经有匿名管道 为啥还要fifo 有名管道呢?有名管道是对匿名管道的一个补充,匿名管道是用在有血缘关系的进程间通信。fifo有名管道呢,可以用在任何进程间通信。函数原型 int mkfifo(const char *pathname, mode_t mode);第一个参数是匿名管道的路径,第二个参数创建有名管道的权限。当然man 手册是最好的文档,一定要...原创 2018-03-20 22:21:41 · 438 阅读 · 0 评论 -
Linux系统编程:pipe匿名管道的使用,实现linux命令下管道命令
pipe函数介绍函数原型int pipe(int pipefd[2]) 来创建匿名管道; 传出2个fd 文件描述符,pipefd[0]表示匿名管道的读端,pipefd[1]表示匿名管道的写端。有这个管道后,我们就可以在有血缘关系的进行之间实现通信了。pipe的使用我们在linux中使用 使用的 | 竖线可以通过管道来实现,也就是可以用C语言编程实现 ps aux | grep bash 之类的效果...原创 2018-03-20 21:53:36 · 785 阅读 · 0 评论 -
Linux系统编程:循环创建N个子线程并顺序输出
实现代码代码很简单,如下。但是也有坑!在给线程传参数的不能穿 循环遍历i 的 地址,因为 i 在主线程中 ,被多个线程共享,所以不是唯一的。那么如何让每个线程 都有独自拥有自己的顺序编号呢?1.方法一:当然可以在堆上开辟空间存储顺序编号呗。自己有自己的顺序编号的空间各自独立。2.方法二:就是参数是void* 可以直接将循环变量i直接传给void* ,由于 arg 是每个线程 栈空间上的变量 故此 ...原创 2018-03-23 00:45:59 · 3270 阅读 · 0 评论 -
Linux系统编程:mmap介绍和使用mmap实现进程间通信
mmap函数介绍这个函数有啥子作用?m-> memory 内存,map ->映射,见名知义,就是创建内存映射区,作用就是:将磁盘文件的数据映射到内存,用户通过修改内存就能修改磁盘文件。所以我们可以用mmap来修改文件,也可以用于进程间通信!函数原型void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_...原创 2018-03-23 00:24:40 · 2560 阅读 · 0 评论 -
Linux系统编程:fork函数的使用【循环创建N个子线程】
fork函数介绍在linux下面进行系统编程,一定要养成一个好习惯,不懂的函数 直接 找男人,用man 指令进行查看,虽然是全英文 但是要强迫自己 学会看英文文档!下面是介绍,我们看重点。FORK(2) Linux Programmer's Manual ...原创 2018-03-11 10:08:44 · 992 阅读 · 1 评论 -
Linux系统编程:获取指定目录下指定文件类型的数量
分析编程实现对指定目录下的指定文件类型数量的统计。这里涉及到对目录文件的打开和对目录文件下的文件的遍历。这里主要用的2个库函数,打开目录的 opendir函数,readdir函数。对这2个库函数不熟悉?请看man 3 readdir,man 3 opendir,非常详细。opendir函数 打开失败的时候 返回NULL ,errorno被设置,可以通过perror获取错误信息。readdir函数会...原创 2018-03-18 08:01:05 · 3327 阅读 · 1 评论