11-22 Мы выделяем память под четыре элемента, но инициализируем только три из них. Первая запись nameval[2], потом nameval[1] и nameval[0]. Указатель на начало списка (out.list) устанавливается на &nameval[2]. Мы инициализируем список в таком порядке, чтобы показать, что библиотека XDR обрабатывает указатели и порядок в списке оказывается именно таким, каким он был в нашей программе, и не зависит от того, какие массивы для этого используются. Мы также инициализируем значения элементов списка шестнадцатеричными величинами, поскольку будем выводить их в этом формате. Вывод программы показывает, что перед каждым элементом списка идет значение 1 в 4 байтах (что мы можем считать длиной массива переменной длины с одним элементом или булевским значением TRUE). Четвертая запись состоит из 4 байт, в которых записан 0. Она обозначает конец списка: При декодировании списка библиотека XDR будет динамически выделять память под его элементы и указатели и связывать все это вместе, что позволит легко переходить от одного элемента списка к другому в программе на С.Инициализация связного списка
solaris % opt2
1 дальше идет один элемент
5 длина строки
6e616d65 имя(name)
31000000 1 и три байта дополнения
1111 значение
1 один элемент
6 длина строки
6e616d65 имя
65320000 е 2 и 2 байта дополнения
2222 значение
1 один элемент
7 длина строки
6e616d65 имя
65653300 е е 3 и 1 байт дополнения
3333 значение
0 конец списка