У меня есть следующий файл .c:C - получить путь .c файла
/home/eamorr/project1/eamorr.c
Я отлично компилируюсь и его ех находится по адресу:
/home/eamorr/project1/a.out
Теперь я имеют файл php по адресу:
/home/eamorr/project1/a/b/c/eamorr.php
Это нужно вызвать a.out
<?php
$cmd=__DIR__."../../../a.out";
$result=`$cmd`;
?>
Вот eamorr.c
программы:
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main (int argc, char *argv[]){
setuid (0);
char temp[2048];
char pwd[1024];
realpath(argv[0],pwd);
sprintf(temp,"/bin/bash %s/doMagic.sh",pwd);
system((char *)temp);
return 0;
}
К сожалению, PWD переменного содержит неверный путь !!!
/home/eamorr/project1/a.out/doMagic.sh
Как избавиться от бита a.out с пути? Я не программировать на C очень часто, и я был на этом в течение часа теперь ...
Вы можете подумать о том, чтобы сделать chdir от PHP до вызова программы и полностью обойти всю обходную директорию. –
Причина, по которой я использую C, заключается в том, что мне нужен веб-пользователь, чтобы иметь возможность выполнять привилегированную программу. Да, я знаю ... Пользователь аутентифицирован и пользователь ограничен диапазоном IP. – Eamorr
Я не говорил, что не использую программу на С. Вы можете выполнить 'chdir()' перед выполнением программы C, а затем вызвать './DoMagic.sh' вместо того, чтобы пытаться префикс его с полным путем. –