<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[QUIK -> DDE &mdash; Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=151</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=151&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования».]]></description>
		<lastBuildDate>Thu, 19 Nov 2015 15:48:06 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1785#p1785</link>
			<description><![CDATA[<p>Ну, я ж там написал, что существует ненулевая вероятность проблем чтения/<strong>записи</strong> из/в файл(а).<br />Именно, не открытия, а дальнейшей работы после &quot;удачного&quot; открытия.</p><p>Да и вообще монопольный режим не помешал бы. <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[null@example.com (CyberTrader)]]></author>
			<pubDate>Thu, 19 Nov 2015 15:48:06 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1785#p1785</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1784#p1784</link>
			<description><![CDATA[<p><strong>CyberTrader</strong>, я как-о не могу понять как связаны ваши два сообщения: одно про монопольный доступ на запись, другое - про проблемы с открытием файла на чтение...</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 19 Nov 2015 14:54:46 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1784#p1784</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1783#p1783</link>
			<description><![CDATA[<p>В общем, ничё умнее я не придумал, кроме как поместить функции чтения/записи в отдельную функцию и вызывать её в защищённом режиме:<br /></p><div class="codebox"><pre><code>function ReadLine(file)
  return file:read()
end
function ReadFile(file)
  for line in file:lines() do
    -- Тут обрабатываем строку
  end
end
local file, err = io.open(FileName)
if file then  -- открыть-то мы открыли файл, но не факт, что нам дадут в дальнейшем его прочитать
              -- то же и с записью
  pcall(ReadLine, file)
  pcall(ReadFile, file)
end</code></pre></div><p>поскольку удачное открытие файла ещё [url=https://quik2dde.ru/viewtopic.php?pid=1295#p1295]не говорит[/url] об удачной дальнейшей работе с этим файлом.</p>]]></description>
			<author><![CDATA[null@example.com (CyberTrader)]]></author>
			<pubDate>Thu, 19 Nov 2015 12:35:25 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1783#p1783</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1782#p1782</link>
			<description><![CDATA[<p>Мануалы почитал, эксперименты попроводил - а вот нет такой возможности, однако.<br />Файл безусловно открывается в shared mode на запись, средств изменить это - нет в Lua.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 19 Nov 2015 10:20:17 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1782#p1782</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1781#p1781</link>
			<description><![CDATA[<div class="quotebox"><cite>sam063rus пишет:</cite><blockquote><p>не буду тут особо умничать/влезать - но просто, думаю надо задаться вопросом: а с какими атрибутами открывался файл? share deny etc.</p></blockquote></div><p>Есть ли в Lua возможность открыть файл на запись в монопольном режиме? Т.е., чтобы другие приложения могли из него только читать.</p>]]></description>
			<author><![CDATA[null@example.com (CyberTrader)]]></author>
			<pubDate>Wed, 18 Nov 2015 11:31:14 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1781#p1781</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1625#p1625</link>
			<description><![CDATA[<p>Разобрался. Просто я думал что notepad++ спрашивает, обновить ли в нём файл, каждый раз когда он изменяется, а оказывается нотпад проверяет, обновился ли файл, после того как файл закроется.</p>]]></description>
			<author><![CDATA[null@example.com (ascerdfg)]]></author>
			<pubDate>Mon, 07 Sep 2015 09:31:44 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1625#p1625</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1623#p1623</link>
			<description><![CDATA[<div class="quotebox"><cite>ascerdfg пишет:</cite><blockquote><p>Единственное что Квик перестал ругаться при его закрытии.</p></blockquote></div><p>Судя по вашему [url=https://quik2dde.ru/viewtopic.php?pid=1412#p1412]сообщению в соседней теме[/url], Квик ругается не на закрытие файла, а на попытку записи в файл после его закрытия, о чём вас честно [url=https://quik2dde.ru/viewtopic.php?pid=1413#p1413]предупредили[/url] (Квик, кстати сообщает номер строки, в которой произошла ошибка - посмотрите).<br />Само же закрытие файла в том примере проходит успешно, поэтому и не видно разницы, что с file:flush(), что без него.</p>]]></description>
			<author><![CDATA[null@example.com (CyberTrader)]]></author>
			<pubDate>Sat, 05 Sep 2015 06:42:49 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1623#p1623</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1622#p1622</link>
			<description><![CDATA[<div class="quotebox"><cite>ascerdfg пишет:</cite><blockquote><p>Единственное что Квик перестал ругаться при его закрытии.</p></blockquote></div><p>Какая-то ошибка в скрипте мне видится, как таковое применение flush не может влиять на закрытие.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Fri, 04 Sep 2015 12:42:36 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1622#p1622</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1620#p1620</link>
			<description><![CDATA[<p>.</p>]]></description>
			<author><![CDATA[null@example.com (ascerdfg)]]></author>
			<pubDate>Thu, 03 Sep 2015 13:24:18 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1620#p1620</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1619#p1619</link>
			<description><![CDATA[<p>.</p>]]></description>
			<author><![CDATA[null@example.com (ascerdfg)]]></author>
			<pubDate>Thu, 03 Sep 2015 13:17:38 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1619#p1619</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1610#p1610</link>
			<description><![CDATA[<div class="quotebox"><cite>ascerdfg пишет:</cite><blockquote><p>Подскажите плиз. Как объявлять файл для лога с именем, содержащем текущую дату?</p></blockquote></div><p>Сократите путь до вашего файла:<br /></p><div class="codebox"><pre><code>local path=getScriptPath()--&quot;C:\\00LUA&quot; - папка со скриптами
local file_name=path..&quot;\\&quot;..getInfoParam (&quot;TRADEDATE&quot;)..&quot;_logo.txt&quot;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Wed, 19 Aug 2015 05:20:09 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1610#p1610</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1609#p1609</link>
			<description><![CDATA[<p>Подскажите плиз. Как объявлять файл для лога с именем, содержащем текущую дату? Можно на этом примере:</p><div class="codebox"><pre><code>file=io.open(&quot;D:\\Program Files\\Lua\\1\\logo.txt&quot;, &quot;w&quot;) </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (ascerdfg)]]></author>
			<pubDate>Wed, 19 Aug 2015 03:38:19 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1609#p1609</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1298#p1298</link>
			<description><![CDATA[<p>-</p>]]></description>
			<author><![CDATA[null@example.com (sam063rus)]]></author>
			<pubDate>Thu, 30 Apr 2015 13:28:49 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1298#p1298</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1295#p1295</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>1) Завершение скрипта (аварийное, т.е. остановка по ошибке) - это не завершение процесса QUIK с точки зрения ОС, поэтому в этом случае файл, возможно, останется залоченным до перезапуска QUIK.</p></blockquote></div><p>Файл можно освободить повторным запуском скрипта с корректным закрытием сего файла.</p><div class="quotebox"><cite>swerg пишет:</cite><blockquote><p><strong>CyberTrader</strong>,<br />в вашем скрипте используется другой подход относительно того, который я описал. Вы постоянно открываете и закрываете файл лога, что неправильно, т.к. эти операции очень затратны.<br />Файл лога надо открыть один раз в начале скрипта и закрыть по завершении. Тогда, после того, как мы успешно открыли файл на запись, никакая программа уже не сможет нам помешать в него писать</p></blockquote></div><p>Сейчас проверил: если файл открыт на запись <strong>до блокировки</strong> Квиком, то, да, при успешном закрытии файла, данные в нём сохраняются.<br />Если же файл открыт, будучи <strong>уже заблокированным</strong> Квиком, те данные, что сбрасывались на диск в момент блокировки будут потеряны. При этом открытие функцией io.open() проходит без ошибок.</p><p>Но мой скрипт наглядно показывает то, что файл при блокировании другим приложением может быть открыт без ошибок (причём, несколько раз!), при этом запись в него может быть невозможна.<br />Поэтому отсутствие ошибки &quot;Permission denied&quot; при открытии файла не гарантирует впоследствии успешной записи в него.</p>]]></description>
			<author><![CDATA[null@example.com (CyberTrader)]]></author>
			<pubDate>Thu, 30 Apr 2015 11:37:11 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1295#p1295</guid>
		</item>
		<item>
			<title><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1294#p1294</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Для оси файл так и останется &quot;открытым для записи&quot; для некоего уже несуществующего клиента, или ось разруливает ситуацию в исходное состояние?</p></blockquote></div><p>Конечно разруливает. По завершении процесса в ОС все связанные с ним ресурсы освобождаются, в том числе и закрываются открытые файлы, сетевые подключения и т.д. Иначе файловая система гарантированно умирала бы за 1..2 дня работы )</p><div class="quotebox"><blockquote><p>А что будет в случае аварийного вылета скрипта или терминала?</p></blockquote></div><p>Тут есть момент:<br />1) Завершение скрипта (аварийное, т.е. остановка по ошибке) - это не завершение процесса QUIK с точки зрения ОС, поэтому в этом случае файл, возможно, останется залоченным до перезапуска QUIK.<br />2) Падение терминала - это завершение процесса с точи зрения ОС, поэтому файл будет разлочен.</p><p>Но если в результате аварийного завершения скрипта или терминала мы не выполнили file:close(), то, возможно, будет потеряна финальная часть лога, начиная с последнего вызова file:flush() (если вы сообще его вызываем). Это как бы аргумент в пользу использования file:flush() после каждой записи в файл, но тут, как водится, снова подвох: вызов file:flush() замедляет работу скрипта, т.к. производится сброс закэшированных ОС данных на винчестер, а устройство это - самое медленное в компьютере. Нас, конечно, несколько спасает аппаратный кэш внутри самого винчестера.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 30 Apr 2015 10:27:22 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1294#p1294</guid>
		</item>
	</channel>
</rss>
