ERS: 有一个问题困扰我。据我所知,有两种方法可以在Linux中调用write()。像这样: 代码1:
write(DEV, buf, count);
代码2:
int write_total = 0;
while (write_total < count) {
int len = write(DEV, buf, count);
write_total += len;
}
DEV是网络还是设备有区别吗? 我的领导告诉我Code 2是正确的方式,如果DEV是网络fd因为它的流媒体。 谁给安全写入计算DEV的字符?内核还是程序员?
谢谢!
答案 0 :(得分:1)
write
实际上可以写出比您请求的更少的字节,因此不能依赖第一个选项。
然而,第二个选项也不可行,因为如果它写了你请求的20个字节中的10个,那么你将尝试再次写所有那些字节。
更好的方法可以从以下内容开始:
int bytes_written = 0;
while (bytes_written < count) {
int len = write(DEV, &(buf[bytes_written]), count - bytes_written);
if (len < 0)
break;
bytes_written += len;
}
这会根据已写入的数量调整您每次尝试写入的数据。在这种情况下,它还会检测错误并停止操作。
而且,不用说(a),这应该可以重构为write_no_matter_what()
函数,这样你的主代码就不会像这样重复段了。
(a)然而,由于我不知道的一些奇怪的原因,我说的是: - )