как предотвратить fgets блоки, когда поток файла имеет нет новых данных

Нет, я не думаю, что есть способ по-другому связать поведение кнопки закрытия по умолчанию. Тем не менее, вы можете приблизить желаемый результат, потратив немного больше времени: создав пользовательский информационный блок с тем же стилем, и вы получите 100% контроль:

например. (обратите внимание на обработчик onClick на кнопке div):

var center = map.getCenter();
var infoboxTemplate = '<div class="Infobox" style=""><a class="infobox-close" href="javascript:void(0)" onClick="function test(){ alert(\'test!\');  } test(); return false;" style=""><img class="infobox-close-img" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE0cHgiIHdpZHRoPSIxNHB4IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiPjxwYXRoIGQ9Ik03LDBDMy4xMzQsMCwwLDMuMTM0LDAsN2MwLDMuODY3LDMuMTM0LDcsNyw3YzMuODY3LDAsNy0zLjEzMyw3LTdDMTQsMy4xMzQsMTAuODY3LDAsNywweiBNMTAuNSw5LjVsLTEsMUw3LDhsLTIuNSwyLjVsLTEtMUw2LDdMMy41LDQuNWwxLTFMNyw2bDIuNS0yLjVsMSwxTDgsN0wxMC41LDkuNXoiLz48L3N2Zz4=" alt="close infobox"></a><div class="infobox-body" style="max-width: 256px; max-height: 126px; width: 125px;"><div class="infobox-title" >{title}</div><div class="infobox-info" style=""><div>{description}</div></div><div class="infobox-actions" style="display: none;"><ul class="infobox-actions-list"><div></div></ul></div></div><div class="infobox-stalk" style="top: 73.8px; left: 55.5px;"></div></div>';
var infobox = new Microsoft.Maps.Infobox(center, {
    htmlContent: infoboxTemplate.replace('{title}', 'myTitle').replace('{description}', 'myDescription'),
    offset: new Microsoft.Maps.Point(-64, 16)
});
12
задан Community 23 May 2017 в 11:46
поделиться

5 ответов

В Linux (или любой Unix-y ОС), можно отметить базовый дескриптор файла, используемый popen (), чтобы не заблокироваться.

#include <fcntl.h>

FILE *proc = popen("tail -f /tmp/test.txt", "r");
int fd = fileno(proc);

int flags;
flags = fcntl(fd, F_GETFL, 0);
flags |= O_NONBLOCK;
fcntl(fd, F_SETFL, flags);

Если не будет никакого доступного входа, то fgets возвратит ПУСТОЙ УКАЗАТЕЛЬ с набором errno к EWOULDBLOCK.

27
ответ дан 2 December 2019 в 03:29
поделиться

fgets() чтение блокирования, оно, как предполагается, ожидает, пока данные не доступны, при отсутствии данных.

Вы захотите выполнить асинхронное использование ввода-вывода select(), poll(), или epoll(). И затем выполните чтение от дескриптора файла, когда будут доступные данные.

Эти функции используют дескриптор файла FILE* дескриптор, полученный: int fd = fileno(f);

15
ответ дан 2 December 2019 в 03:29
поделиться

Можно вместо этого попытаться читать sometextfile использование функций IO низкого уровня (открытый (), читайте (), и т.д.), как сам хвост делает. Когда нет ничего больше для чтения, считайте () нуль возвратов, но все еще попытается читать больше в следующий раз, в отличие от ФАЙЛА* функции.

0
ответ дан 2 December 2019 в 03:29
поделиться

я решил свои проблемы при помощи потоков, конкретно _beginthread , _beginthreadex.

1
ответ дан 2 December 2019 в 03:29
поделиться

Я Вы использовали бы функции POSIX для IO вместо тех из библиотеки C, Вы могли использовать выбор или опрос.

0
ответ дан 2 December 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: