Linux/unix
铲灰
平凡的一个人
展开
-
linux查看网络套接字使用统计
linux查看网络套接字使用统计原创 2021-12-11 13:29:52 · 1214 阅读 · 0 评论 -
非阻塞connect函数
///当我们以非阻塞的方式来进行连接的时候,返回的结果如果是 -1,这并不代表这次连接发生了错误,如果它的返回结果是 EINPROGRESS, ///那么就代表连接还在进行中, 后面可以通过poll或者select来判断socket是否可写,如果可以写,说明连接完成了 ret = connect(fd, (struct sockaddr*)&addr, sizeof...原创 2020-03-22 15:28:08 · 326 阅读 · 0 评论 -
C语言读写锁
#include <stdio.h>#include <pthread.h>int counter;pthread_rwlock_t rwlock;//3个线程不定时写同一全局资源,5个线程不定时读同一全局资源void *th_write(void *arg){ int t; while (1) { ///互斥量 ...原创 2020-03-16 18:47:31 · 2923 阅读 · 0 评论 -
wait/waitpid函数详解
#include<sys/types.h>#include<sys/wait.h>pid_t wait(int *status);pid_t waitpid(pid_t pid, int *status, int options);特殊参数和返回情况:参数pid: >0 回收指定ID的子进程 -1 回收任意子进程(相当于wait...原创 2020-02-26 11:06:17 · 1380 阅读 · 0 评论 -
僵尸进程
僵尸进程: 子进程退出,父进程没有回收子进程资源(PCB),则子进程变成僵尸进程孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为1号进程init进程,称为init进程领养孤儿进程一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信...原创 2020-02-26 10:48:50 · 190 阅读 · 0 评论 -
fork函数
#include <unistd.h>#include <sys/types.h>#include <stdio.h>#include <stdlib.h>/*pid_t fork(void);子进程复制父进程的0到3g空间和父进程内核的PCB,但id不同fork调用一次返回两次父进程中返回子进程ID子进程中返回0读时共享,写...原创 2020-02-26 10:27:00 · 106 阅读 · 0 评论 -
用fcntl改变File Status Flag
#include <unistd.h>#include <fcntl.h>#include <errno.h>#include <string.h>#include <stdlib.h>#define MSG_TRY "try again\n"int main(){ char buf[10] = {0}; ...原创 2020-02-26 10:06:55 · 168 阅读 · 0 评论 -
select函数实现非阻塞读数据
#include <iostream>#include <map>#include <string.h>#include <unistd.h>#include <assert.h>#include <queue>#include <sys/types.h>#include <sys/stat.h...原创 2019-12-26 15:31:43 · 555 阅读 · 1 评论 -
error出错处理
当UNIX系统函数出错时,通常会返回一个负值,而且整型变量errno通常被设置为具有特定信息的值。在支持多线程的环境中,多个线程共享进程地址空间,每个线程都有属于它自己的局部error以避免一个线程干扰另一个线程。对于errno应当注意两条规则。第一条规则是:如果没有出错,其值不会被例程清除。因此,仅当函数的返回值指明出错时,才检验其值。第二条规则是:任何函数都不会将error的值设置为0,而...原创 2019-05-23 22:53:34 · 424 阅读 · 0 评论 -
遇到的问题
1.一直申请内存,没有释放内存,导致设备内存不够用,程序挂掉了。2.踩内存,导致程序挂掉了。代码:#include <stdio.h>#include <string.h>int main(){ int a = 1, b = 2, c = 3; memset(&b, 0, 8);//本来是只清零b变量,实际上清零了8个字节...原创 2019-04-18 16:15:34 · 120 阅读 · 0 评论 -
对端主动关闭连接后,recv收的返回值为0
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include <uni...原创 2019-04-17 18:54:49 · 1642 阅读 · 0 评论 -
一个很简单的tcp/ip小程序
网络编程原创 2016-11-19 21:12:19 · 2178 阅读 · 0 评论 -
管道的简单操作
#include #include #include #include //这个源文件为pip3.c, 生成的可执行程序为pipe3int main(){int data_processed;//int file_pipes[2];//文件描述符,在Linux下面,文件描述符是很小的整数const char some_data[] = "123";原创 2016-11-17 14:16:59 · 328 阅读 · 0 评论 -
gcc编译过程理解
GNU CC(通常称为GCC)是GNU项目的编译器,它能够编译C、C++语言编写的程序。使用gcc,程序员可以对编译过程有更多的控制,编译过程分为3个阶段。预处理;汇编;链接。程序员可以再编译的任何阶段结束后停止整个编译过程以检查编译器在该阶段输出的信息。深入了解gcc之前,我们先看一个小例子。#include #include int ma原创 2016-12-02 16:41:20 · 342 阅读 · 0 评论 -
read函数的阻塞和非阻塞的区别
读常规文件是不会阻塞的,不管读多少字节,read一定会在有限的时间内返回。从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用read读终端设备就会阻塞,如果网络上没有接收到数据包,调用read从网络读就会阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在那里。同样,写常规文件是不会阻塞的,而向终端设备或网络写则不一定。阻塞读终端原创 2016-12-03 16:36:30 · 12807 阅读 · 3 评论 -
fork函数和wait/waitpid函数
复制一个进程映象fork使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。子进程与父进程的区别在于:1、父进程设置的锁,子进程不继承2、各自的进程ID和父进程ID不同3、子进程的未决告警被清除;4、子进程的未决信号集设置为空集原创 2016-12-04 13:10:47 · 3771 阅读 · 0 评论 -
exec函数族
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。其实有六种以exec开头的函数,统称exec函数:#include i原创 2016-12-05 14:30:50 · 252 阅读 · 0 评论 -
signal函数
信号的概念程序在执行的时候,几乎任何时刻都会发生事件。信号通常用来向一个进程通知事件。信号是不可提前预知的,所以信号是异步的信号随时都可能发生,接收信号的进程也可以没有控制权。每个信号名都以SIG开头,信号名的定义在中。信号和中断的区别信号与中断的相似点:(1)采用了相同的异步通信方式;(2)当检测出有信号或中断请求时,都暂停正在执行的程序而转去原创 2016-12-07 15:10:16 · 715 阅读 · 0 评论 -
使用C++实现锁机制
#include <stdio.h>#include <assert.h>#include <stdlib.h>#include <iostream>#include <unistd.h>#include <pthread.h>using namespace std;class Mutex{public: Mutex() { ...原创 2018-06-26 09:16:42 · 2594 阅读 · 0 评论 -
网络编程中多进程通信
#include #include #include #include #include #include #include #include #include int main(){char buf[1024];//用于存放数据的bufint sockfd;//文件描述符struct sockaddr_in cliaddr;//sock原创 2016-11-29 22:06:24 · 324 阅读 · 0 评论