2012-09-26 6 views
16

मैं वीएलसी (वीडियो पुन: पेश करने का कार्यक्रम) है अगर मैं एक खोल में टाइप करें:उचित तर्क के साथ सी में execl() को कैसे कॉल करें?

/घर/वीएलसी "/ घर/मेरी फिल्में/फिल्म मैं see.mkv करना चाहते हैं"

यह खुल जाता है एक फिल्म को पुन: उत्पन्न करता है।

तथापि, जब मैं निम्नलिखित प्रोग्राम चलाने:

#include <unistd.h> 

int main(void) { 

    execl("/home/vlc", "/home/my movies/the movie i want to see.mkv",NULL); 

    return 0; 
} 

वीएलसी को खोलता है, लेकिन कुछ भी पुन: पेश नहीं करता है। इसे कैसे हल किया जा सकता है?

बातें मैंने कोशिश की:

मैं अनुमान लगाया

execl("/home/vlc", "/home/my movies/the movie i want to see.mkv",NULL); 

खोल में टाइप के बराबर था:

/home/vlc /home/my movies/the movie i want to see.mkv 

जो काम नहीं करता, तो मैं करने की कोशिश की

execl("/home/vlc", "\"/home/my movies/the movie i want to see.mkv\"",NULL); 

और वीएलसी ओ पेन ऊपर है लेकिन या तो पुन: पेश नहीं करता है।

अंत में न्यूल लिखने के बजाय मैंने 0, (char *) 0, 1 कोशिश की .... मददगार नहीं। सहायता !!!!

+1

विफल विफलता के बाद आप 'errno' क्यों नहीं देखते थे? यह आपको आपकी समस्या के बारे में और बताएगा। ध्यान से execl के लिए मैन पेज पढ़ने का क्या हो गया है? :-) – Jens

उत्तर

27
execl("/home/vlc", 
    "/home/vlc", "/home/my movies/the movie i want to see.mkv", 
    (char*) NULL); 

आप सभी तर्क निर्दिष्ट करने की आवश्यकता, argv[0] जो निष्पादन से नहीं लिया जाता है शामिल थे।

यह भी सुनिश्चित करें कि अंतिम NULLchar* पर डाला गया है।

विवरण यहां हैं: http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html

+0

यह हल हो गया है! धन्यवाद दोस्त! मैंने इस पर घंटों बिताए ..... –

+1

एस/टोकन/लिया? – Jens

+0

@ जेन्स, तय। अगर आप कुछ बुरा देखते हैं तो ठीक करने में संकोच न करें। – AProgrammer

1

आप बस अपने वीएलसी प्लेबैक प्रक्रिया निष्पादित करने के लिए और केवल नियंत्रण वापस अपने आवेदन प्रक्रिया को दे जब यह किया जाता है और अधिक जटिल कुछ भी नहीं है, तो मैं मान लीजिए कि आप सिर्फ उपयोग कर सकते हैं की जरूरत है:

system("The same thing you type into console");

+0

execl तर्कों में मामूली गलतफहमी को ठीक करने और एक फ़ंक्शन लिखने के बीच जो सही ढंग से उद्धरण देगा ताकि खोल उद्धरण पूर्ववत कर सके, मुझे पता है कि मैं क्या पसंद करता हूं। – AProgrammer

+0

मुझे लगता है कि मुझे आपका अंक मिलता है और आपकी प्राथमिकता उचित है।लेकिन ऐसी सरल जरूरतों से निपटने के दौरान, सिस्टम() के बजाय execl() का उपयोग करने के अलावा कोई अन्य लाभ है, इसके अलावा सिस्टम() में भागने अनुक्रम बैकस्लाश के साथ गड़बड़ी से बचने के अलावा? –

+0

वहाँ सुरक्षा कारणों से हो सकता है, यदि आप उदाहरण के एक स्ट्रिंग की तरह, 'sprintf बनाया (buf," ls -la% s ", वर)' जो आप 'प्रणाली (buf)' के साथ अमल के लिए है, कोई आपको एक फ़ाइल नाम दे सकता है , उदाहरण के लिए, "कुछ फाइल; आरएम-आरएफ ~" '। – netigger

संबंधित मुद्दे