2013-10-06 12 views
8

मैं execv() जैसे सी भाषा फ़ंक्शन के माध्यम से लिनक्स कमांड "pwd" निष्पादित करना चाहता हूं।मैं एक सी फ़ंक्शन के साथ एक शैल अंतर्निहित कमांड कैसे निष्पादित करूं?

समस्या यह है कि "pwd" नामक निष्पादन योग्य फ़ाइल नहीं है और मैं "echo $ PWD" निष्पादित करने में असमर्थ हूं, क्योंकि गूंज भी एक अंतर्निहित कमांड है जिसमें कोई निष्पादन योग्य नहीं है।

+0

आदमी getcwd। आपको बस इतना ही चाहिए –

+0

चार्ली बर्न्स, वर्चुअल मशीन I प्रदान किया गया था getcwd के लिए एक प्रविष्टि की कमी है। वैसे भी धन्यवाद। – user2851770

+0

http://theunixshell.blogspot.com/2013/01/executing-shell-command-in-cc-and.html – Vijay

उत्तर

6

आपको sh -c echo $PWD निष्पादित करना चाहिए; आमतौर पर sh -c खोल आदेश निष्पादित करेगा।

(वास्तव में, system(foo)execl("sh", "sh", "-c", foo, NULL) के रूप में परिभाषित किया गया है और इस तरह खोल बनाया-इन के लिए काम करता है।)

तुम सिर्फ PWD का मूल्य चाहते हैं, getenv, हालांकि का उपयोग करें।

+0

मैंने getenv फ़ंक्शन का उपयोग किया। धन्यवाद! – user2851770

5

आप excecl आदेश

int execl(const char *path, const char *arg, ...); 

उपयोग कर सकते हैं जैसा कि यहाँ दिखाया गया

#include <stdio.h> 
#include <unistd.h> 
#include <dirent.h> 

int main (void) { 

    return execl ("/bin/pwd", "pwd", NULL); 

} 

दूसरा तर्क प्रक्रिया का नाम होगा के रूप में यह प्रक्रिया तालिका में दिखाई देंगे।

वैकल्पिक रूप से, आप वर्तमान कार्यशील निर्देशिका पाने के लिए getcwd() फ़ंक्शन का उपयोग कर सकते हैं:,

#include <stdio.h> 
#include <unistd.h> 
#include <dirent.h> 
#define MAX 255 

int main (void) { 
char wd[MAX]; 
wd[MAX-1] = '\0'; 

if(getcwd(wd, MAX-1) == NULL) { 
    printf ("Can not get current working directory\n"); 
} 
else { 
    printf("%s\n", wd); 
} 
    return 0; 
} 
15

आप बस अपने ग कार्यक्रम में शेल कमांड, आप इस्तेमाल कर सकते हैं निष्पादित करने के लिए चाहते हैं

#include <stdlib.h> 

    int system(const char *command); 

आपके मामले में,

system("pwd"); 

मुद्दा यह है कि "pwd" नामक निष्पादन योग्य फ़ाइल नहीं है और मैं "echo $ PWD" निष्पादित करने में असमर्थ हूं, क्योंकि गूंज भी एक अंतर्निहित कमांड है जिसमें कोई निष्पादन योग्य नहीं है।

इसका क्या मतलब है? आप//bin में उल्लेख किया संकुल को खोजने के लिए सक्षम होना चाहिए

sudo find/-executable -name pwd 
sudo find/-executable -name echo 
+0

मैं इस तरह की चीज़ पर अभी भी नया हूं। मैंने खोल पर "कौन सा pwd" का उपयोग करने की कोशिश की और यह केवल लौटा दिया कि "pwd" एक अंतर्निहित कमांड है। धन्यवाद, वैसे भी! – user2851770

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