Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

236
Visualizações
How to get the arguments from getopt to work together

I want to be able to use every argument (-S, -s, -f) and them be able to be used together. -S prints the files in the folder and their size... -s prints the files if they are >= the file size provided by the argument -f finds all the files with the given substring.

How would I get these to work together? Right now, my code does all of this separately.

while((c = getopt(argc, argv, "Ss:f:")) != -1){
    switch(c){
        case 'S':
        // No clue how to make them work together.
            printf("Case: S\n");
            printf("option -%c with argument '%s'\n", c, argv[optind]);
            printDIR(cwd, case_S);
            break;
        case 's':
            printf("Case: s\n");
            printf("option -%c with argument '%s'\n", c, optarg);
            printDIR(cwd, case_s);
            break;
        case 'f':
            printf("Case: f\n");
            printf("option -%c with argument '%s'\n", c, optarg);
            printDIR(cwd, case_f);
            break;
        default:
            printf("...");
    }
}

printDIR is a pointer function which is why I have cwd(which is the directory) and case_S and so on.

I want to be able to say... './search -S -s 1024 -f tar'. This should recursively search the current directory and print the size of the file if it is >= 1024 and if the file has the substring 'tar' in it. But I also want it to work even if I don't provide all arguments.

This is my first time trying anything like this so I'm new to trying to make UNIX commands and using getopt args.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Converting parts of some of my comments into an answer.

You should process the options without doing any actions. Only when you've finished processing the options, with no errors, do you think about doing anything like calling printDIR(). You'll probably need more arguments to the function, or use global variables.

You'd have a flag such as:

int recursive = 0;

which you would set to 1 if the search was to be recursive. And int minimum_size = 0; and modify it with -s 1024. And const char *filter = ""; and then modify that with -s tar. Etc. Often, these are global variables — but if you can avoid that by passing them to the function, that is better.

Your function might then become:

int printDIR(const char *cwd, int recursive, int minimum, const char *filter);

and you'd call it with the appropriately set local variables. Note that you should check the conversion from string to integer before calling printDIR().

If there are non-option arguments, you'd process them after the option handling with:

for (int i = optind; i < argc; i++)
    printDIR(argv[i], recursive, minimum_size, filter);
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda