Из C или C ++ вы обычно используете pselect ()
, чтобы проверить, есть ли данные, готовые для чтения. Вы можете сделать это, не устанавливая режим дескриптора файла на неблокирующий.
Возможно, это должен быть комментарий - но у меня недостаточно «статуса», чтобы сделать это, вздох ... - поэтому я пытаюсь дать отправную точку для ответа!
«как мы попали в linux ...» мало что говорит человеку, работающему с AIX. Я попробовал кое-что простое: можно ли принять статус «ДРУГОЕ» в качестве ответа.
С сервера Linux, который я пробовал:
root@x064:[/data]cat /proc/1/status
▒▒/▒0▒0▒;▒
▒▒▒9▒E▒4▒œOTHER
root@x064:[/data]
root@x064:[/data/prj/gnu/less-481]strings /proc/1/status
OTHER
В AIX это выглядит похоже:
michael@x071:[/home/michael]cat /proc/1/status
dò0ò0 ~5!(FiË3ãú¤ÀOTHER
michael@x071:[/home/michael]strings /proc/1/status
!(Fi
Ë3ãú
OTHER
imho - строки! (Fi и Ë3ãú выглядят просто как строки, но это просто «нормальный статус, который отображается как строки»
] Для просмотра / proc вам следует обратить внимание на следующие команды:
michael@x071:[/home/michael]ls -l /usr/bin/proc*
-r-xr-xr-x 1 bin bin 8462 Jan 12 2015 /usr/bin/proccred
-r-xr-xr-x 1 bin bin 23820 Jan 12 2015 /usr/bin/procfiles
-r-xr-xr-x 1 bin bin 14852 Jan 12 2015 /usr/bin/procflags
-r-xr-xr-x 1 bin bin 11222 Jan 12 2015 /usr/bin/procldd
-r-xr-xr-x 1 bin bin 20884 Jan 12 2015 /usr/bin/procmap
-r-xr-xr-x 1 bin bin 8274 Jan 12 2015 /usr/bin/procrun
-r-xr-xr-x 1 bin bin 8974 Aug 06 2011 /usr/bin/procsig
-r-xr-xr-x 1 bin bin 24534 Jan 29 2015 /usr/bin/procstack
-r-xr-xr-x 1 bin bin 8502 Jan 12 2015 /usr/bin/procstop
-r-xr-xr-x 1 bin bin 34888 Jan 12 2015 /usr/bin/proctree
-r-xr-xr-x 1 bin bin 13612 Jan 12 2015 /usr/bin/procwait
-r-xr-xr-x 1 bin bin 9158 Jan 12 2015 /usr/bin/procwdx
Содержимое AIX /proc/<PID>/status
должно быть структурировано в соответствии с struct pstatus
, определенным в <sys/procfs.h>
включаемом файле. Насколько мне известно, для файловой структуры /proc/<PID>/*
не существует стандарта, поэтому любое чтение /proc
следует рассматривать как специфичный для ОС -код. Не ждите строгого -для -одного сопоставления для каждого элемента данных, который вы можете найти в Linux /proc
в любой другой ОС :данные могут быть расположены совсем по-другому, или некоторые элементы данных могут полностью отсутствовать.
См. документацию IBM:https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/filesreference/proc.html
Для C API, как правило, считывают /proc/<PID>/status
в буфер подходящего размера (или mmap()
его ), приводят указатель буфера/mmap в (struct pstatus *)
и используют его для доступа к элементам данных..
В зависимости от того, какая именно информация о состоянии вам нужна, вам может потребоваться прочитать другие файлы в том же каталоге, используя их эквивалентные типы структур для доступа к элементам данных.