سؤال

لذلك أنا في الأساس الحصول على ناقلات منغر مع 1 حجة لكل صفيف أحاول نقله إلى دعوة execv () في unix.

يقبل ExecV مع المعلمات مثل ذلك: Int Execv (Const Char * المسار، char * const argv [])؛

ما هي أفضل طريقة لتحويل متجه سلاسل إلى مجموعة من المؤشرات؟ الآن أفعل ما يلي ولكن عندما أركزه مع القول، PS -A -f، PS يصرخ في وجهي يقول حجة غير قانونية. أي مساعدة موضع تقدير.

vector<string> args = tokenize(cmd);
char * arg[args.size()];
for(int j=0; j<args.size();j++)
{
        arg[j] = (char*)args[j].c_str();    
}
retval = execv(args[0].c_str(), arg);

.

>ps

  PID TTY           TIME CMD
  635 ttys000    0:00.18 -bash
16106 ttys000    0:00.00 ./test cpp
12590 ttys001    0:00.02 -bash
>ps -a

ps: illegal argument: ?????
هل كانت مفيدة؟

المحلول

أعتقد أن مشكلتك قد تكون هي أن تهمل وضع علامة فارغة في نهاية الصفيف. جرب هذا:

char * arg[args.size()+1];
arg[args.size()] = NULL;
for (int j=0; [...]

نصائح أخرى

توفر وظائف EXECV مجموعة من المؤشرات إلى السلاسل التي تم إنهاءها بشكل لا يغلب تمثل قائمة الحجة المتاحة للبرنامج الجديد. يجب أن تشير الوسيطة الأولى، حسب الاتفاقية إلى اسم الملف المرتبط بالملف الذي يتم تنفيذه. يجب إنهاء مجموعة المؤشرات بمؤشر فارغة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top