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

519
Visualizações
No entiendo cómo funciona execlp() en Linux

He pasado los últimos 2 días tratando de entender la llamada al sistema execlp() , pero aquí estoy. Déjame ir directo al tema.

La man page de execlp declara la llamada al sistema como int execlp(const char *file, const char *arg, ...); con la descripción: El const char arg y los puntos suspensivos posteriores en las funciones execl(), execlp() y execle() se pueden considerar como arg0, arg1, ..., argn.

Sin embargo, veo que la llamada al sistema se llama así en nuestro libro de texto: execlp(“/bin/sh”, ..., “ls -l /bin/??”, ...); (los "..." son para que los averigüemos como estudiantes). Sin embargo, esta llamada al sistema ni siquiera se parece a la declaración en la man page de la llamada al sistema.

Estoy súper confundido. Cualquier ayuda es apreciada.

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

0

este prototipo:

 int execlp(const char *file, const char *arg, ...);

Dice que exclp es una función de argumento variable. Se necesitan 2 const char * . El resto de los argumentos, si los hay, son los argumentos adicionales para entregar al programa que queremos ejecutar, también char * , todos estos son cadenas C (y el último argumento debe ser un puntero NULL)

Entonces, el argumento del file es el nombre de la ruta de un archivo ejecutable que se ejecutará. arg es la cadena que queremos que aparezca como argv[0] en el ejecutable. Por convención, argv[0] es solo el nombre de archivo del ejecutable, normalmente se establece igual que file .

Los ... son ahora los argumentos adicionales para dar al ejecutable.

Digamos que ejecuta esto desde una línea de comando/shell:

 $ ls

Eso sería execlp("ls", "ls", (char *)NULL); O si corres

 $ ls -l /

Eso sería execlp("ls", "ls", "-l", "/", (char *)NULL);

Así sucesivamente a execlp("/bin/sh", ..., "ls -l /bin/??", ...);

Aquí vas al shell, /bin/sh , y le estás dando al shell un comando para ejecutar. Ese comando es "ls -l /bin/??". Puede ejecutarlo manualmente desde una línea de comando/shell:

 $ ls -l /bin/??

Ahora, ¿cómo ejecuta un shell y le dice que ejecute un comando? Abre la documentación/página man de tu shell y léela.

Lo que quieres ejecutar es:

 $ /bin/sh -c "ls -l /bin/??"

esto se convierte

 execlp("/bin/sh","/bin/sh", "-c", "ls -l /bin/??", (char *)NULL);

Nota al margen: El /bin/?? está haciendo coincidencia de patrones, esta coincidencia de patrones la realiza el shell y se expande a todos los archivos en /bin/ con 2 caracteres. Si simplemente lo hicieras

 execlp("ls","ls", "-l", "/bin/??", (char *)NULL);

Probablemente no pasaría nada (a menos que haya un archivo realmente llamado /bin/?? ) ya que no hay un shell que interprete y expanda /bin/??

over 4 years ago · Santiago Trujillo Relatório

0

La limitación de execl es que cuando se ejecuta un comando de shell o cualquier otra secuencia de comandos que no se encuentra en el directorio de trabajo actual, debemos pasar la ruta completa del comando o la secuencia de comandos. Ejemplo:

 execl("/bin/ls", "ls", "-la", NULL);

La solución para pasar la ruta completa del ejecutable es usar la función execlp , que busca el archivo (primer argumento de execlp) en los directorios señalados por PATH:

 execlp("ls", "ls", "-la", NULL);
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