linux socket 进程间通信

本文介绍了Unix环境下Socket的操作结构及文件操作接口,包括不同场景下的读写操作、内存映射、异步I/O等,并定义了最小发送接收缓冲区大小。通过分析源代码揭示了socket内部工作原理。

unix_stream_ops


af_unix.c 文件 


static const struct file_operations unix_seq_fops = {
.owner = THIS_MODULE,
.open= unix_seq_open,
.read = seq_read,
.llseek = seq_lseek,
.release = seq_release_net,
};



static const struct file_operations socket_file_ops = {
    .owner =    THIS_MODULE,
    .llseek =    no_llseek,
    .aio_read =    sock_aio_read,
    .aio_write =    sock_aio_write,
    .poll =        sock_poll,
    .unlocked_ioctl = sock_ioctl,
#ifdef CONFIG_COMPAT
    .compat_ioctl = compat_sock_ioctl,
#endif
    .mmap =        sock_mmap,
    .open =        sock_no_open,    /* special open code to disallow open via /proc */
    .release =    sock_close,
    .fasync =    sock_fasync,
    .sendpage =    sock_sendpage,
    .splice_write = generic_splice_sendpage,
    .splice_read =    sock_splice_read,
};


read write 系统调用:

fs/read_write.c  SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)


include/net/sock.h 

#define SOCK_MIN_SNDBUF 2048
#define SOCK_MIN_RCVBUF 256


socket 缓冲区大小判断设置:

http://blog.sina.com.cn/s/blog_9cffdcab01019m4f.html


参考资料:

http://danier.iteye.com/blog/575158

http://blog.youkuaiyun.com/embeddedfly/article/details/6411714

http://blog.youkuaiyun.com/embeddedfly/article/category/762474

http://blog.youkuaiyun.com/embeddedfly/article/details/6411905   sedmsg

Linux提供了多种进程间通信的方式,其中一种常用的方式是使用Socket进行进程间通信Socket是一种网络编程的接口,它可以用于在同一台机器上的不同进程之间进行通信,也可以用于在不同机器上的进程之间进行通信。在Linux中,Socket通信可以分为两种类型:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。 流式Socket是一种面向连接的通信方式,它提供了可靠的、有序的、基于字节流的通信。在流式Socket通信中,通信双方需要先建立连接,然后通过发送和接收数据来进行通信。常见的流式Socket通信协议有TCP(Transmission Control Protocol)。 数据报式Socket是一种无连接的通信方式,它提供了不可靠的、无序的、固定长度的通信。在数据报式Socket通信中,通信双方不需要先建立连接,可以直接发送和接收数据。常见的数据报式Socket通信协议有UDP(User Datagram Protocol)。 在Linux中,使用Socket进行进程间通信的步骤如下: 1. 创建Socket:使用socket()函数创建一个Socket对象。 2. 绑定地址:使用bind()函数将Socket对象绑定到一个特定的地址和端口。 3. 监听连接(仅适用于流式Socket):使用listen()函数开始监听连接请求。 4. 接受连接(仅适用于流式Socket):使用accept()函数接受客户端的连接请求。 5. 发送和接收数据:使用send()和recv()函数发送和接收数据。 6. 关闭连接:使用close()函数关闭Socket连接。 通过Socket进行进程间通信可以实现不同进程之间的数据交换和协作,常见的应用场景包括网络通信、进程间数据传输等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值