Bu, "adam seç" in kod örneğidir ve yazılan gerçek bir dosyayı okumak için birkaç satır vardır. ./myfile.txt
yazıldığında, select
'un artık o fd'den okuyabileceğine inanıyordum. Ama ne olur txt dosyası mevcut olduğu sürece while döngüsünde sürekli olarak döner seçer. Sadece dosyanın sonuna yeni veriler yazıldığında dönmesini istiyorum. Bunun nasıl olması gerektiğini düşündüm.Normal dosya tanıtıcılarında (yuva dışı)() işareti nasıl seçilebilir?
#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);
}
Sorunuz nedir? ** 'select' sadece soketler üzerinde çalışmalı mı dedi **? – cnicutar
soru düzenlendi. karışıklık için üzgünüm. – glutz
'select', _any_ dosya tipi tanımlayıcısında kullanılabilir, soket, dosya veya boru veya benzeri herhangi bir tanımlayıcı olup olmadığı fark etmez. Bununla birlikte, bir dosya yazıldığında izlemek için kullanamazsınız, bunun için Linux'taki gibi OS'ye özgü bir şey kullanmak zorundasınız, [inotify] kullanabilirsiniz (http://en.wikipedia.org/wiki/Inotify). –