网络 进程 socket

共享内存:(最快)
常用的命令
ipcs ipcrm ipcmk

include <errno.h>用以下面判断是否key已经先建立
if(errno == EEXIST){说明已经被对方建好,这里加上处理函数,比如shmat....}
一般先用ftok建立key

创建/打开共享内存shmget(key_t key, size_t size, int shmflg);注意读写者的第三个参数0666| IPC_CREAT | IPC_EXCL /*fail if key exists*/0666ipcs 中的perms 属性


映射共享内存 shmat
(p = (SHM *)shmat(shmid, NULL, 0)) == (SHM *)-1
获取对象的属性struct shmid_ds buf  (shmctl(shmid, IPC_STAT, &buf) == -1)
撤销共享内存映射 shmat

删除对象shmctl(shmid, IPC_RMID, NULL) == -1


脱离共享内存 deattch shmdt


当有多个读写者连上 共享内存时,struct shmid_ds bufifBuf.shm_nattch==0) 判断连接数目当没有了再删除对象 (shmctl(shmid, IPC_RMID, NULL) == -1)

当有几个读者的时候,能几个读者共同读到呢??

信号灯:
常与共享内存一起用,可以实现P V的强大操作。对多种资源进行操作多个可以利用 int semop(int semid, struct sembuf *sops, unsigned nsops);



没有mask命令 只有umask 这个是屏蔽码。哪位为1则屏蔽哪位
大端:高字节存在低位 (刚开始的端口是大的)同下为78563412
小端:低字节存在低位 (端口是小的)若 i=0x78563412 则利用p++输出为12345678
我们的电脑经常是小端:所以需要转化成网络字节序(网络字节序是大段)
小端上192.168.0.1转化为大端后为1.0.168.192

TCP 
服务器端模型
socket  >>>bind>>>listen>>>accept>>>send/recv>>>close
TCP
客户端模型
socket >>>bind(可选)>>>connect>>>send/recv>>>close
应用:TFTP服务器 可用get put list等命令上传下载文件 允许多行输入可以用 scanf(“%[^\$]”,)接收$符号以前的字符。包括'\n'
常用调试工具:telnet , netstat -na | grep “8888” 查看占用端口8888的网络服务,netstat 显示当前的网络进程

UDP
server:
socket >>> bind >>> recvfrom >>>sendto

client:
socket >>> bind(可选) >>>sendto >>>recvfrom 这里注意没bind不能先recvfromsendto
客户端可用connect可以多次调用也可用recv/send
一个客户端多次调用connect 与多个服务器进行连接。

UDP应用:
回射服务器:多个客户端(固定回什么)如 系统上的时间更新服务器


UNIX/Linux下的4I/O模型 以及 各自的优缺点
阻塞 I/O
非阻塞I/O
I/O多路复用
信号驱动I/O

并发服务器(TCP常用 (注意回收僵尸进程signal(SIGCHLD, ) (会占用进程号(系统有最大进程号太大则不能创建
I/O多路复用并发服务器
初始化(socket>>bind>> bind
	while(1){
		设置监听读写文件描述符集合(FD_*);//select会改变传入的集合参数 注意 重新赋值
		调用select//maxfd+1
		if:监听套接字就绪(需要用for 一个一个检测0-maxfd),说明有新的连接请求{
			建立连接accept;
			加入到监听文件描述符集合;
		}
		else:是一个已经连接过的描述符{
			进行操作(send或者recv//由于上面有加入到监听集合,所以这里注意清除刚处理过			set中的FD
		}
	}

循环服务器(UDP常用


广播 和 组播的编程
UNIX域套接字 (用于本地进程 协议为PF_UNIX(和其他进程之间通信相比效率更高
有几个结构和问题需要注意 
1.sockaddr_in ininet的缩写)和sockaddr;为什么函数传递过程中要强制转化为sockaddr :因为sockaddr原来是用于进程间的。sockaddr_in是后来发现这个特别适合网络于是扩展的,当然还有sockaddr_un之类的结构也需要转化
2.listen(,nn的具体作用 允许n个进入等待队列,多余的则拒绝。使之变为监听套接字
3.监听套接字 和 非监听套接字
4.UDP为何高效:不用等待确认,不存在发送缓冲区满的情况。 写操作永远不会阻塞
5.bind时创建socket
抓包工具:wireshark开源的

用原始套接字实现ping 可以看见/bin下面的ping文件是红色的并且属性为 -rwsr-xr-x 1 root root 34740 Nov  8  2011 ping* 注意自己写的要chown root:root ping 并chmod +s ping 
3握手,4挥手,心跳包 ,IP冲突检测
chengyaogen unix
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值