C/C++ Terminal uygulaması yapmak

Katılım
26 Ocak 2020
Mesajlar
6.335
Makaleler
1
Çözümler
13
Yer
İstanbul
C ile calisan bir terminal uygulamasi yapmak istiyorum. Linux uzerinde calisacak simdilik. Parametreleri nasıl alacagimi ve nasıl secenekleri ayarlayacagimi gosteren bir tutorial var midir acaba?

Kod:
ornek -n -b 'xyz/bca'

Gibi.
 
C:
int main(int argc, char **argv) {
    return 0;
}

Yukarida gordugun main fonksiyonun da asil kullanim yukaridaki gibi. argc = arg count yada turkce arguman sayisi. Konsoldan okunan toplam arguman sayisini belirtir.
argv = arguman vektoru. (C'de stringler null terminated character pointer, ornegin char * a = "string\0", ikinci pointer ise diger stringlerin baslarina isaret ediyor).

Iclerinde su sekilde loop yapabiliyorsun;
C:
#include <stdio.h>

int main(int argc, char **argv) {
    int i = argc;
    for(i; i < argc; ++i) {
        printf("%s", argv[i]);
    }
    return 0;
}

Argumanlari nasil manipule edecegine kendin karar verirsin.

Sadece boyle almak zorunda degilsin. Bu genel ve yaygin kullanilan yontem, ama biraz daha fantezi ararsan ben C++'ta, Python'daki argparse benzeri bir seyler yapiyordum bir ara, yarim kaldi gerci ama;

Linux icin soyle getiriyordum argumanlari;
C++:
#include <fstream>
ParseArgument::ParseArgument(std::string const& arg_prec) : arg_prec(arg_prec) {
    AddArgument("h", "help", "Prints the help text.", [&]() {
        help();
    });
    std::ifstream cmdlineFile("/proc/self/cmdline");
    std::getline(cmdlineFile, program_name, '\0');
    for(std::string line; std::getline(cmdlineFile, line, '\0');) {
        arg_list.emplace_back(line);
    }
}
Windows icin;
C++:
#include <windows.h>
#include <shellapi.h>
std::string wstring_to_string(const std::wstring& str) {
    return {str.begin(), str.end()};
}

ParseArgument::ParseArgument(std::string const& arg_prec) : arg_prec(arg_prec) {
    AddArgument("h", "help", "Prints the help text.", [&]() {
        help();
    });

    int argc = 0;
    LPWSTR * argv = CommandLineToArgvW(GetCommandLineW(), &argc);
    program_name = wstring_to_string(std::wstring(argv[0]));
    
    for(int i = 1; i < argc; i++) {
        arg_list.emplace_back(wstring_to_string(std::wstring(argv[i])));
    }
}
 
Son düzenleme:
Teşekkür ederim ayrıntılı cevap icin inceleyecegim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…