摘要:本人对linux环境很不熟悉,今天做操作系统作业要在linux下用信号量以及pthread编程,使用codeblocks这个IDE,然后链接报错/tmp/ccMNPEfl.o:在函数‘init_semaphores()’中:source.cpp:(.text+0×212):对‘sem_init’未定义的引用source.cpp:(.text+0x22e):对‘sem_init’未定义的引用source.cpp:(.text+0x24a):对‘sem_init’未定义的引用/tmp/ccMNPEfl.o:在函数‘ProducerProcess(void*)’中:source.cpp:(
阅读全文
摘要:struct hostent *gethostbyname(const char *name);gethostbyname函数根据域名解析出服务器的ip地址,它返回一个结构体struct hostent:[cpp]view plaincopy#includestructhostent{char*h_name;/*officialnameofhost*/char**h_aliases;/*aliaslist*/inth_addrtype;/*hostaddresstype*/inth_length;/*lengthofaddress*/char**h_addr_list;/*listofad..
阅读全文
摘要:Wireshark基本介绍和学习TCP三次握手之前写过一篇博客:用 Fiddler来调试HTTP,HTTPS。 这篇文章介绍另一个好用的抓包工具wireshark,用来获取网络数据封包,包括http,TCP,UDP,等网络协议包。记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过很多TCP和UDP的资料,但是从来没有真正见过这些数据包, 老是感觉在云上飘一样,学得不踏实。有了wireshark就能截获这些网络数据包,可以清晰的看到数据包中的每一个字段。更能加深我们对网络协议的理解。对我而言, wireshark 是学习网络协议最好的工具。阅读目录wireshark介绍w
阅读全文
摘要:1、问题通过一个死循环将读取键盘对应的设备文件将触发键盘事件在屏幕上打印出来,按esc退出程序代码是在unbuntu10.04编译执行通过的2、input_event描述在Linux内核中,input设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作就是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作接口,因为Input子系统已经完成了文件操作接口linux/input.h 这个文件定义了event事件的结构体,API和标准按键的编码等;struct input_event { s
阅读全文
摘要:认识linux input子系统 (一)-0-.序 本来只是想写个内核态的键盘记录的,但是发现现在的linux驱动模型已经和以前版本不同,增加了input层,几乎所有的底层驱动都把数据封装在event里上报给input子系统,这样一来,kernel看起来更加模块化,但是没有原来键盘驱动那种一站通的感觉了。 于是研究起input层比起键盘记录更有意思了:)这里只是记录下自己学习后理清的思路,其实自己学习过程挺乱的,最近才有所感悟input层,毕竟硬件的底子我是没有的。-1-.从用户层看input(event事件) 经常捣鼓linux一定会对/dev,/sys,/proc这几个目录有所印象,...
阅读全文
摘要:收集一些网上的资料,以便参考:http://blog.chinaunix.net/u2/69143/showart_1087349.html 当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。若不想客户端退出可以把SIGPIPE设为SIG_IGN 如: signal(SIGPIPE,SIG_IGN); 这时SIG
阅读全文
摘要:信号是与一定的进程相联系的。也就是说,一个进程可以决定在进程中对哪些信号进行什么样的处理。例如,一个进程可以忽略某些信号而只处理其他一些信号;另外,一个进程还可以选择如何处理信号。总之,这些总与特定的进程相联系的。因此,首先要建立其信号和进程的对应关系,这就是信号的安装登记。Linux主要有两个函数实现信号的安装登记:signal和sigaction。其中signal在系统调用的基础上实现,是库函数。它只有两个参数,不支持信号传递信息,主要是用于前32个非实时信号的安装;而sigaction是较新的函数(由两个系统调用实现:sys_signal以及sys_rt_sigaction),有三个参数
阅读全文
摘要:序linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。Linux则把两者继承了下来,如图示:其中,最初Unix IPC包括:管道、FIFO、信号;System V IPC包括:System V消息队列、System V信号灯、Syst
阅读全文
摘要:当linux中的C api函数发生异常时,一般会将errno变量(需includeerrno.h) 赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少原本看来莫名其妙的问题。但是errno是一个 数字,代表的具体含义还要到errno.h中去阅读宏定义,而每次查阅是一件很繁琐的事情。有下面几种方法可以方便的得到错误信息(1)void perror(const char *s)函数说明perror ( )用来将上一个函数发生错误的原因输出到标准错误(stderr),参数s所指的字符串会先打印出,后面再加上错误原因 字符串。此错误原因依照全局变量er
阅读全文
摘要:NADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。例如MontiVista Linux中在/usr/include/netinet/in.h定义为:/* Address to accept any incoming messages. */#define INADDR_ANY ((in_addr_t) 0x00000000)一般情况下,如果你要建立网络服务器应用程序,则你要通知服务器操作系统:请在某地址 xxx.xxx.xxx.xxx上的某端口 yyyy上进行侦听,并且把侦听到的数据包发送给
阅读全文