#c #system
#c #система
Вопрос:
У меня есть функция на C, которая вызывает другое программное обеспечение для выполнения и генерации файла, затем оно манипулирует данными, например
void main()
{
function();
//manipulate data in output.txt
}
void execute()
{
system("./test input.txt output.txt");
}
по какой-то причине output.txt файл не генерируется с помощью full … как работает системный вызов? выполнит ли возврат к main до завершения системного вызова? если да, то как я могу это решить? Я работаю над ubuntu, используя gcc
Комментарии:
1. система должна ожидать завершения переданной команды. Возможно, ошибка возникает в ./test? Вы можете проверить возвращаемое значение system для проверки (хотя вам придется обратиться к ссылке Ubuntu, чтобы увидеть, какие значения указывают на что.)
2. Имейте в виду, что
./
это относится к текущему рабочему каталогу, а не к каталогу, содержащему ваш двоичный файл.3. также полезно упомянуть, что когда input.txt это небольшой файл, он работает нормально, но когда input.txt является большим, как будто некоторые данные не обрабатываются…. когда я выполняю код вне кода, он работает должным образом, поэтому я подумал, что это из системного вызова
Ответ №1:
- ВСЕГДА проверяйте результат system(). Убедитесь, что он выполнен успешно (т. Е. возвращает 0 или что-то еще, что является успешным результатом для ‘test’)
- Когда система выполняется, она выполняется через /bin/sh (в любом случае, в unix / linux). Однако, поскольку вы указываете это с помощью ‘./test’, убедитесь, что вы работаете в рабочем каталоге, которым, по вашему МНЕНИЮ, являетесь. Сложные системы (и плохо спроектированные) меняют каталоги, как нижнее белье.
Комментарии:
1. Без шуток, нашел это в фрагменте кода в нескольких местах: system («sleep 1») ;