यह "मैन सिलेक्ट" से कोड नमूना है और कुछ वास्तविक रेखाएं पढ़ने के लिए कुछ पंक्तियां हैं जिन्हें लिखा जा रहा है। मुझे संदेह था कि ./myfile.txt
को लिखा गया है, select
वापस आ जाएगा कि अब वह उस एफडी से पढ़ सकता है। लेकिन क्या होता है कि जब तक txt फ़ाइल मौजूद है तब तक लगातार लूप में लगातार रिटर्न का चयन करें। मैं चाहता हूं कि यह केवल तब लौटाए जब फ़ाइल के अंत में नया डेटा लिखा जाता है। मैंने सोचा कि यह कैसे काम करना चाहिए।नियमित फ़ाइल डिस्क्रिप्टर (गैर-सॉकेट) पर() प्रतीक्षा कैसे कर सकते हैं?
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int
main(void)
{
fd_set rfds;
struct timeval tv;
int retval;
int fd_file = open("/home/myfile.txt", O_RDONLY);
/* Watch stdin (fd 0) to see when it has input. */
FD_ZERO(&rfds);
FD_SET(0, &rfds);
FD_SET(fd_file, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
while (1)
{
retval = select(fd_file+1, &rfds, NULL, NULL, &tv);
/* Don't rely on the value of tv now! */
if (retval == -1)
perror("select()");
else if (retval)
printf("Data is available now.\n");
/* FD_ISSET(0, &rfds) will be true. */
else
printf("No data within five seconds.\n");
}
exit(EXIT_SUCCESS);
}
तो आपका प्रश्न क्या है? ** किसने कहा कि 'चयन' केवल सॉकेट ** पर काम करना चाहिए? – cnicutar
प्रश्न संपादित किया गया। गड़बड़ी के लिए क्षमा। – glutz
'select' का उपयोग _any_ file-type descriptor पर किया जा सकता है, इससे कोई फ़र्क नहीं पड़ता कि यह सॉकेट, फ़ाइल या पाइप या कोई भी डिस्क्रिप्टर है। हालांकि, जब आप फ़ाइल को लिखे गए हैं, तो आप इसे मॉनिटर करने के लिए इसका उपयोग नहीं कर सकते हैं, इसके लिए आपको कुछ ओएस विशिष्ट का उपयोग करना होगा, जैसे कि लिनक्स पर आप [inotify] (http://en.wikipedia.org/wiki/Inotify] का उपयोग कर सकते हैं)। –