
unix/linux/网络编程
DanielWang_
对开源、NLP、网络编程等领域感兴趣 共同学习~~ best wishes
展开
-
linux 进进程间通信(IPC) 之共享内存
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。这是因为所有进程共享同一块内存,共享内存在各种进程间通信方式中具有最高的效率。访问共享内存区域和访问进程独有的内存区域一样快,并不需要通过系统调用或者其它需要切入内核的过程来完成。同时它也避免了对数据的各种不必要的复制。例如 两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可原创 2013-06-27 20:36:27 · 2203 阅读 · 0 评论 -
linux ptrace函数
【ptrace系统调用】 功能描述: 提供父进程观察和控制另一个进程执行的机制,同时提供查询和修改另一进程的核心影像与寄存器的能力。主要用于执行断点调试和系统调用跟踪。父进程可通过调用fork,接着指定所产生的子进程的PTRACE_TRACEME行为,最后使用exec等操作来初始化一个进程跟踪。可替代的做法是,父进程通过PTRACE_ATTACH请求跟踪一个现存进程的执行。当子进程原创 2012-11-25 21:35:34 · 6118 阅读 · 0 评论 -
linux 下 命令行 mail 发邮件方法
1. 最简单的方法: mail -s textdanewang@mail.ustc.edu.cn这条命令的结果是发一封标题为text的空信给后面的邮箱,但是往往这类邮件会被当成垃圾邮件来处理,所以如果没有收到邮件,建议打开垃圾箱来查看一下.第一种方法,你可以把当前shell当成编辑器来用,编辑完内容后Ctrl-D结束。2,实用的mail发送方法。原创 2013-07-19 20:07:22 · 14861 阅读 · 2 评论 -
linux 有效用户和实际用户的区别
今天在看APUE,这两个问题很难理解,GOOGLE一下,有篇文章总结的不错,看了一下才明白透彻了。由于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系统安全,所以用户也比较关心这个问题。关于SUID、 SGID的问题也经常有人提问,但回答的人一般答得不够详细,加上曾经回答过两个网友的问题,还查了一些资料,决定整理成本文,以供大家参考。限于本人的水平问题,文转载 2012-10-27 15:13:04 · 3125 阅读 · 5 评论 -
nginx源码学习(二) 内存池结构 ngx_pool_t
1,Nginx的内存池介绍 为了方便系统模块对内存的使用,方便内存的管理,nginx自己实现了进程池的机制来进行内存的分配和释放, 首先nginx会在特定的生命周期帮你统一建立内存池, 当需要进行内存分配的时候统一通过内存池中的内存进行分配,最后nginx会在适当的时候释放内存池的资源,开发者只要在需要的时候对内存进行申请即可,不用过 多考虑内存的释放等问题,大大提高了开发的效率原创 2013-09-13 17:24:23 · 5904 阅读 · 5 评论 -
linux 替换文件中指定字符串 方法
sed -i 's/old_string/new_string/g' file_name >/dev/null 在sed的命令行中引用shell变量时要使用双引号,而不是通常所用的单引号。下面是一个根据name变量的内容来删除named.conf文件中zone段的脚本: name='zone\ "localhost"' sed "/$name/,/};/d原创 2012-11-18 23:29:04 · 4495 阅读 · 0 评论 -
Linux守护进程 及编程实现
最近研究linux守护进程,主要研读APUE 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。 同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守原创 2012-11-23 19:44:17 · 1844 阅读 · 0 评论 -
Redis c/c++, java 客户端连接
Redis 介绍redis 这个想必大家都了解,关于redis的安装参考这里,redis使用文档参见这里。Redis C客户端的使用方法 Redis的c客户端 Hiredis使用比较广泛,下面主要介绍下它。1,Hiredis的安装,配置Hiredis客户端 在redis解压后的deps/hiredis下有相应的文件。如果你的安装包没有相应的文件可以到这里下载。cd原创 2014-05-16 23:02:36 · 8954 阅读 · 0 评论 -
linux 多线程编程笔记
一, 线程基础知识1,线程的概念线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。2,线程的优点(1) 通过为每种事件类型的处理分配单独的线程,能够简化处理异步时间的代原创 2013-08-31 17:18:34 · 2418 阅读 · 1 评论 -
使用xrdp实现windows 远程桌面 ubuntu linux
一般情况下我们用ssh客户端远程登陆Linux系统,至于图形界面下的linux远程登陆工具,我们一般都会想到vnc,但它的安全性不够,在这里,我将介绍XRDP的安装配置方法。我们可以很方便的通过windows远程桌面 linux。xrdp安装配置方法打开终端:依次安装sudo apt-get install xrdpsudo apt-get install vnc4serv原创 2013-11-20 16:05:40 · 87612 阅读 · 17 评论 -
proxy_epoll源代码分析 linux网络编程入门的源码分析资料,附源码
<!--@page {margin:2cm}p {margin-bottom:0.21cm; direction:ltr; color:#00000a; text-align:justify; widows:0; orphans:0}p.western {font-family:"Times New Roman",serif; font-size:1原创 2013-03-18 14:47:20 · 4616 阅读 · 1 评论 -
nginx 在ubuntu linux 源码安装 及配置
1,准备环境 A,首先确定你的系统装了 gcc,及 g++ B, .安装pcre pcre-8.32 http://sourceforge.net/projects/pcre/files/pcre/ 下载 a, 解压 安装 tar -jxvf pcre-8.32.tar.bz2 b, cd pcre-8原创 2013-04-05 16:55:33 · 2550 阅读 · 0 评论 -
Nginx源码学习(三) nginx进程模型
一,nginx进程模型nginx的进程模型和大多数后台服务程序一样,按职责将进程分成监控进程和工作进程两类,启动nginx的主进程充当监控进程,而由主进程fork出来的子进程则充当工作进程。工作进程的任务自然是完成具体的业务逻辑,而监控进程充当整个进程组的对外接口,同时对工作进程进行监护,比如如果某工作进程意外退出,监控进程将重新fork生成一个新的工作进程。nginx也可以单进程原创 2013-10-09 17:37:57 · 3439 阅读 · 0 评论 -
How to use epoll? A complete example in C
How to use epoll? A complete example in CThursday, 2 June 2011 @ 1238 GMT by Mukund SivaramanNetwork servers are traditionally implemented using a separateprocess or thread per connection. For hig转载 2013-04-03 20:57:00 · 7030 阅读 · 0 评论 -
GNU/linux gdb调试器的使用 及 makefile编译多个目标
1.简介 GNU 的调试器称为 gdb,该程序是一个交互式工具,工作在字符模式。在 X Window 系统中,有一个 gdb 的前端图形工具,称为 xxgdb。gdb 是功能强大的调试程序,可完成如下的调试任务:* 设置断点;* 监视程序变量的值;* 程序的单步执行;* 修改变量的值。 在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。可在原创 2012-09-24 17:06:24 · 2363 阅读 · 0 评论 -
UNP 客户/服务器 程序设计范式 笔记
1,TCP/IP协议概述首先回顾一下TCP/IP模型,并知道各个层次在操作系统的哪一个层次; 看上图,OSI模型的底下两层是随系统提供的设备驱动程序和网络硬件。通常情况下,除需知道数据链路的某些特性外,我们不用关心这两层的情况。网络层由IPv4和IPv6两个协议处理,可以选择的传输层有TCP或UDP。OSI模型的顶上三层被合并为一层,称为应用层,这就是web客户(原创 2013-07-08 15:23:54 · 2296 阅读 · 0 评论 -
struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下:typedef unsigned short sa_family_t;struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */转载 2013-03-11 12:04:19 · 1473 阅读 · 0 评论 -
pthread_cond_signal pthread_cond_wait
pthread_cond_signalpthread_cond_signal函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行.如果没有线程处在阻塞等待状态,pthread_cond_signal也会成功返回。但使用pthread_cond_signal不会有“惊群现象”产生,他最多只给一个线程发信号。假如有多个线程正在阻塞等待着这个条件变量的话,原创 2013-04-01 17:08:16 · 2896 阅读 · 0 评论 -
linux 获取当前进程的可执行文件所在的目录
/proc/self/proc 文件系统的一个额外的项目使程序可以更方便地使用 /proc 文件系统找到关于自身的信息。/proc/self 是一个指向当前进程对应的 /proc 进程目录的符号链接。/proc/self 的链接目标决定于正在监视它的进程:每个进程都看到自己的 /proc 目录项是链接的目标。举例来说,代码 是一个通过读 /proc/self 链接对象来确定自身进程 I原创 2013-04-07 19:38:03 · 5174 阅读 · 0 评论 -
Nginx 源码学习 简单的数据类型
简单的数据类型下载nginx 1.0.14源码。解开nginx的代码后,在src目录下发现有如下的几个目录 core event http mail misc os其中 : core : 该目录存放core module的代码,也是nginx服务的入口 http : http core module 的代码,nginx作为web/http proxy serve原创 2013-06-09 11:42:35 · 2455 阅读 · 0 评论 -
文件描述符管理、进程间通信(管道)
首先介绍下文件描述符: 在linux下用文件描述符来表示设备文件和普通文件。文件描述符是一个整形的数据,所有对文件的操作都是通过文件描述符实现。文件描述符是文件系统中链接用户空间和内核空间的枢纽。当打开一个或创建一个文件时,内核创建相应的结构,并生成一个整形的变量传送给用户空间的对应进程。进程用这个文件描述符来对文件进行操作。用户空间的文件操作,例如读、写一个文件时,将文件描述符传送原创 2013-03-06 15:57:12 · 4261 阅读 · 0 评论 -
进程控制之 fork、wait、exec族函数 及进程资源控制
一,fork//头文件#include //函数定义pid_t fork( void );返回值:子进程中返回0,父进程中返回子进程ID,出错返回-1函数说明:一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。子原创 2012-10-27 11:04:28 · 8924 阅读 · 4 评论 -
apue dup和dup2
1. 文件描述符在内核中数据结构 在具体说dup/dup2之前, 我认为有必要先了解一下文件描述符在内核中的形态。一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2), 0与进程的标准输入相关联,1与进程的标准输出相关联,2与进程的标准错误输出相关联,一个进程当前有哪些打开转载 2012-09-19 00:17:52 · 1575 阅读 · 2 评论 -
使用宏调试 实现 debug release 版本程序
使用宏调试#include #ifdef MYDEBUG#define DPRINT(stuff) fprintf stuff#else#define DPRINT(stuff)#endif// 编译时加上 -DMYDEBUG 预处理,就可以使用宏调试int main(){ char *s = "my debug"; DPRINT ((stderr, "e原创 2012-10-07 08:59:19 · 1599 阅读 · 0 评论 -
重定向dup、管道 进程间通信
先来看看下面的这张图:当进行I/O重定向时,只是将不同进程表的不同fd指向同一文件表结构。关于I/O重定向,要用到以下的重要函数:int dup( int oldfd );int dup2( int oldfd, int targetfd ) 利用函数dup,我们可以复制一个描述符。传给该函数一个既有的描述符,它就会返回一个新的描述符,这个新的描述符是传给它的转载 2012-11-19 22:46:29 · 3476 阅读 · 0 评论 -
linux 文件操作
1,文件类型 linux 文件可以分6类,普通文件(按内部结构可分为:文本文件,二进制文件),目录文件,链接文件,设备文件(根据访问数据方式的不同可分为: 块设备文件,字符设备文件),管道文件(主要用于不同进程间的信息传递),套接字(socket) 文件(该文件类型与网络通信有关)。2,文件的相关信息 文件目录结构:系统每个目录都处于一定的目录结构中,该结构含有目录中所有的目录项的原创 2012-10-25 10:21:22 · 1330 阅读 · 0 评论 -
汇编语言函数调用过程
汇编语言函数调用过程(转)其中cs是代码段选择寄存器,eip是偏移量寄存器 CS:EIP指向下一条指令的地址 (也叫PC) 今天看了Programming from the Ground Up的函数(Page 53)调用一章,对汇编语言函数调用有了一些了解。在汇编语言中需要调用函数时要call这个函数名,函数的执行过程如下:准备执行 在主程序中每次调用原创 2012-10-31 21:13:48 · 2697 阅读 · 0 评论 -
ubuntu linux 卸载和安装mysql
卸载mysql第一步1sudo apt-get autoremove --purge mysql-server-5.02sudo apt-get remove mysql-server3sudo apt-get autoremove m原创 2012-11-14 22:14:00 · 1450 阅读 · 0 评论 -
编写并使用程序库
编写并使用程序库差不多可以认为,每个程序都链接到一个或几个库上。任何一个使用了C函数(诸如 printf 等)都须链接到C运行时库。如果您的程序具有图形界面(GUI),它将被链接到窗口系统的库。如果您的程序使用了数据库,数据库供应商会提供给您一些简化访问数据库的库。在这些情况中,您必须作出选择:静态(statically)还是动态(dynamically)地将程序链接到库上。如果您选择转载 2013-04-07 20:04:56 · 1843 阅读 · 0 评论 -
理解 I/O-- 阻塞、非阻塞,同步、异步的概念及其区别
概念介绍阻塞(blocking)、非阻塞(non-blocking):可以简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了(进程或线程就阻塞在那了,不能做其它事情),否则就可以理解为非阻塞(在等待的过程中可以做其它事情)。同步(synchronous)、异步(asynchronous): 你总是做完一件再去做另一件,不管是否需要时间等待,这就原创 2014-01-25 19:21:45 · 4574 阅读 · 0 评论