Это потому, что в конструкторе вы объявили локальную переменную с тем же именем, что и атрибут.
Чтобы выделить целочисленный массив, который все элементы инициализированы равным нулю, напишите это в конструкторе:
data = new int[3];
Чтобы выделить целочисленный массив, который имеет другие начальные значения, поместите этот код в конструкторе:
int[] temp = {2, 3, 7};
data = temp;
или:
data = new int[] {2, 3, 7};
Я не знаю об использовании sendmsg () для «отправки» сокета от одного процесса к другому.
Я знаю, что системный вызов bind () вернет EADDRINUSE, если второй процесс попытается использовать тот же порт.
Вы, вероятно, сможете найти общие сокеты, проанализировав / proc / net / tcp (и подобные «файлы» для других протоколов). Здесь есть несколько документов по / proc / net / tcp .
Вам нужно будет найти сокет (возможно, по его IP-адресам / номерам портов?) И проанализировать номер inode. Получив индексный дескриптор, вы можете выполнять поиск по всему / proc / * / fd / *
, вызывая stat
для каждой ссылки и проверять член st_ino
struct stat
, пока не найдете совпадение.
Номер inode должен совпадать между двумя процессами, поэтому, когда вы прошли все / proc / * / fd / *
, вы должны были найти их оба.
Если вы действительно знаете идентификатор процесса и fd сокета первого, возможно, вам не нужно проходить через / proc / net / tcp, все, что вам нужно сделать, это указать / proc /
и поиск в остальной части / proc / * / fd / *
соответствующего inode. Вам понадобится / proc / net / tcp, если вы хотите получить IP-адреса / номер порта - который вы можете найти, если знаете номер inode