我需要了解 EAGAIN 和 EWOULDBLOCK 之间的区别,因为我看到许多源代码仅针对 EAGAIN 进行检查(可能两个代码代表相同的数字,请在此处纠正我。)
我的部分知识:如果发送方缓冲区已满且接收方未接收任何数据,则用于阻塞套接字,如果调用 send(),发送方将被挂起。这是因为一旦接收器读取数据,它在缓冲区中使用的空间就可用于新数据。如果您的套接字处于“非阻塞”模式,则“send()”将失败并显示“EAGAIN”或“EWOULDBLOCK”。
它们是否总是相同的数字,或者是否存在需要区别对待的情况。?
我正在编写一个应用程序,它必须从文件中找到子字符串并将该子字符串写入某个不同的文件中。为了写入文件,我使用 fputs,但有人告诉我检查更安全的版本来写入文件。
while (fgets(line, MAX_LINE_LEN, fp1) != NULL) {
if (pname_count < 1) {
if (strstr(line, p_name)) {
pname_count++;
fputs(strstr(line, p_name), fp2);// danger.
continue;
}
}
//Remaining code
}
Run Code Online (Sandbox Code Playgroud)
按照下面的两个链接,但没有得到我的确切答案。
有人可以解释一下安全方面“fputs”的漏洞是什么吗?
由于 fwrite 需要写入文件的字符数,这是否会使 fwrite 比 fputs 更安全?