2010-11-20 20 views
1

Bir UNIX ortamında java programım var. Bu satırlar, sistem arabelleğe alınmış verilerin System.in uygulamasına geçirilmesini gerektirir.Satır arabelleğe alınmış verileri blok arabelleğe alınmış verilere karşı dosyadan programa nasıl yönlendirilir?

java the_program < input.txt 

programı düzgün çalıştırmaz:

terminalden klavye girişi geçirmemiz ben gibi bir şekilde bir dosyadan girdi yönlendirmek için denemek ancak eğer gayet iyi.

Blok tamponlanmış verilere karşı satır tamponlu olarak hangi yollara stdin üzerinden programa aktarılabilir?

denedim:

stdbuf -oL cat input.txt | java the_program 

ve

stdbuf -i0 java the_program < input.txt 

yanı sıra

grep --line-buffered . input.txt | java the_program 

ancak herhangi bir şans olmadı.

Herhangi bir fikir veya öneriniz var mı?

cevap

0

Sorunların çoğu Java programındadır - neden/giriş satır arabelleğe alınacak? C'nin fgets() analogunu kullanmak için tasarlanmalı, böylece bir seferde sadece bir satır okuyor. Eğer böyle bir analog yoksa, o zaman bu hizmeti sağlayan bir işlev/sınıf yazmanız, hangi birimleri sağladığınızı okuyup okumadığınıza ve satır sınırlarında ikiye bölünüp birleştirmeniz gerekir. Bu gerçekleşmediği takdirde

, siz (st_size üyesi bakarak) bu tür İçinde hiçbir veri yokken sadece boruya yazma, boru dosya tanımlayıcısı fstat() sistem çağrısıyla olarak unportable operasyonlarda şımartmak gerekebilir. Bununla birlikte, çalışmasının garanti edilemez - açıklanamaz anlamına gelebilir. Açıkçası, programınızın her seferinde bir satır yazdığından ve standart G/Ç kullanılıyorsa çıktıyı temizlediğinden emin olursunuz.

+0

Evet, açıklığa kavuşmuş olmalıydım. Java programı, non-line tamponlu giriş için başarısız olacak şekilde tasarlanmıştır ve "the_program" ın standart olarak kabul edilen herhangi bir program olabileceği varsayılmalıdır. Amaç, kullanıcı girdisini klavyeyle simüle etmek, ancak bir metin dosyasında önceden tanımlı testler yapmaktır. . – Milo

İlgili konular