fp_write 数据链路控制 (DLC) 设备的内核服务
用途
允许通过使用文件指针来发送内核数据。
语法
#include <sys/gdlextcb.h> #include <sys/fp_io.h> int fp_write (FP, 布夫, NB, 扩展, 分段标志, 库特普)
参数
| 项 | 描述 |
|---|---|
| Fp | 指定从 fp_open 内核服务返回的文件指针。 |
| 布夫 | 指向一个内核 姆布夫 结构。 |
| nbytes | 包含所写数据的字节长度。 但是,不需要将此字段设置为写数据的实际长度,因为 姆布夫 包含长度字段。 相反,可以将此字段设置为任何非负值 (0 设置为 0)。 |
| 分机 | 指定扩展内核服务参数。 这是指向用于写操作的 dlc_io_ext 扩展 I/O 结构的指针。 此参数的自变量必须位于内核空间中。 |
| 分段标志 | 指定用于指示 路径 参数所在位置的段标志。 唯一有效的值为:
|
| 康特普 | 指向要返回实际写入的字节计数的位置 (必须位于内核空间中)。 由于使用了 姆布夫斯 ,因此 GDLC 不会为内核用户提供此信息,但是文件系统需要有效地址,并将 nbytes 参数的副本写入该位置。 |
描述
四种类型的数据可以发送到通用数据链路控制 (GDLC)。 可以将网络数据发送到服务访问点 (SAP) ,并且可以将正常,交换标识 (XID) 或数据报数据发送到链路站 (LS)。
内核用户将通信内存缓冲区 (姆布夫) 直接传递到 fp_write 内核服务上的 GDLC。 在这种情况下,不需要 乌约莫韦 内核服务,仅通过将缓冲区指针传递到 GDLC 即可实现最大性能。 每个写缓冲区都需要具有正确的缓冲区头信息以及足够的空间来插入数据链接头。 为了实现此目的,在启动 LS 完成时将写数据偏移量传递回内核用户。
对于每个写调用,所有数据都必须放入单个包中。 即, GDLC 不会将用户的写数据区分隔为多个发送包。 出于此目的,在 DLC_ENABLE_SAP 完成时和 DLC_START_LS 完成时将最大写数据大小传递回用户。
通常,通过完成数据链路头并将传输包向下发送到设备处理程序, GDLC 可以立即满足一个写子例程。 但是,在某些情况下,传输包可能被特定协议的流量控制或资源中断所阻止。 根据系统阻塞/非阻塞的文件状态标志 (由文件系统设置,并基于 fp_open 内核服务上传递的 O_NDELAY 和 O_NONBLOCKED 值) , GDLC 对此作出不同的反应。 无法获取足够资源以使通信内存缓冲区 (姆布夫) 排队的非阻塞 写 子例程将返回错误指示。 阻塞的写子例程使调用进程进入休眠状态,直到资源释放或发生错误为止。 每个 GDLC 都通过其 Dlcwrite 入口点支持 fp_write 内核服务。 fp_write 内核服务只能从进程环境中进行调用。
返回值
| 项 | 描述 |
|---|---|
| 重大安全事件数量 | 指示操作成功。 |
| EAGAIN | 指示传输被临时阻止,且调用进程无法进入休眠状态。 |
| 项 | 描述 |
|---|---|
| EINTR | 指示某个信号在内核服务成功完成之前中断了该服务。 |
| EINVAL | 指示无效参数,例如,单个包的数据过多。 |
| ENXIO | 指示无效文件指针。 |
这些返回值在 /usr/include/sys/errno.h 文件中定义。