Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

230
Views
Cómo hacer que los argumentos de getopt funcionen juntos

Quiero poder usar todos los argumentos (-S, -s, -f) y poder usarlos juntos. -S imprime los archivos en la carpeta y su tamaño... -s imprime los archivos si son >= el tamaño de archivo proporcionado por el argumento -f encuentra todos los archivos con la subcadena dada.

¿Cómo haría que estos trabajaran juntos? En este momento, mi código hace todo esto por separado.

 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 es una función de puntero, por eso tengo cwd (que es el directorio) y case_S, etc.

Quiero poder decir... './search -S -s 1024 -f tar'. Esto debería buscar recursivamente en el directorio actual e imprimir el tamaño del archivo si es >= 1024 y si el archivo tiene la subcadena 'tar'. Pero también quiero que funcione incluso si no proporciono todos los argumentos.

Esta es la primera vez que pruebo algo como esto, así que soy nuevo en tratar de crear comandos UNIX y usar getopt args.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Convertir partes de algunos de mis comentarios en una respuesta.

Debe procesar las opciones sin realizar ninguna acción. Solo cuando haya terminado de procesar las opciones, sin errores, piense en hacer algo como llamar a printDIR() . Probablemente necesitará más argumentos para la función, o usará variables globales.

Tendrías una bandera como:

 int recursive = 0;

que establecería en 1 si la búsqueda fuera recursiva. Y int minimum_size = 0; y modifíquelo con -s 1024 . Y const char *filter = ""; y luego modifíquelo con -s tar . Etc. A menudo, estas son variables globales, pero si puede evitarlas pasándolas a la función, es mejor.

Su función podría convertirse en:

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

y lo llamaría con las variables locales configuradas apropiadamente. Tenga en cuenta que debe verificar la conversión de cadena a entero antes de llamar a printDIR() .

Si hay argumentos que no son de opción, los procesaría después del manejo de opciones con:

 for (int i = optind; i < argc; i++) printDIR(argv[i], recursive, minimum_size, filter);
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!