Мне нужно создать 10 каналов в C. Чтобы заставить их работать, мне нужно создать 10 массивов int размером 2?
Это будет одна альтернатива, но нетолько один.
Или я могу просто объявить массив размером 20, а затем дать каналу адрес, где должна начинаться каждая труба?
Да, вы могли бы сделать это.Функция pipe()
в любом случае получает только указатель на первый int
и требует, чтобы один последующий адрес был адресован через этот указатель.
Если мне нужно создать 10, есть лиКак я могу создать их в цикле и получить вид этого результата?
Да, вы можете объявить массив из двух - int
в цикле, передать его в pipe()
и скопироватьрезультат до некоторого более постоянного хранения до следующей итерации, но это было бы расточительно.
Первое, что нужно рассмотреть, - это то, как вы хотите хранить дескрипторы файлов на конце канала.Если они вам нужны только на время цикла, то вы можете просто продолжать использовать один и тот же массив или использовать массив для каждой петли-итерации, чтобы он был только один.
Но предположим, что вы хотите толькосоздайте каналы в цикле, так что вам нужно отслеживать все их файловые дескрипторы после окончания цикла.В таком случае наиболее естественной структурой данных для хранения только файловых дескрипторов будет массив массивов, или 2D-массив:
int pipefds[10][2];
Если вы планируете использовать такую структуру, то ваш циклможет выглядеть так:
int pipefds[10][2];
for (int i = 0; i < 10; i++) {
pipe(pipefds[i]);
}