
linux系统编程
文章平均质量分 76
helmsgao
这个作者很懒,什么都没留下…
展开
-
总计的命令
# free -m #查看内存使用量和交换区使用量 # mount #查看挂在情况 # df -h #查看各分区使用情况 sfdisk -l 查看硬盘数目 # du -sh #查看指定目录的大小 # grep MemTotal /proc/meminfo #查看内存总量 # grep MemFree /proc/meminfo #查看空闲内存量 #原创 2016-10-31 09:35:13 · 458 阅读 · 0 评论 -
fork()&&进程的创建与终止--多进程编程
1.fork() 在 Linux 中创建一个新进程的唯一方法是使用 fork()函数。fork()函数是 Linux 中一个非常重要的函数,和读者以往遇到的函数有一些区别,因为它看起来执行一次却返回两个值。一个函数真的能同时返回两个值吗?希望读者能认真地学习下面的内容。 (1)fork()函数说明。 fork()函数用于从已存在的进程中创建一个新进程。新进程称为子进程,而原进程原创 2015-06-28 00:18:08 · 4493 阅读 · 0 评论 -
关于Segmentation fault(段错误)探究
在rhel5.4上用GCC编程好长时间了(其实也就1个多月!),经常遇到这种情况:一个程序编译没有任何问题,当执行./a.out的时候出现:“Segmentation fault(段错误)”,下面就是最近的一次情况(目的只是测试strcat函数): #include 2转载 2011-07-11 15:49:46 · 52572 阅读 · 2 评论 -
一个关于socket在非阻塞模式下connect是否成功的例子
一个关于socket在非阻塞模式下connect是否成功的例子void connect_w_to(void) { int res; struct sockaddr_in addr; long arg; fd_set myset; struct timeval tv; int valopt; socklen_t lon; // Create so原创 2015-02-12 00:00:13 · 2157 阅读 · 0 评论 -
linux进程间通讯的几种方式的特点和优缺点,和适用场合。
1.# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。# 信号量( semop原创 2011-07-27 09:40:39 · 17413 阅读 · 2 评论 -
Ubuntu10.04设置共享文件夹
在做嵌入式开发的时候,很多童鞋都是在windows下用虚拟机来安装Linux系统来进行开发的,这样子,虚拟机跟PC机之间文件传递就成了一个问题。在VMware中可以直接设置windows下的共享文件,然后再Linux下mount那个共享文件夹来实现文件夹之间的互通。但是经过我的尝试,有时候会出现不能mount的情况,可能是VMware版本的问题。在这样的情况下,我不想在PC机上面开共享文件转载 2015-04-26 14:55:43 · 593 阅读 · 0 评论 -
linux启动过程中dtb的作用
dtb文件作用的描述是,使用dtb可以减少linux内核版本的数量。同一份linux 内核代码可以在多个板卡上运行,每个板卡可以使用自己的dtb文件。关于dtb,我有以下疑问1,是如何使用dtb文件的? 我的理解是,在linux内核启动过程中会解析dtb文件,根据dtb文件中设备列表进行加注各个外设的驱动模块。不知这样理解是否正确?正确,解析dtb并创建platform device转载 2015-04-01 10:10:11 · 5954 阅读 · 0 评论 -
TCP的三次握手(建立连接)和四次挥手(关闭连接)
TCP的三次握手(建立连接)和四次挥手(关闭连接)参照:http://course.ccniit.com/CSTD/Linux/reference/files/018.PDFhttp://hi.baidu.com/raycomer/item/944d23d9b502d13be3108f61 建立连接: 理解:窗口和滑动窗口TCP的流量控制TCP使用窗转载 2015-02-13 10:44:05 · 1873 阅读 · 0 评论 -
Linux 内核内存检测工具 - Kmemcheck
Linux 内核内存检测工具 - Kmemcheck原创 2015-03-17 19:50:54 · 1005 阅读 · 0 评论 -
浅谈TCP/IP网络编程中socket的行为
我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉:1. TCP/IP协议(如连接的建立和终止、重传和确认、滑动窗口和拥塞控制等等)2. Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为。3. 编写Performant, Scalable的服务器程序。包括多线程、IO Multipl转载 2015-03-19 15:19:06 · 686 阅读 · 0 评论 -
linux send and recv详解
一、send函数 int send( SOCKET s, const ch一、send函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。 客户程序一般用send转载 2015-02-13 16:38:49 · 1364 阅读 · 0 评论 -
结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
摘要: 本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析。一、概述 TCP是面向连接的可靠传输协议,两个进程互发数据之前需要建立连接,这里的连接只不过是端系统中分配的一些缓存和状态变量,中间的分组交换机不维护任何连接状态信息。连接建立整个过程如下(即三次握手协转载 2015-02-13 10:42:53 · 1216 阅读 · 0 评论 -
Linux网络编程socket错误分析
socket错误码: EINTR: 4阻塞的操作被取消阻塞的调用打断。如设置了发送接收超时,就会遇到这种错误。只能针对阻塞模式的socket。读,写阻塞的socket时,-1返回,错误号为INTR。另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。如果recv的返回值为0,那表明连接已经断开,接收操作也转载 2015-02-13 10:06:08 · 1057 阅读 · 0 评论 -
LINUX下select设置超时
LINUX设置连接超时方法:在阻塞套接字的一般情况下,connect ()直到客户端对SYN消息的ACK消息到达之前才会返回。使connect()调用具有超时机制的一个方法是让套接字成为非阻塞的套接字体,然后用select()来等待它完成。s = socket(AF_INET, SOCK_STREAM, 0);//下面获取套接字的标志if ((flags = fcntl(s,转载 2015-02-11 23:30:59 · 5097 阅读 · 0 评论 -
socket的send系统调用
Linux下面socket编程的非阻塞TCP研究tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据. 阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回转载 2015-02-11 23:17:21 · 2102 阅读 · 0 评论 -
设置socket缓冲器的大小以及Linux常用的I/O模型
浅谈linux IO的模型http://www.360doc.com/content/13/0819/15/11818366_308288463.shtmllinux常用的I/O模型:http://www.360doc.com/content/13/0819/16/11818366_308308050.shtmlsocket发送数据时候先把数据发送到socket缓冲区中,之后接受函原创 2015-02-10 11:08:10 · 2602 阅读 · 0 评论 -
linux守护进程
linux守护进程转载 2015-05-14 13:09:37 · 655 阅读 · 0 评论 -
优先级翻转与优先级继承
优先级翻转与优先级继承田海立2006-3-7 摘要本文描述操作系统中的优先级翻转(Priority Inversion,也有翻译为反转,逆转或倒置的)现象以及如何用优先级继承来解决此类问题的方法,并阐述了 Microsoft Platform Builder for Windows CE 环境下,如何查看此种现象。 目 录摘要1 优先级翻转(P转载 2015-06-28 10:12:24 · 2887 阅读 · 1 评论 -
创建虚拟网卡
cat /etc/rc.local 开机就会执行。里面创建虚拟网桥,配置IP后启动。cat /root/create*Tap.sh 创建虚拟网卡,绑定到虚拟网桥后启动。网桥是一种在链路层实现中继,对帧进行转发的技术,根据MAC分区块,可隔离碰撞,将网络的多个网段在数据链路层连接起来的网络设备。Linux 网桥配置命令:brctl# brctl addbr br0原创 2016-09-28 09:57:51 · 1776 阅读 · 0 评论 -
socket的疑问解析
今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口? 讨论完后,才发现,自己虽然熟悉socket的编程套路,但是却并不是那么清楚socket的原理,今天就趁这个机会,把有关socket编程的几个疑问给搞清楚吧。 先给出一个典型的TCP/IP通信示意图。转载 2016-04-21 09:52:55 · 599 阅读 · 0 评论 -
linux 静态库的链接 undefined reference
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(转载 2016-05-13 17:13:00 · 2173 阅读 · 0 评论 -
Linux Proc文件系统实验(代码)
Linux上的/proc目录是一种文件系统,称为proc文件系统(虚拟文件系统),它存储内核状态信息,包括cpu、内存以及进程等信息。proc文件系统有很多优点:应用程序获取内核数据不用切换到内核态,增加了系统的安全性(像ps命令就是通过proc获取进程信息);应用程序可以通过proc直接改变内核参数,这样不用重新编译内核就可以改变和优化内核行为。总之,proc为用户应用程序获取系统内部信息提供了转载 2016-04-19 15:15:47 · 1726 阅读 · 0 评论 -
非阻塞socket判断connect是否成功的方法
1.将打开的socket设为非阻塞的,可以用fcntl(socket, F_SETFL, O_NDELAY)完成(有的系统用FNEDLAY也可).2.发connect调用,这时返回-1,但是errno被设为EINPROGRESS,意即connect仍旧行还没有完成. 3.将打开的socket设进被监视的可写(注意不是可读)文件集合用select进行监视,如果可写 用getsocko原创 2015-03-20 16:28:37 · 9605 阅读 · 0 评论 -
用size命令分析linux程序内存段的分布
用size命令分析linux程序内存段的分布Size命令的输出不包括stack和heap的部分。只包括文本段(text), 代码段(data),未初始化数据段(bss)三部分。1、文本段:包含程序的指令,它在程序的执行过程中一般不会改变。2、数据段:包含了经过初始化的全局变量和静态变量,以及他们的值。3、BSS段:包含未经初始化的全局变量和静态变量。转载 2016-01-15 11:08:17 · 1990 阅读 · 3 评论 -
buffering in standard streams
buffering in standard streamsI found it difficult to figure out what buffering was applied to the standard streams.Consider for example the following unix shell pipeline:$ command1 | command2转载 2015-07-17 11:41:55 · 653 阅读 · 0 评论 -
Linux进程间通信 IPC
深刻理解Linux进程间通信(IPC)一个个大型的应用系统,往往需要众多进程协作,进程(Linux进程概念见附1)间通信的重要性显而易见。本系列文章阐述了Linux环境下的几种主要进程间通信手段,并针对每个通信手段关键技术环节给出详细实例。为达到阐明问题的目的,本文还对某些通信手段的内部实现机制进行了分析。序linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而转载 2015-07-02 16:16:15 · 687 阅读 · 0 评论 -
秒杀多线程
便于学习,特把博主的文章转到此处。转载请标明出处,原文地址:http://blog.youkuaiyun.com/morewindows/article/details/7392749下面列出目录,方便大家查看。1.《秒杀多线程第一篇 多线程笔试面试题汇总》2.《秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别》3.《秒杀多线程第三转载 2015-06-13 00:45:01 · 993 阅读 · 0 评论 -
Linux IPC总结
IPC进程间通信(Inter-Process Communication)就是指多个进程之间相互通信,交换信息的方法。Linux IPC基本上都是从Unix平台上继承而来的。主要包括最初的Unix IPC,System V IPC以及基于Socket的IPC。另外,Linux也支持POSIX IPC。System V,BSD,POSIX System V是Unix操作系统最早转载 2015-07-02 16:39:44 · 873 阅读 · 0 评论 -
Linux多线程编程(二)---线程之间的同步与互斥
概述 由于线程共享进程的资源和地址空间,因此在对这些资源进行操作时,必须考虑到线程间资源访问的同步与互斥问题。这里主要介绍Posix中两种线程同步机制,分别为互斥锁和信号量。这两个同步机制可以通过互相调用对方来实现,但互斥锁更适用于同时可用的资源是唯一的情况;信号量更适用于同时可用的资源为多个的情况。互斥锁 互斥锁是用一种简单的加锁方法来控制对共享资源的原子操作。这转载 2015-07-01 00:55:01 · 1245 阅读 · 0 评论 -
Linux进程间通信(六)---信号量通信之semget()、semctl()、semop()及其基础实验
这个信号量理解起来是有点不容易啊,我看书看了好几遍才知道怎么回事。在讲这一节信号量之前,我还是想先说几个小知识点,这也是我在学习完后最终理解的“精华”,哈哈!信号量是干啥的? 信号量就是用来解决进程间的同步与互斥问题的一种进程间通信机制。同步与互斥的通俗理解 这两个名词咱们从字面上就能理解。举个例子吧,在创建子进程时,你是怎么保证父子进程执行的先后顺序呢?我转载 2015-06-30 22:24:57 · 1154 阅读 · 0 评论 -
Linux进程间通信(一)---进程间通信概述及其种类
Linux进程间通信(一)---进程间通信概述及其种类原创 2015-06-28 20:27:05 · 625 阅读 · 0 评论 -
Linux多线程编程(三)---线程之间的同步与互斥进阶实验
实验目的 通过编写经典的“生产者-消费者”问题的实验,进一步熟悉Linux中的多线程编程,并且掌握用信号量处理线程间的同步和互斥问题。实验内容 “生产者--消费者”问题描述如下: 有一个有限缓冲区(这里用有名管道实现FIFO式缓冲区)和两个线程:生产者和消费者,它们不停地把产品放入缓冲区和从缓冲区拿走产品。一个生产者在缓冲区满的时候必须等待,一个消费者转载 2015-07-01 00:56:04 · 1657 阅读 · 0 评论 -
Linux多线程编程(一)---多线程基本编程
线程概念 线程是指运行中的程序的调度单位。一个线程指的是进程中一个单一顺序的控制流,也被称为轻量级线程。它是系统独立调度和分配的基本单位。同一进程中的多个线程将共享该系统中的全部系统资源,比如文件描述符和信号处理等。一个进程可以有很多线程,每个线程并行执行不同的任务。线程与进程比较 ① 和进程相比,它是一种非常“节俭”的多任务操作方式。在Linux系统中,启动一转载 2015-07-01 00:53:23 · 1070 阅读 · 0 评论 -
Linux网络编程笔记(修订版)
我的网络编程笔记, 因为最近又要做Linux下的网络编程,故重新修订, 其中一些内容参考了文末的链接及文章 1. 基本概念2. 基本接口2.1. 打开一个socket2.2. 将socket绑定定指定的端口—bind2.3. 侦听socket—listen (服务器端)2.4. 等待接收请求—accept转载 2015-02-05 15:52:41 · 1023 阅读 · 0 评论 -
Epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block,perror输出: Resource temporarily unavailable总结:这个错误表示资源暂转载 2015-02-09 20:21:43 · 574 阅读 · 0 评论 -
Linux网络协议栈调用关系图
Linux网络协议栈调用关系图转载 2015-02-06 12:31:30 · 1295 阅读 · 0 评论 -
Linux环境进程间通信(三):消息队列
消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点。作为早期unix通信机制之一的信号能够传送的信息量有限,后来虽然POSIX 1003.1b在信号的实时性方面作了拓广,使得信号在传递信息量方面有了相当程度的改进,但是信号这种通信方式更像"即时"的通信方式,它要求接转载 2011-07-12 17:23:33 · 632 阅读 · 0 评论 -
进程间的通信(一)pipe通道
linux 一切都是文件的概念实在很强大。pipe也是一种文件。linux pipe系统调用原型#include int pipe(int fd[2]); //该函数参数为一个长度为2的整型数组,是两个文件描述符。 //返回值,0为调用成功,-1为调用失败。转载 2011-07-12 14:01:17 · 3080 阅读 · 0 评论 -
wait()
进程一旦调用了 wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait 就会收集这个子进程的信息, 并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。 wa转载 2011-07-12 09:27:52 · 1782 阅读 · 0 评论 -
fork(1)
#include ;#include ;main (){ pid_t pid; pid=fork(); if (pid printf("error in fork!"); else if (p原创 2011-07-11 14:13:26 · 786 阅读 · 0 评论