<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; [Perl] писать -> программа -> файл]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=6833&amp;type=atom" />
	<updated>2010-10-17T17:23:55Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=6833</id>
		<entry>
			<title type="html"><![CDATA[Re: [Perl] писать -> программа -> файл]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=102126#p102126" />
			<content type="html"><![CDATA[<p>there is more than one way to do it...<br />1. Самое простое: использовать модуль IPC::Open2<br />2. Самое эффективное, как утверждает perldoc: использовать socketpair + fork + exec<br />3. И еще вариантик: создать 2 pipe для чтения и записи, затем fork, в дочернем процессе переоткрыть STDOUT в канал открытый pipe и сделать exec. Так собственно и работает модуль IPC::Open2, только делает всю грязную работу за вас</p><p>А вообще читайте perldoc perlipc, там всё это есть.</p>]]></content>
			<author>
				<name><![CDATA[verdrehung]]></name>
				<uri>https://linuxforum.ru/profile.php?id=2045</uri>
			</author>
			<updated>2010-10-17T17:23:55Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=102126#p102126</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Perl] писать -> программа -> файл]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=96750#p96750" />
			<content type="html"><![CDATA[<p>Она просто запускает дочерний процесс. Мне же надо передать данные на вход stdin.<br />Хотя, возможно, получится создать pipe, а потом создать дочерний процесс, может он эти pipe наследует.</p>]]></content>
			<author>
				<name><![CDATA[AndreyMust19]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6533</uri>
			</author>
			<updated>2010-09-30T16:07:51Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=96750#p96750</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Perl] писать -> программа -> файл]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=96720#p96720" />
			<content type="html"><![CDATA[<p>не знаю перла, но точно знаю, там есть функция system, которая вызывает внешние системные функции. не оно?</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2010-09-30T14:27:16Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=96720#p96720</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Perl] писать -> программа -> файл]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=96684#p96684" />
			<content type="html"><![CDATA[<p>Пока проблема не решена, обшелся созданием еще одного временного файла.<br />Нельзя ли создать временный файл в памяти, а не на диске?</p>]]></content>
			<author>
				<name><![CDATA[AndreyMust19]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6533</uri>
			</author>
			<updated>2010-09-30T12:30:51Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=96684#p96684</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[[Perl] писать -> программа -> файл]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=94394#p94394" />
			<content type="html"><![CDATA[<p>Надо отсортировать список файлов - вызвать внешнюю программу sort, на вход подать список файлов, а с выхода записать отсортированный список в файл.<br />Не хочу создавать кучу временных файлов:<br /></p><div class="codebox"><pre><code>print `sort file`;</code></pre></div><p>, а писать прямо на вход программы sort.</p><p>Пробовал:<br /></p><div class="codebox"><pre><code>open(SORT, &quot;|sort&quot;);</code></pre></div><p>Так вот, выходной файл либо оказывается пустым, потому что программа sort вызывается только после закрытия дескриптора и весь результат ее работы почему-то выводится на экран). Пробовал pipe и запись в переменную, все равно выходной файл остается пустой.</p><div class="codebox"><pre><code>#!/usr/bin/perl
$dir=&#039;/&#039;;
if ($ARGV[0]) {        # если есть первый аргумент
    $dir=`realpath $ARGV[0]`;
    chomp $dir;
};
$listfiles=`mktemp /tmp/file.XXX`; chomp $listfiles;
open(FILES,&quot;&gt; $listfiles&quot;);# || die;
# сортировка списка файлов

open(SORT, &quot;|sort|&quot;);# || die;
#open($f1, &#039;&gt;&#039;, \$variable);
until (eof `find $dir`) { print SORT `find $dir`};
until (eof SORT) { print FILES &lt;SORT&gt;; };

#pipe(`find $dir`,SORT);
#pipe(SORT,FILES);

#print SORT `cat /home/andrey/proba_files`;
#@s = `find $dir`;
#print SORT @s;
#print SORT `find $dir`;
#close SORT;
#until (eof SORT) { print FILES &lt;SORT&gt;; };
#close(FILES);

print &quot;dir = $dir, listfiles = $listfiles\n&quot;;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[AndreyMust19]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6533</uri>
			</author>
			<updated>2010-09-22T08:50:47Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=94394#p94394</id>
		</entry>
</feed>
