انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: پایپ دو طرفه در پوسته‌ی سیستم عامل(حل شد)  (دفعات بازدید: 2817 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین شایان

  • Sr. Member
  • *
  • ارسال: 284
  • جنسیت : پسر
کسی می‌دونه چه جوری می‌شه یک پایپ دو طرفه در پوسته(shell)  درست کرد
می‌خوام دو تا برنامه به نام های a  و b  این گونه باشند که خروجی a ورودی b و ورودی a  خروجی b باشد ( همان دستور a| b اما دوطرفه اش)
« آخرین ویرایش: 15 بهمن 1386، 01:50 ق‌ظ توسط Shayanppp »
Your object is to save the world, while still leading a pleasant life
http://nillux.blogspot.com

آفلاین ابراهیم

  • High Hero Member
  • *
  • ارسال: 1295
  • جنسیت : پسر
  • راه‌رو گر صد هنر دارد توکل بایدش
    • سلام!
پاسخ به: پایپ دو طرفه در پوسته‌ی سیستم عامل
« پاسخ #1 : 13 بهمن 1386، 06:25 ب‌ظ »
سلام،
لوله (pipe) اساساً یک‌طرفه هست.
بخش REDIRECTION از man bash ر
ما زنده به آنیم که آرام نگیریم     ...     موجیم که آسودگی ما عدم ماست

آفلاین شایان

  • Sr. Member
  • *
  • ارسال: 284
  • جنسیت : پسر
پاسخ به: پایپ دو طرفه در پوسته‌ی سیستم عامل
« پاسخ #2 : 13 بهمن 1386، 09:37 ب‌ظ »
خب من احتیاج به double directing دارم. کسی راه حلی نداره واسه این کار؟‌
Your object is to save the world, while still leading a pleasant life
http://nillux.blogspot.com

آفلاین platoali

  • Full Member
  • *
  • ارسال: 212
  • جنسیت : پسر
پاسخ به: پایپ دو طرفه در پوسته‌ی سیستم عامل
« پاسخ #3 : 13 بهمن 1386، 10:10 ب‌ظ »
این چه جنونیه!!!!!

بگو دقیقا می خواهی چه کار کنی. شاید بتوانیم یک راه حل براش پیدا کنیم. :)

آفلاین شایان

  • Sr. Member
  • *
  • ارسال: 284
  • جنسیت : پسر
پاسخ به: پایپ دو طرفه در پوسته‌ی سیستم عامل
« پاسخ #4 : 13 بهمن 1386، 10:17 ب‌ظ »
یک برنامه نوشته شده که با کاربر به مکالمه می‌پردازد برای تست کردن آن نیاز به همچین چیزی دارم. یعنی دو برنامه باید مکالمه کنند.
Your object is to save the world, while still leading a pleasant life
http://nillux.blogspot.com

آفلاین Saied

  • Full Member
  • *
  • ارسال: 118
پاسخ به: پایپ دو طرفه در پوسته‌ی سیستم عامل
« پاسخ #5 : 13 بهمن 1386، 11:28 ب‌ظ »
شاید مکانیزم Message Queue بتونه کمکت کنه. البته نمی دونم که آیا این مکانیزم توی بش هست یا نه؟ اگه نبود خودت باید توی ۲ تا برنامه قرار بدی

آفلاین ابراهیم

  • High Hero Member
  • *
  • ارسال: 1295
  • جنسیت : پسر
  • راه‌رو گر صد هنر دارد توکل بایدش
    • سلام!
پاسخ به: پایپ دو طرفه در پوسته‌ی سیستم عامل
« پاسخ #6 : 14 بهمن 1386، 05:28 ب‌ظ »
یک راه این هست که از socket استفاده کنی. مثلاً با استفاده از netcat.
ما زنده به آنیم که آرام نگیریم     ...     موجیم که آسودگی ما عدم ماست

آفلاین شایان

  • Sr. Member
  • *
  • ارسال: 284
  • جنسیت : پسر
پاسخ به: پایپ دو طرفه در پوسته‌ی سیستم عامل
« پاسخ #7 : 14 بهمن 1386، 06:56 ب‌ظ »
با جاوا بلدم با 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 چی کاره است ;)
« آخرین ویرایش: 14 بهمن 1386، 06:58 ب‌ظ توسط Shayanppp »
Your object is to save the world, while still leading a pleasant life
http://nillux.blogspot.com

آفلاین ابراهیم

  • High Hero Member
  • *
  • ارسال: 1295
  • جنسیت : پسر
  • راه‌رو گر صد هنر دارد توکل بایدش
    • سلام!
پاسخ به: پایپ دو طرفه در پوسته‌ی سیستم عامل
« پاسخ #8 : 14 بهمن 1386، 07:48 ب‌ظ »
با همون 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 می‌سازیم که این دو تا ر
« آخرین ویرایش: 14 بهمن 1386، 07:52 ب‌ظ توسط ابراهیم »
ما زنده به آنیم که آرام نگیریم     ...     موجیم که آسودگی ما عدم ماست

آفلاین شایان

  • Sr. Member
  • *
  • ارسال: 284
  • جنسیت : پسر
حل شد \\:D/ \\:D/ \\:D/
خیلی ممنون ابراهیم عزیز
کمک بزرگی به من کردی
حتماً‌ در مراسم اسکار بعدی به شما رای می‌دم ;D ;D
راستی میشه بگید این جور کد ها رو می‌تونم از کجا پیدا کنم؟ منبع این چیزی که نوشتید چی بوده
چون من  کل اینترنت رو گشتم ولی پیدا نشد
Your object is to save the world, while still leading a pleasant life
http://nillux.blogspot.com

آفلاین ابراهیم

  • High Hero Member
  • *
  • ارسال: 1295
  • جنسیت : پسر
  • راه‌رو گر صد هنر دارد توکل بایدش
    • سلام!
دست‌نویسی پوسته (shell scripting) یاد بگیرید.
این کدها ر
« آخرین ویرایش: 15 بهمن 1386، 11:16 ق‌ظ توسط ابراهیم »
ما زنده به آنیم که آرام نگیریم     ...     موجیم که آسودگی ما عدم ماست