摘要:原创作品,转载请标明。专栏地址:http://blog.csdn.net/column/details/linux-kernel-net.html[系统运维]Linux内核--网络栈实现分析(一)--网络栈初始化[系统运维]Linux内核--网络栈实现分析(二)--数据包的传递过程(上)[系统运维]Linux内核--网络栈实现分析(三)--驱动程序层+链路层(上)[系统运维]Linux内核--网络栈实现分析(四)--网络层之IP协议(上)[系统运维]Linux内核--网络栈实现分析(五)--传输层之UDP协议(上)[系统运维]Linux内核--网络栈实现分析(六)--应用层获取数据包(上)[系
阅读全文
摘要:原文地址:http://blog.csdn.net/jgood/article/details/4787670 译者注:这是一篇介绍如何使用libcurl的入门教程。文档不是逐字逐句按原文翻译,而是根据笔者对libcurl的理解,参考原文写成。文中用到的一些例子,可能不是出自原文,而是笔者在学习过程中,写的一些示例程序(笔者使用的libcurl版本是:7.19.6)。出现在这里主要是为了更好的说明libcurl的某些api函数的使用。许多例子都参考libcurl提供的example代码。原文example中的提供的示例程序完全使用C语言,而这里笔者提供的例子使用C++语言。因为能力有限,对于l
阅读全文
摘要:本文分析基于Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7996528更多请查看专栏http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明1、套接字的绑定创建完套接字服务器端会在应用层使用bind函数进行套接字的绑定,这时会产生系统调用,sys_bind内核函数进行套接字。系统调用函数的具体实现SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr
阅读全文
摘要:本文分析基于Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7984238更多请查看专栏http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明1、系统初始化过程中会调用sock_init函数进行套接字的初始化,主要是进行缓存的初始化static int __init sock_init(void)
{ int err; //初始化.sock缓存 sk_init(); //初始化sk_buff缓存 skb_...
阅读全文
摘要:本文分析基于Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7979838更多请查看专栏http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明Linux内核中协议族有INET协议族,UNIX协议族等,我们还是以INET协议族为例。下面是内核中的协议族声明:/* Supported address families. */
#define AF_UNSPEC 0
#define AF_UNIX 1 /* Unix domai.
阅读全文
摘要:本文分析基于Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7972647更多请查看网络栈分析专栏http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明1、alloc_skb()函数该函数的作用是在上层协议要发送数据包的时候或网络设备准备接收数据包的时候会调用alloc_skb()函数分配sk_buff结构体,需要释放时调用kfree_skb()函数。static inline struct sk_buff *alloc_s
阅读全文
摘要:本文分析基于Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7971463更多请查看专栏http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明几个月之前做了关于Linux内核版本1.2.13网络栈的结构框架分析并实现了基于Netfilter的包过滤防火墙,这里以内核3.2.1内核为例来进一步分析,更全面的分析网络栈的结构。1、先说一下sk_buff结构体这个结构体是套接字的缓冲区,详细记录了一个数据包的组成,时间、网络设备、
阅读全文
摘要:测试内核版本:Linux Kernel 2.6.35----Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7572382更多请查看专栏http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明知识基础:本防火墙的开发基于对Linux内核网络栈有个良好的概念,本人对网络栈的分析是基于早期版本(Linux 1.2.13),在明确了网络栈架构的前提下,上升一步分析高级版本内核中的Netfilter防火墙实现原理,然后进行模块或内核编
阅读全文
摘要:匈牙利约定优点 匈牙利约定与其它命名约定一样,拥有由命名约定所带来的一切共同优点。由于有这样多的标准名称,因此在任何一个单个子程序或程序中要特殊记忆的名字是非常少的。匈牙利约定完全可以在不同项目中采用。 匈牙利约定可以使得在命名中容易产生定义的区域变得准确清楚。特别是约定中对 First,Min,Last,Max 和 Lim 的准确区分在实际中是尤其有帮助的。匈牙利约定可以使人对编译程序无法检查的抽象数据类型进行检查:cpaReformat[i]很可能是错误的,因为cpaReformat 不是数组,而 apaReformat[i]则可能是正确的,因为 apaReformat[i]是...
阅读全文
摘要:原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7247075更多查看C语言使用注意事项(一)C语言使用注意事项(二)C语言使用注意事项(三)1、scanf()输入注意当你使用scanf("%d",&a),然后用gets()读取下一行的一个字符串时,调用后好像gets()函数没有执行。原因:这是由于scanf()函数不处理回车换行符。这样以来gets()函数读取的只是回车换行符。所以好像时gets()函数没有执行。解决方法:可以在scanf()函数后插入一个getchar()函数来吃掉那个回车换行符。
阅读全文
摘要:原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7237762本文接上文C语言使用注意事项(一)C语言使用注意事项(二)C语言使用注意事项(四)1、自己实现itoa(int)函数,由整型转换成字符串。大家看看下面的是否有错?/************************************* * 整型转换成字符串 * *********************************/
char *itoa(int n)
{
#if 0 int tmp = n; int cnt = 1...
阅读全文
摘要:原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7235085更多查看C语言使用注意事项(一)C语言使用注意事项(三)C语言使用注意事项(四)1、如何使用指针调用函数如下例#include <stdio.h>
void func()
{ printf("asdfg\n");
} void (*fp)(); int main(int argc,char **argv)
{ fp=func; (*fp)(); return 0;
}
我们认为一个函数指针必须前面加上...
阅读全文
摘要:原创作品,转载请表明http://blog.csdn.net/yming0221/article/details/7233564更多查看C语言使用注意事项(二)C语言使用注意事项(三)C语言使用注意事项(四)1、getchar()函数的使用方法getchar()返回值为int型,如下使用方法不正确#include <stdio.h> int main()
{ char tmp; while( (tmp=getchar())!=EOF ) { printf("%c",tmp); }...
阅读全文
摘要:原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7220688C语言更多查看C语言使用注意事项(一)C语言使用注意事项(二)C语言使用注意事项(三)二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C++中可以使用引用类型来实现。下面讲解C中的二级指针的使用方法。例如我们使用指针来交换两个整型变量的值。错误代码如下:一级指针#include <stdio.h> void swap(int *a,int *b)
{ int *tmp=NULL; tmp...
阅读全文
摘要:使用这个东西,首先要包含2个头文件:#include <netdb.h>#include <sys/socket.h>struct hostent *gethostbyname(const char *name);这个函数的传入值是域名或者主机名,例如" www.google.com.tw","wpc "等等。传出值,是一个hostent的结构(如下)。如果函数调用失败,将返回NULL。struct hostent {
char *h_name;
char **h_aliases;
int h_addrtype;
int h_le
阅读全文
摘要:原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/72194191.1每个C++/C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。C++/C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀,C++程序的定义文件通常以“.cpp”为后缀(也有一些系统以“.cc”或“.cxx”为后缀)。1 版权和版本的声明版权和版本的声明位于头文件和定义文件的开头(参见示例1-1),主要内容有
阅读全文
摘要:安装路径:--prefix=DIR 安装路径 [/usr/local]--bindir=DIR 执行程序安装路径 [PREFIX/bin]--datadir=DIR 相关文件安装路径 [PREFIX/share/mplayer]--mandir=DIR 使用手册安装路径 [PREFIX/share/man]--confdir=DIR 配置文件安装路径 [PREFIX/etc/mplayer]--libdir=DIR 对象代码库文件安装路径 [PREFIX/lib]--codecsdir=DIR 二进制解码器安装路径 [LIBDIR/codecs]--win32codecsdir=D...
阅读全文
摘要:Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间内核空间中,从3G到vmalloc_start这段地址是物理内存映射区域(该区域中包含了内核镜像、物理页框表mem_map等等),比如我们使用 的VMware虚拟系统内存是256M,那么3G~3G+1256M这片内存就应该映射物理内存。在物理内存映射区之后,就是vmalloc区域。对于256M的系统而言,vmalloc_start位置应在3G+2
阅读全文
摘要:如果希望给一个内核模块传递参数,则可以通过module_param()。参数用moudle_param宏定义来声明,它定义在moduleparam.h。下面是module_param宏的定义:/* This is the fundamental function for registering boot/module parameters. perm sets the visibility in sysfs: 000 means it's not there, read bits mean it's readable, write bits mean it's writ
阅读全文
摘要:功能:首先创建用户组,然后创建30个用户个用户目录,并赋予相应权限#!/bin/bash
i=1
groupadd testgroup
while [ $i -le 30 ];do if [ $i -le 9 ];then USENAME=STU0${i} else USENAME=STU${i} fi
useradd $USENAME
mkdir /home/$USENAME
chown $USENAME:testgroup /home/$USENAME
let i+=1
done
阅读全文