
Linux C编程
znzxc
这个作者很懒,什么都没留下…
展开
-
两次fork产生进程ID分析
进行两次fork,会产生几个进程,他们的ID是多少,本文通过实例进行分析。基本概念:pid_t:pid_t是typedef定义的类型,表示进程的id。在sys/types.h中定义:typedef short pid_t;所以说pid_t就是一个short类型的变量,实际表示的是内核中进程表的索引。pid_t getpid(void);返回目前进程的ID。pid_t fork(void...原创 2018-05-12 10:23:24 · 2175 阅读 · 0 评论 -
为什么基于TCP的应用需要心跳包(TCP keep-alive原理分析)
TCP keep-alive的三个参数用man命令,可以查看linux的tcp的参数:man 7 tcp其中keep-alive相关的参数有三个:tcp_keepalive_intvl (integer; default: 75; since Linux 2.4) The number of seconds between TCP keep-aliv...转载 2018-08-25 19:22:09 · 2088 阅读 · 0 评论 -
TCP socket心跳包示例程序
在做游戏开发时,经常需要在应用层实现自己的心跳机制,即定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性。在TCP socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能更大。—— 这里实现的是由客户端给服务器发送心跳包,基本思路是:1) 服务器为每个客户端保存了IP和计数器count,即map<fd...转载 2018-08-25 19:25:07 · 821 阅读 · 0 评论 -
linux指南,不定期更新
以下内容都是节选自博客或其他文章,作为自己学习linux的一条路径。网络方向:我的看法是以下面的顺序来看书:APUE再深读 – 尤其是进程,线程,IPC,套接字 多核程序设计 - Pthread一定得吃透了,你很NB UNIX网络编程 – 卷一,卷二 TCP/IP网络详解 – 卷一 再看上面两本书时就该看了 5.TCP/IP 网络详解 – 卷二 我觉得看到卷二就差不多了,当然卷...原创 2018-09-30 20:30:14 · 175 阅读 · 0 评论 -
linux下python的使用
可以分为两类:1.在命令行中运行,输入python,使用ctrl+z退出 python环境 2.建立脚本第一行指定python版本相对路径运行需要权限,绝对路径不需要。...原创 2018-11-13 10:18:03 · 6928 阅读 · 1 评论 -
linux如何查看某个端口是否被占用
面试中被问到这个问题了。。总结下用到命令 netstat -anp 查看网络状态 listen表示监听,established表示建立连接。local address表示本地ip地址和端口号,foreign address表示外部连接的ip地址和端口号。用grep过滤加-t只显示tcp连接,加-u只显示udp连接。 ...原创 2018-11-14 11:28:50 · 1935 阅读 · 0 评论 -
linux虚拟机 复制文件到主机-------发邮件^_^
在linux虚拟机中写好了代码,如何复制到主机中呢。可以使用发邮件的方法:mail -s "server.cpp" 123456789@qq.com -a /home/name/server.cpp 主题 目标邮箱 ...原创 2018-11-18 19:58:50 · 679 阅读 · 0 评论 -
SIGTERM与SIGKILL
#include <iostream>#include <signal.h>using namespace std;void func(int a){ cout<<"ctrl c"<<endl;}void func2(int a){ cout<<"kill"<<endl;原创 2018-11-21 20:48:27 · 3308 阅读 · 0 评论 -
Linux下getopt()函数的简单使用
最近在弄Linux C编程,本科的时候没好好学啊,希望学弟学妹们引以为鉴。好了,虽然啰嗦了点,但确实是忠告。步入正题:我们的主角----getopt()函数。英雄不问出处,getopt()函数的出处就是unistd.h头文件(哈哈),写代码的时候千万不要忘记把他老人家include上。 再来看一下这家伙的原型(不是六耳猕猴):int getopt(int argc,char...转载 2018-11-22 10:14:11 · 246 阅读 · 0 评论 -
图解one loop per thread:使用muduo网络库实现web服务器
最近在看陈硕的muduo网络库,书中一直提到一个概念:one loop per thread,一直不是很理解,看完了源码之后自己梳理了一下,有所感悟,图解一下one loop per thread思想.主线程属于main loop,创建listenfd,创建listenfd的可读回调函数,该回调函数执行accept返回交流套接字,同时new一个http对象(与交流套接字绑定),添加进thr...原创 2018-12-28 10:48:36 · 7165 阅读 · 2 评论 -
linux内存管理——mmap函数详解
原文链接:https://blog.youkuaiyun.com/notbaron/article/details/80019134mmap函数是unix/linux下的系统调用。当存在客户-服务程序中复制文件时候,其数据流如下,要经历四次数据复制,开销很大。 如果采用共享内存的方式,那么将大大优化IO操作,数据流变成了如下,数据只复制两次:映射文件或设备到内存中,取消映射就是munm...转载 2018-12-24 09:23:04 · 525 阅读 · 0 评论 -
查看某个进程打开的文件及文件描述符
先使用ps -ux查看进程PID。 使用lsof -p 1430(进程PID) 此时可以获取打开的文件信息,类型、大小、节点信息等。也可以使用 ll proc/1430/fd,查看打开的文件描述符 ...原创 2018-08-10 09:02:40 · 13640 阅读 · 1 评论 -
关于fclose、close关闭标准输出的一点区别
由于调用了_Exit()函数, 不进行清理工作直接进入内核,所以不会输出。加入fclose(), fclose函数隐含包含了一次fflush操作,把缓冲区内的数据冲洗到终端,此时会有输出。加入close(),是不是可以起到同样的效果呢?发现不行,所以close关闭标准输出时不会冲洗缓冲区。...原创 2018-08-09 11:12:05 · 4637 阅读 · 1 评论 -
标准I/O缓冲:全缓冲、行缓冲、无缓冲 .
原文:https://www.cnblogs.com/wonderKK/archive/2012/06/13/2547740.html某日一朋友写了一个HELLO WORLD代码,出不来结果,代码如下:#include <stdio.h>intmain(int argc, char **argv){ printf("hello world!"); ...转载 2018-08-09 11:02:13 · 335 阅读 · 0 评论 -
linux 编译、链接、静态链接、动态链接
3个文件,main.c binaryprint.h binaryprint.c 函数的功能:打印一个整数的二进制形式。binaryprint.hvoid binaryprint(int a);binaryprint.c #include <stdio.h>#include "binaryprint.h"void binaryprint(int a){...原创 2018-05-08 17:34:23 · 261 阅读 · 0 评论 -
关于linux重定向的使用
ls -a #不忽略前面带.的文件、目录ls -l #长列表模式,列出的信息多ls -a > 1.txt #把stdout重定向到1.txt文件中,覆写ls -a >> 1.txt #把stdout重定向到1.txt文件中,追加重定向:对原来系统命令的默认执行方式进行改变,比如在命令行中输入ls,会在屏幕中显示出当前目录,但如果输入ls > 1.t...原创 2018-05-25 22:36:14 · 1139 阅读 · 0 评论 -
网络编程:服务端处理多个客户端----多进程实现、两次fork避免僵尸进程
涉及到一些网络编程的基本概念,这里不做解释。重点集中在用多进程实现,并且两次fork避免僵尸进程。实现的功能很简单,客户端连接成功后,输入一个整数,服务端返回它的二进制形式。客户端输入0,则主动退出。上代码:...原创 2018-05-15 20:35:41 · 744 阅读 · 0 评论 -
网络编程:服务端处理多个客户端----多线程实现、建立线程特有数据.
重点集中在用多线程实现,建立线程特有数据,不会发生数据写入冲突。实现的功能很简单,客户端连接成功后,输入一个整数,服务端返回它的二进制形式。客户端输入0,则主动退出。三个文件: duoxianc.c ,主文件binarykey.c,线程执行函数及特有数据建立client.c,客户端程序基本概念:int pthread_once(pthread_once_t *once_control, void ...原创 2018-05-15 21:05:19 · 1943 阅读 · 0 评论 -
文件操作 fread fwrite fscanf fprintf fseek feof fgets fputs rewind
fopen:打开文件FILE * fopen(const char * path, const char * mode);常用,就不介绍了哈。fscanf:将文件中的内容写入字符串或数字。int fscanf(FILE * stream, const char * format, [argument...]);FILE * stream,文件指针const char * format,格式字符串[...原创 2018-05-26 16:27:13 · 281 阅读 · 0 评论 -
C语言socket编程总结(一)getaddrinfo()函数详解
/** int getaddrinfo( const char* nodename, const char* servname, const struct addrinfo* hints, struct addrinfo** res ); * nodename:节点名可以是主机名,也可以是数字地址。(IPV4的10进点分,或是IPV6的16进制) * servname:包含十进...转载 2018-05-28 22:03:44 · 3657 阅读 · 0 评论 -
关于开源项目——C语言实现FTP服务器的结构解析
项目地址:https://github.com/beckysag/ftp 针对此开源项目的说明,结构分析。 服务端整体框架:1. 从命令行输入得到服务端绑定端口号2. 设置套接口选项,创建监听套接字。3. 用while循环 + fork实现子进程与客户端的交流。4. 父进程的交流套接字关闭,子进程的监听套接字关闭。 在子进程与客户...原创 2018-09-24 09:12:24 · 5249 阅读 · 0 评论 -
linux更改文件所有者chown
在普通用户下,将属于root用户的文件修改为属于普通用户。chown zn test.c发现更改失败因为root权限高于普通用户,所以失败有两种解决办法:1.在root模式下进行修改。2.加sudo即sudo chown zn test.c...原创 2018-07-21 17:16:16 · 1978 阅读 · 0 评论 -
linux正则表达式
原文链接:http://www.cnblogs.com/timxgb/p/5249610.htmlLinux Shell环境下提供了两种正则表达式规则,一个是基本正则表达式(BRE),另一个是扩展正则表达式(ERE)。 下面是这两种表达式的语法列表,需要注意的是,如果没有明确指出的Meta字符,其将可同时用于BRE和ERE,否则将尽适用于指定的模式。正则元字符 模式含义 ...转载 2018-07-27 14:59:06 · 467 阅读 · 0 评论 -
用管道实现父进程给两个子进程传输数据,只有先调度的可以接收到
父进程fork()两次之后,产生了两个子进程,父进程向管道里写数据,子进程读取,两个子进程都能读取到还是先运行的那个可以读取到。代码如下:结果如下: 所以可见,只有一个子进程可以获得管道内的数据,先调度的先获得。...原创 2018-07-31 11:23:51 · 4446 阅读 · 1 评论 -
巧夺天工的kfifo(修订版)
原文:https://blog.youkuaiyun.com/linyt/article/details/53355355Linux kernel里面从来就不缺少简洁,优雅和高效的代码,只是我们缺少发现和品味的眼光。在Linux kernel里面,简洁并不表示代码使用神出鬼没的超然技巧,相反,它使用的不过是大家非常熟悉的基础数据结构,但是kernel开发者能从基础的数据结构中,提炼出优美的特性。 kfi...转载 2019-01-07 10:43:07 · 505 阅读 · 0 评论