انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: شایان در 13 بهمن 1386، 05:58 بظ
-
کسی میدونه چه جوری میشه یک پایپ دو طرفه در پوسته(shell) درست کرد
میخوام دو تا برنامه به نام های a و b این گونه باشند که خروجی a ورودی b و ورودی a خروجی b باشد ( همان دستور a| b اما دوطرفه اش)
-
سلام،
لوله (pipe) اساساً یکطرفه هست.
بخش REDIRECTION از man bash ر
-
خب من Ø§ØØªÛŒØ§Ø¬ به double directing دارم. کسی راه ØÙ„ÛŒ نداره واسه این کار؟‌
-
این چه جنونیه!!!!!
بگو دقیقا می خواهی چه کار کنی. شاید بتوانیم یک راه حل براش پیدا کنیم. :)
-
یک برنامه نوشته شده که با کاربر به مکالمه میپردازد برای تست کردن آن نیاز به همچین چیزی دارم. یعنی دو برنامه باید مکالمه کنند.
-
شاید مکانیزم Message Queue بتونه کمکت کنه. البته نمی دونم که آیا این مکانیزم توی بش هست یا نه؟ اگه نبود خودت باید توی ۲ تا برنامه قرار بدی
-
یک راه این هست که از socket استفاده کنی. مثلاً با استفاده از netcat.
-
با جاوا بلدم با Socket این کار رو بکنم ولی راه ساده تر میخوام.
توی irc اوبونتو این سوال رو پرسیدم یکی یه راهی گفت که منجر به این شد:
mkfifo q1
mkfifo q2
که q1 و q2 دو تا پایپ فایل میشن در ادامه سعی کردم با این کد ها از اون ها استفاده کنم:
#include<fstream>
#include<iostream>
using namespace std;
ofstream fout("q2");
ifstream fin("q1");
int main(){
string str;
fin >> str;
return 0 ;
}
#include<iostream>
#include<fstream>
using namespace std;
ofstream fout("q1");
ifstream fin("q2");
int main(){
fout << "" << endl;
return 0 ;
}
اما با این که پایپ یک طرفه با اون ها به راحتی انجام میشه، پایپ دوطرفه با این برنامهها چیزی جز dead lock نصیبم نکرد.
خیلی بده که توی اینترنت هم چیز بدرد بخوری در این مورد پیدا نکردم. ](*,)
راستی netcat نمیدونم چیه اگر ممکنه توضیح بدید
با تشکر.
ویرایش: سعی میکنم ببینم این netcat چی کاره است ;)
-
با همون mkfifo برات مثالی نوشتم. با دقت بخونیش متوجه میشی:
salam.sh:
#!/bin/bash
for i in {1..10}
do
echo Gholam $i
done
for i in {1..10}
do
read x && echo Salaam $x >>salam.txt
done
kalam.sh
#!/bin/bash
while read f
do
echo Kalaam $f
done
connector.sh:
#!/bin/bash
# generate some random file name
temp=`tempfile`
rm -f $temp
# create a fifo
mkfifo $temp
# open FIFO for read and write into a file with descriptor number 3
exec 3<>$temp
# run salam.sh and kalam.sh connecting each one's output to other's input
./salam.sh <&3 | ./kalam.sh >&3
# close the file
exec 3<&-
# remove the FIFO from file system
rm -f $temp
توضیح:
salam.sh و kalam.sh میخوان با هم صحبت کنن. یک connector.sh میسازیم که این دو تا ر
-
حل شد \\:D/ \\:D/ \\:D/
خیلی ممنون ابراهیم عزیز
کمک بزرگی به من کردی
حتماً در مراسم اسکار بعدی به شما رای میدم ;D ;D
راستی میشه بگید این جور کد ها رو میتونم از کجا پیدا کنم؟ منبع این چیزی که نوشتید چی بوده
چون من کل اینترنت رو گشتم ولی پیدا نشد
-
دستنویسی پوسته (shell scripting) یاد بگیرید.
این کدها ر