PDA

View Full Version : سوال: بازگشت رشته از تابع system()



Salar Moghaddam
جمعه 23 اسفند 1392, 16:02 عصر
سلام دوستان
می خوام از تابع system یه دستور بش رو اجرا کنم و خروجیش رو بریزم تو یه متغیر از نوع رشته، مثلا:

#include <iostream>
#include <stdlib.h>

using namespace std;

int main() {
string a;
a = system("ls");
cout << a << endl;

اما خطای نوع داده میگیره چون خروجی این تابع همراه با عددی نشانگر درستی اجرای کامنده، یعنی دستور system بالا خروجی زیر رو تولید می کنه:


Acc.ac a.out main.cpp
0

اون 0 کار رو خراب می کنه، چجوری حذفش کنم؟
ممنون

negative60
جمعه 23 اسفند 1392, 19:52 عصر
خروجی system از نوع int هست

Salar Moghaddam
جمعه 23 اسفند 1392, 20:02 عصر
خروجی system از نوع int هست

چجوری خروجی مورد نظرمو بگیرم؟
اصل کاری که می خوام بکنم اینه:

echo $DESKTOP_SESSION

negative60
جمعه 23 اسفند 1392, 20:55 عصر
خروجی اين تابع
system فکر ميکنم برای اين هست به بدونيد دستوری که استفاده کرديد به درستی اجرا شده يا خير.

int a;
a = system("dir");
if( a == 0)
{
//Be drorosti ejra shod
}else{
//Ejra nashod
}






DESKTOP_SESSION يعنی چی ؟ درست توضيح بديد.

rahnema1
جمعه 23 اسفند 1392, 21:12 عصر
اگه می خواهید متغیر محیطی به دست بیارید از getenv استفاده کنید

#include <stdio.h>
#include <stdlib.h>
int main ()
{
char* desk = getenv ( "DESKTOP_SESSION" );
printf("\n%s\n",desk);
return 0;
}

Salar Moghaddam
جمعه 23 اسفند 1392, 21:20 عصر
پس کلا تو سی پلاس پلاس نمیشه مستقیم با تابعی نتیجه رو به شکل رشته ریخت تو یک متغیر، با کمی جست و جو به نتیجه ی زیر رسیدم:

FILE *fp = popen("echo $DESKTOP_SESSION", "r");
char buffer[128];
while (fgets(buffer, sizeof(buffer), fp))
{
//empety body
}

اینجا متغیر رو با buffer بدست میاریم، ولی اصا کد خوبی نیست، کسی ایده بهتری داره؟
ممنون

motherboard
جمعه 23 اسفند 1392, 22:05 عصر
سلام دوستان
می خوام از تابع system یه دستور بش رو اجرا کنم و خروجیش رو بریزم تو یه متغیر از نوع رشته، مثلا:

#include <iostream>
#include <stdlib.h>

using namespace std;

int main() {
string a;
a = system("ls");
cout << a << endl;

اما خطای نوع داده میگیره چون خروجی این تابع همراه با عددی نشانگر درستی اجرای کامنده، یعنی دستور system بالا خروجی زیر رو تولید می کنه:


Acc.ac a.out main.cpp
0

اون 0 کار رو خراب می کنه، چجوری حذفش کنم؟
ممنون

سلام من این کارو کردم تا اون صفره حذف بشه.

#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;

int main() {
string a;
a = system("ls");
cout << char() << endl;
getch();
return 0;}

omid_kma
شنبه 24 اسفند 1392, 12:02 عصر
اصولا استفاده از system درست نیست چون باعث میشه برنامه دیگه cross platform نباشه
این تاپیک رو ببینید فکر کنم همون چیزی باشه که پرسیدین :
http://www.7khatcode.com/2120/%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-dos-%D9%88-cmd-%D8%AF%D8%B1-c-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C