9
任意のファイル記述子を指定すると、非ブロック化の場合はブロックすることができますか?もしそうなら、どうですか?cでは、ファイル記述子をブロックする方法は?
任意のファイル記述子を指定すると、非ブロック化の場合はブロックすることができますか?もしそうなら、どうですか?cでは、ファイル記述子をブロックする方法は?
私はCと遊んだので、そのはしばらくして、しかし、あなたはファイルディスクリプタのフラグを変更するfcntl()機能を使用することができます。
#include <unistd.h>
#include <fcntl.h>
// Save the existing flags
saved_flags = fcntl(fd, F_GETFL);
// Set the new flags with O_NONBLOCK masked out
fcntl(fd, F_SETFL, saved_flags & ~O_NONBLOCK);
私は単にO_NONBLOCK
フラグを戻すべきであるが、設定期待ファイルディスクリプタをブロックしているデフォルトモードに変更します。
/* Makes the given file descriptor non-blocking.
* Returns 1 on success, 0 on failure.
*/
int make_blocking(int fd)
{
int flags;
flags = fcntl(fd, F_GETFL, 0);
if(flags == -1) /* Failed? */
return 0;
/* Clear the blocking flag. */
flags &= ~O_NONBLOCK;
return fcntl(fd, F_SETFL, flags) != -1;
}
これは受け入れられる方法です。 〜O_NONBLOCKでfcntlをやっていることに対する良い答えと素敵な、簡潔なアプローチ。 :) – BobbyShaftoe