我正在try 理解如何从相同的文件描述符读写数据.

network - socket
    connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)
    write(sockfd, buff, large_buffer_size)

当程序/OS将数据写入文件描述符时,假设我们同时从服务器接收数据.

现在,我想知道如何确保数据没有损坏,即,当我们指向相同的文件描述符时,要写入的数据和要读取的数据不会混合在一起?

推荐答案

套接字的不同寻常之处在于,它们通过单个文件描述符提供全双工通信.内核做的是使之平稳而正确地工作所需的工作,其中包括,是的,分别缓冲传出和传入的数据.从语义上讲,每个套接字确实将两个单独的通道绑定在一起,每个通道对应一个方向.您甚至可以相互独立地关闭这些频道.

C++相关问答推荐

如何在C宏中确定 struct 中元素的类型?

有没有可能我不能打印?(C,流程)

为什么net/if.h在ifaddrs.h之前?

每个 struct 变量在C中都有自己的命名空间吗?

为什么memcpy进入缓冲区和指向缓冲区的指针工作相同?

函数的限制限定指针参数允许优化调用方函数吗?

如何在下面的C代码中正确管理内存?

S的这种管道实施有什么问题吗?

如何在GDB中查看MUSL的源代码

在C中创建任意类型的只读指针参数

类型定义 struct 与简单的类型定义 struct

Caesar密码调试:输出文本末尾的问号和随机字符

如何在不使用字符串的情况下在c中编写函数atof().h>;

我正在try 将QSORT算法实现为C++中的泛型函数

使用C++中的字符串初始化 struct 时,从‘char*’初始化‘char’使指针变为整数,而不进行强制转换

宏观;S C调深度

与外部SPI闪存通信时是否应禁用中断?

将复合文字数组用作临时字符串缓冲区是否合理?

是什么阻止编译器优化手写的 memcmp()?

Codewars Kata 掷骰子的不稳定行为