системные вызовы на C

#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:

  1. ВСЕГДА проверяйте результат system(). Убедитесь, что он выполнен успешно (т. Е. возвращает 0 или что-то еще, что является успешным результатом для ‘test’)
  2. Когда система выполняется, она выполняется через /bin/sh (в любом случае, в unix / linux). Однако, поскольку вы указываете это с помощью ‘./test’, убедитесь, что вы работаете в рабочем каталоге, которым, по вашему МНЕНИЮ, являетесь. Сложные системы (и плохо спроектированные) меняют каталоги, как нижнее белье.

Комментарии:

1. Без шуток, нашел это в фрагменте кода в нескольких местах: system («sleep 1») ;