
网络编程
文章平均质量分 75
杨龙飞的博客
让人迷茫的原因只有一个
__ 那就是本该拼博的年纪,却想得太多,做的太少!
展开
-
常用的服务器模型总结
I/O模型同步I/O阻塞I/O,I/O复用,和信号驱动I/O 都是同步I/O模型. 这种I/O的读写操作,都是在I/O事件发生之后,由应用程序来完成.同步I/O模型要求用户代码自行执行I/O操作,将数据从内核缓冲区读入用户缓冲区,或将数据从用户缓冲区写入内核缓冲区. 异步I/O异步I/O机制则由内核来执行I/O操作,数据在内核缓冲区和用户缓冲区之间的移动是由内核在’后台完成的’ *也原创 2016-03-28 21:29:20 · 2745 阅读 · 0 评论 -
setuid()函数,setgid()函数,getpriority()函数,setpriority()函数,nice()函数
1.setuid()函数,setgid() 函数,头文件:#include #include 函数原型:int setuid(uid_t uid); int setgid(gid_t gid); 函数说明:若进程具有root 权限, 则函数 将实际用户的ID(组), 有效用户的ID(组),都设置为参数uid; 若进程不具有root权限,但uid等于 实际用户 ID(组), 则 se原创 2016-03-14 10:01:09 · 2694 阅读 · 0 评论 -
wait()函数,waitpid()函数
1.wait() 函数,waitpid函数()头文件:#include #include 函数原型:pid_t wait(int *statloc); pid_t waitpid(pid_t pid,int *statloc,int options); 函数说明:wait函数使父进程暂停执行,直到它的一个子进程结束为止,该函数的返回值是终止运行的子进程的PID.参数stat原创 2016-03-14 10:01:40 · 2723 阅读 · 0 评论 -
标准的I/O缓冲:全缓冲,行缓冲,无缓冲
今天在学习进程时遇到关于一个I/O缓冲区的的问题,和大家分享一下,首先举个简单的例子:#include int main() { printf("hello,world!"); _Exit(0);}编译成功后却原创 2016-03-14 10:02:09 · 1939 阅读 · 0 评论 -
守护进程的创建
1.守护进程的概念守护进程是指在后台运行的,没有控制终端与之相连的进程,它独立于控制终端,周期性的执行某种任务.2.守护进程的启动在linux系统启动时从启动脚本/etc/rc.d中启动.可以由作业规划进程crond 启动.可以由用户终端(通常是shell)执行;3.守护进程创建的要点让进程在后台执行,方法是fork一个子进程,然后使得父进程原创 2016-03-14 10:02:38 · 485 阅读 · 0 评论 -
fork() 函数,vfork()函数
1.fork()函数头文件:#include #include 函数原型:pid_t fork(void) fork函数它有两个返回值,调用一次返回两次,成功调用返回两次,成功调用后fork后,当前进程已经分裂为两个进程,一个是原来的父进程,另一个是刚刚创建的子进程,父进程fork后返回刚刚创建的子进程的ID,另一个是子进程中,fork的返回值,返回0, 如果fork失败返回-1原创 2016-03-14 10:03:12 · 543 阅读 · 0 评论 -
getpwuid()函数,getpgrgid()函数()
1.getpwuid()函数通过用户uid查找用户的相关信息,并以passwd的结构体返回其数据. 头文件:#include #include 函数原型:struct passwd *getpwuid(uid_t uid); 参数 文件所有者的uid; 返回值:成功passwd 结构体,uid所对应的用户信息,错误返回空指针, struct passwd { ch原创 2016-03-14 10:03:39 · 5164 阅读 · 0 评论 -
rename(),unlink(),getcwd(),chdir(),opendir(),readdir(),closedir()函数
1.rename(),unlink(),remove()函数#include 原型:int rename(const char *oldpath,const char *newpath); rename会将参数oldpath所指定的文件名改为参数newpath所指定的文件名,若newpath存在,则原文件会被删除;函数执行成功返回0,错误返回-1;#include原创 2016-03-14 10:04:09 · 1089 阅读 · 0 评论 -
文件属性之stat(),fstat(),lstat(),chown(),fchown(),lchown()函数
1.stat(),fstat(),lstat()函数这三个函数包含在头文件<sys/types.h>中 原型:int stat(const char *file_name,struct stat *buf); int fstat(int filedes,struct stat *buf); int lstat(const char *file_name,struct stat *原创 2016-03-14 10:04:44 · 273 阅读 · 0 评论 -
dup,dup2,fcntl,ioctl,系统调用
1.dup()函数和dup2函数dup()和dup2()函 数包含在头文件中 原型:int dup(int oldfd); int dup2(int oldfd,int newfd); dup用来复制参数oldfd所指的文件描述符,返回最小的尚未被使用的文件描述符,错误返回-1;返回的新文件描述符和参数oldfd指向同一个文件,共享所有的锁定,读写指针等各项权限或标志位;如果用lsee原创 2016-03-14 10:05:32 · 731 阅读 · 0 评论 -
read()函数,write()函数,lseek()函数
1.read()函数read()函数包含在头文件<unistd.h>中, 原型:ssize_t read(int fd,void *buf,size_t count); 函数参数的含义:从文件描述符fd所指的文件中读取count个字节的数据到buf所指向的缓冲区,count为0,不读数据,返回0,返回值就是实际读取的字节数,如果read()顺利返回实际读到的字节数,和参数count比较,若原创 2016-03-14 10:06:08 · 8017 阅读 · 0 评论 -
chmod()函数和fchmod()函数,open()函数和creat()函数,close()函数,umask命令
1.chmod 函数和fchmod函数chmod和fchmod函数包含在头文件<sys/types.h>和中 原型;int chmod(const char *path,mode_t mode); int fchmod(int fildes,mode_t mode); 区别:chmod函数第一个参数是文件名,fchmod以文件描述符作为第一个参数;参数:第一个参数path是要设置权原创 2016-03-14 10:06:45 · 1648 阅读 · 0 评论 -
TCP/IP学习笔记(1)
1.概述TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层、应用层.如下图: 数据链路层数据链路层实现了网卡接口的网络驱动程序.网络层通过IP地址寻找一台主机,而数据链路层通过物理地址寻找一台机器.ARP协议主要把IP地址转换为其物理地址. RARP协议仅用于网络上某些无盘工作站,因为缺乏存储设备,无盘工作站无法记住自己的IP地址,但他原创 2016-03-14 18:43:06 · 1097 阅读 · 0 评论 -
select模型实现分析
今天和小伙伴一起看select源码,感觉收获还是挺大的,网上这方面的资料还是挺少的,很少有分析select的具体实现是怎样实现的,所以,我把它整理一下,希望可以帮到想看看select具体是怎样实现的小伙伴,ok,不说废话了. 函数原型: int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,s原创 2016-04-13 21:54:50 · 750 阅读 · 0 评论 -
基于netty的消息队列StormMQ简介
StormMQ一. 简介StormMQ是一个支持消息发布-订阅的消息中间件,采用java语言开发,netty网络框架.Kryo序列化框架为网络传输数据序列化,protostruff序列化框架作为数据持久化的序列化。保证消息的可靠投递和消费.二.架构设计二.功能简介1.支持消息者集群.消费者A是一个集群,订阅了topicA,broker收到topicA的某条消息后,只投递给消费者A集群中的一台机器.原创 2016-12-14 11:04:37 · 3137 阅读 · 0 评论 -
线程创建函数pthread_create
头文件:#include b函数原型:int pthread_created(pthread_t *thread,pthread_attr_t *attr,void * (*start_routine)(void *),void *arg); 函数参数含义: thread:该参数是一个指针,当线程创建成功时,用来返回创建的线程的ID. attr:该参数用于指定线程的属性,NULL表示默认属性.原创 2016-03-14 10:00:03 · 1537 阅读 · 0 评论 -
线程属性_实时调度
1.pthread_attr_init(pthread_attr_t attr)和pthread_attr_destroy(pthread_attr_t attr)函数.pthread_attr_setdetachstate(pthread_attr_t attr,int detachstate);pthread_attr_setdetachstate(pthread_attr_t attr,原创 2016-03-14 09:58:32 · 570 阅读 · 0 评论 -
socket 地址常用的API总结
主机字节序和网络字节序大端:(高低低高)高位字节存储在内存地址的低地址处,低位存储在内存地址的高地址处. 小端:(高高低低)高位字节存储在内存的高地址处,低位存储在内存地址的低地址处。 即使是同一台机器上的两个进程(比如一个由c语言编写,另一个由java编写)通信,也要考虑字节序的问题(java 虚拟机采用大端字节序); accept只是从监听队列中取出连接,而不论连接处于何种变化,原创 2016-03-22 16:36:33 · 909 阅读 · 0 评论 -
Http协议学习笔记
IP头部的源端IP地址和目的端的IP地址在转发过程中是始终不变的(源路由选择除外),但是帧头部的源端地址和目的端物理地址在转发中是一直变化的. 短连接当处理完客户的一个HTTP请求之后,web服务器就主动将TCP连接关闭,也就是说,同一个客户端的多个连续的HTTP请求不能共用同一个TCP连接,这称为短连接. 长连接是指同一个客户端的的多个连续的请求使用同一个TCP连接:优点:它极大地减少了原创 2016-03-20 15:15:50 · 734 阅读 · 0 评论 -
TCP协议详解---学习笔记
TCP 服务的特点面向连接,字节流和可靠传输. 通信双方必须建立连接,必须分配必要的内核资源 全双工即双方的数据读写可以通过一个连接来实现,完成数据交换之后,通信双方都必须断开连接释放系统资源. 应用程序执行多次写操作作时,TCP模块先将这些数据放入TCP发送缓存区中,当TCP模块真正开始发送数据时,发送缓冲区中的这些等待的数据可能被封住成一个或多个TCP报文段发出,因此,TCP模原创 2016-03-19 22:25:58 · 2430 阅读 · 0 评论 -
struct hostent结构体
hostent是host entry的缩写,该结构体记录主机的信息,包括主机名,别名,地址类型,地址长度和地址列表。之所以主机的地址是一个列表的形式,原因是当一个主机有多个网络接口时,自然有多个地址。 hostent的定义如下: struct hostent { char *h_name; 地址的正式名字 char **h_aliases; 空字节,原创 2016-03-13 09:02:45 · 974 阅读 · 0 评论 -
TCP文件传送
这几天看网络方面的东西,写了一个简单的文件传送的serve/client 的demo;能实现简单的文件传送. 用一个while循环来遍历整个文本文件,每次读到的数据,发送到客户端,在客户端,打开一个文件,每次读到数据后,写入文件,知道服务器端读到的数据长度小于其预定长度,则说明文件已经读完。#include #include #include #include #include #i原创 2016-03-13 09:03:47 · 504 阅读 · 0 评论 -
getsockopt()函数和setsockopt()函数
1.套接字创建以后,就可以利用它来传输数据, 但有时可能对套接字的工作方式有特殊要求,此时就需要修改套接字的属性; #include #include 函数原型:int getsockopt(int s,int level,int optname,void *optval,socklen_t *optlen); int setsockopt(int s,int level,int optnam原创 2016-03-13 09:04:17 · 1739 阅读 · 0 评论 -
系统调用函数
1.字节顺序和转换函数先来了解一个概念:大端模式和小端模式 大端模式是指高字节数据存放在低地址处,低字节数据存放在高地址处. 小端模式是指低字节数据放在内存的内存低地址处,高字节数据存放在内存的高地址处. 在网络上传输数据时,由于数据传输的两端可能对应不同的硬件平台,采用的存储字节的顺序也可能不一致,因此TCP/IP协议规定了在网络上必须采用网络字节顺序(大端模式),对于char 型数原创 2016-03-13 09:05:20 · 487 阅读 · 0 评论 -
UDP套接字的数据传输.套接字的关闭
1.发送数据#include #include ssize_t sendto(int s,const void *msg,size_t len ,int flags,const struct sockaddr *to,socklen_t tolen); 函数sendto的功能与参数send类似,但函数sendto不需要套接字处于连接状态,所以该函数通常用来发送UDP数据,原创 2016-03-13 09:06:44 · 2796 阅读 · 0 评论 -
TCP套接字的数据传输
1.发送数据函数send用来在TCP套接字上发送数据. #include #include 函数原型:ssize_t send(int sockfd,const void *msg,size_t len,int flags); 函数send只能对处于连接状态的套接字使用, 参数sockfd为已经建立好连接的套接字描述符,即accept函数的返回值,参数msg指向存放待发送数据的缓原创 2016-03-13 09:07:27 · 2294 阅读 · 0 评论 -
套接字地址结构及其创建
1.套接字的地址结构结构struct sockaddr定义了一种通用的套接字地址, 它在头文件linux/socket 中定义: struct socketsddr{ unsigned short sa_family; //地址类型,AF_xxx char sa_data[14]; // 14字原创 2016-03-13 09:08:00 · 656 阅读 · 0 评论 -
网络模型与协议
1.概述为了减少协议设计的复杂性,大多数网络模型都是按层的方式来组织的,在分层网咯模型中,每一层都为上一层提供一定的服务,而把如何实现本层服务的细节对上一层加以屏蔽,上层只需知道下层提供了什么功能以及对应于这些功能的接口,而不必关心下一层如何实现这些功能,我的理解是:对于上一层来说,本层就像是一个黑匣子,你并不知道里面装的是什么,怎么设计的,但是,只要我知道它的接口,我却会用它. 当前最普原创 2016-03-13 09:08:37 · 591 阅读 · 0 评论 -
出错处理
1.错误检查函数执行失败时,一般都会返回一个特定的值比如-1,空指针,这些只能说明有错误发生,但具体的错误原因却没有说明,在头文件erron.h中定义变量errno(错误码),可以通过错误码,得到错误的描述信息. 程序开始执行时,errno被初始化为0,很多库函数在执行过程中遇到错误时将errno设置为相应的错误码,函数被调用成功时,它们不修改errno的值,所以不能根据errno的值来判原创 2016-03-13 09:09:17 · 1336 阅读 · 0 评论 -
线程的终止和私有数据
linux下线程的终止有有两种方式:1.通过return从线程函数返回. 2.通过掉用 pthread_exit()使线程退出,pthread_exit在头文件 pthread.h中申明. 函数原型:void pthread_exit(void * retval); 注意,有两种特殊的情况,第一种情况是,在主线程中,如果从main函数返回 或是调用了exit()函数退出主线程,则整个进程都原创 2016-03-13 09:10:35 · 462 阅读 · 0 评论 -
linux 线程属性函数总结
1、初始化一个线程对象的属性 int pthread_attr_init(pthread_attr_t *attr); 返回值:若是成功返回0,否则返回错误的编号 形 参: attr 指向一个线程属性的指针 说 明:Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。 pthread_attr_init实现时为属性对象原创 2016-03-13 09:13:22 · 507 阅读 · 0 评论 -
互斥锁和条件变量
为了允许在线程或进程之间共享数据,同步是必须的,互斥锁和条件变量是同步的基本组成部分.1.互斥锁互斥锁是用来保护临界区资源,实际上保护的是临界区中被操纵的数据,互斥锁通常用于保护由多个线程或进程分享的共享数据,一般是一些可供线程间使用的全局变量,来达到线程同步的目的,保证任何时刻只有一个线程或进程在执行其中的代码,互斥锁的函数:1.pthread_mutex_ini原创 2016-03-13 09:09:49 · 547 阅读 · 0 评论 -
线程局部变量__thread关键字
__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比.__thread变量每一个线程有一份独立实体,各个线程的值互不干扰,可以用来修饰那些带有全局性且值可以变,但是又不值的用全局变量保护的变量. __thread使用规则:只能修饰POD类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型,二进制内容可以任意复制memset,memcpy,且内容可以复原),不能修饰原创 2017-01-03 15:34:18 · 1727 阅读 · 0 评论