У меня есть своеобразная проблема в Linux2.4, C и с использованием gcc.linux cat: Нет такого файла или каталога
Существует небольшая программа для извлечения информации из файла с помощью cat & grep cmd.
#define tmpFile "/tmp/cli_tmp_file.txt"
#define MAX_CMD 50
void getRange()
{
char cmd[MAX_CMD+1];
// remove the temp file first
snprintf(cmd, MAX_CMD, "rm -f %s", tmpFile);
system(cmd);
// create temp file
snprintf(cmd, MAX_CMD, "touch %s",tmpFile);
system(cmd);
// execute the command
snprintf(cmd, MAX_CMD, "echo \"Range:Max val 500\" > %s",tmpFile);
system(cmd);
// dump out the temp file so user could see
snprintf(cmd, MAX_CMD, "cat %s|grep \"Range\"", tmpFile);
system(cmd);
// remove the temp file
snprintf(cmd, MAX_CMD, "rm -f %s", tmpFile);
system(cmd);
}
, когда я исполняю этот код, я получаю выход в кошки: /tmp/cli_tmp_file.txt: Нет такого файла или каталога
Однако файл создается в папке TMP с содержимым
# pwd
/tmp
# ls -l
-rw-r--r-- 1 root root 68 Oct 10 12:54 cli_tmp_file.txt
#more /tmp/cli_tmp_file.txt
Range:Max val 500
в ручном исполнении той же ЦМД, он отображает предполагаемый выход
# cat /tmp/cli_tmp_file.txt|grep Range
Range:Max val 500
Любая помощь будет оценена по достоинству. Спасибо заранее.
Вы должны проверить возвращаемое значение 'system', чтобы увидеть, успешны ли команды. Кроме того, попробуйте распечатать буфер 'cmd' после каждого' snprintf', чтобы увидеть, содержит ли он намеченную команду. –
удалите файл, повторите попытку. –
Избегайте использования 'system' с' rm'; рассмотрите возможность вызова функции [remove (3)] (http://man7.org/linux/man-pages/man3/remove.3.html). И для создания файла просто 'fopen' его для записи и' fclose' его сразу после. Не забудьте проверить на отказ от каждой функции. –