Как я могу передать все файлы с полным путем в каталоге в массив аргументов в execv?

Я пытаюсь прочитать все файлы (изображения) в данном каталоге и передать его в execv. Я хочу запустить просмотр изображений кадрового буфера (ФБИ).

Пока он работает, когда я запускаю его из каталога, в котором находятся картинки. Как я могу манипулировать вектором, чтобы он не только содержал имена файлов, но и путь + имя файла?

int startSlideshow (char* pathtoFBI) {
pid_t fbiPid;

fbiPid = fork();

if (fbiPid == 0) {
/* this is the child process */
DIR *pictureDirectory;
struct dirent *dir;
int i = 0;
vector<char*> argVector;
char pDirectory[] = "/home/pi/bilder/";
argVector.push_back(pathtoFBI);         /* first Argument is Program name */
pictureDirectory = opendir(pDirectory);
if (pictureDirectory){
while ((dir = readdir(pictureDirectory)) != NULL) {
i++;
if (i > 2) {            /* first element is "." second is ".." */
argVector.push_back(dir->d_name);
}
}
//i -= 2;

} else ERREXIT("reading picture directory");

closedir(pictureDirectory);

argVector.push_back(NULL);
char** fbiArgv = &argVector[0];
execvp(pathtoFBI, fbiArgv);         /* pid is taken over by fbi */
_exit(EXIT_FAILURE);
}

0

Решение

Учитывая ваш код, вам просто нужно добавить pDirectory к каждому имени файла:

--- c1.cc       2013-02-04 02:35:47.000000000 +0400
+++ c2.cc       2013-02-04 02:39:03.000000000 +0400
@@ -8,7 +8,7 @@
DIR *pictureDirectory;
struct dirent *dir;
int i = 0;
-    vector<char*> argVector;
+    vector<char*> argVector; vector<string> fpVector;
char pDirectory[] = "/home/pi/bilder/";
argVector.push_back(pathtoFBI);         /* first Argument is Program name */
pictureDirectory = opendir(pDirectory);
@@ -16,7 +16,8 @@
while ((dir = readdir(pictureDirectory)) != NULL) {
i++;
if (i > 2) {            /* first element is "." second is ".." */
-                argVector.push_back(dir->d_name);
+                fpVector.push_back(string(pDirectory) + dir->d_name);
+                argVector.push_back((char*) fpVector.back().c_str());
}
}
//i -= 2;

В общем, есть Boost Filesystem’s абсолютный а также канонический.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]