2009-05-27 12 views

उत्तर

11

कुछ समय हो गया के बाद से मैं सी के साथ खेला जाता है, लेकिन आप 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); 
+0

हाँ, यह स्वीकार्य विधि है। अच्छा जवाब और अच्छा, ~ O_NONBLOCK के साथ fcntl करने के लिए terse दृष्टिकोण। :) – BobbyShaftoe

7

मैं बस गैर की स्थापना 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; 
} 
संबंधित मुद्दे