国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

《Linux/Unix系統編程手冊》讀書筆記7 (/proc文件的簡介和運用)

2024-06-28 13:26:34
字體:
來源:轉載
供稿:網友
《linux/Unix系統編程手冊》讀書筆記7 (/PRoc文件的簡介和運用)

《Linux/Unix系統編程手冊》讀書筆記 目錄

第11章

這章主要講了關于Linux和UNIX的系統資源的限制。

關于限制都存在一個最小值,這些最小值為<limits.h>文件中的常量。

通過cat 命令查看:

lancelot@debian:~/Code/tlpi$ cat /usr/include/limits.h /* Copyright (C) 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2005   Free Software Foundation, Inc.   This file is part of the GNU C Library.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Lesser General Public   License as published by the Free Software Foundation; either   version 2.1 of the License, or (at your option) any later version.   The GNU C Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Lesser General Public License for more details.   You should have received a copy of the GNU Lesser General Public   License along with the GNU C Library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   02111-1307 USA.  *//* *    ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types    <limits.h> */#ifndef _LIBC_LIMITS_H_#define _LIBC_LIMITS_H_    1#include <features.h>/* Maximum length of any multibyte character in any locale.   We define this value here since the gcc header does not define   the correct value.  */#define MB_LEN_MAX    16/* If we are not using GNU CC we have to define all the symbols ourself.   Otherwise use gcc's definitions (see below).  */#if !defined __GNUC__ || __GNUC__ < 2/* We only protect from multiple inclusion here, because all the other   #include's protect themselves, and in GCC 2 we may #include_next through   multiple copies of this file before we get to GCC's.  */# ifndef _LIMITS_H#  define _LIMITS_H    1#include <bits/Wordsize.h>/* We don't have #include_next.   Define ANSI <limits.h> for standard 32-bit words.  *//* These assume 8-bit `char's, 16-bit `short int's,   and 32-bit `int's and `long int's.  *//* Number of bits in a `char'.    */#  define CHAR_BIT    8/* Minimum and maximum values a `signed char' can hold.  */#  define SCHAR_MIN    (-128)#  define SCHAR_MAX    127/* Maximum value an `unsigned char' can hold.  (Minimum is 0.)  */#  define UCHAR_MAX    255/* Minimum and maximum values a `char' can hold.  */#  ifdef __CHAR_UNSIGNED__#   define CHAR_MIN    0#   define CHAR_MAX    UCHAR_MAX#  else#   define CHAR_MIN    SCHAR_MIN#   define CHAR_MAX    SCHAR_MAX#  endif/* Minimum and maximum values a `signed short int' can hold.  */#  define SHRT_MIN    (-32768)#  define SHRT_MAX    32767/* Maximum value an `unsigned short int' can hold.  (Minimum is 0.)  */#  define USHRT_MAX    65535/* Minimum and maximum values a `signed int' can hold.  */#  define INT_MIN    (-INT_MAX - 1)#  define INT_MAX    2147483647/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */#  define UINT_MAX    4294967295U/* Minimum and maximum values a `signed long int' can hold.  */#  if __WORDSIZE == 64#   define LONG_MAX    9223372036854775807L#  else#   define LONG_MAX    2147483647L#  endif#  define LONG_MIN    (-LONG_MAX - 1L)/* Maximum value an `unsigned long int' can hold.  (Minimum is 0.)  */#  if __WORDSIZE == 64#   define ULONG_MAX    18446744073709551615UL#  else#   define ULONG_MAX    4294967295UL#  endif#  ifdef __USE_ISOC99/* Minimum and maximum values a `signed long long int' can hold.  */#   define LLONG_MAX    9223372036854775807LL#   define LLONG_MIN    (-LLONG_MAX - 1LL)/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0.)  */#   define ULLONG_MAX    18446744073709551615ULL#  endif /* ISO C99 */# endif    /* limits.h  */#endif    /* GCC 2.  */#endif    /* !_LIBC_LIMITS_H_ */ /* Get the compiler's limits.h, which defines almost all the ISO constants.    We put this #include_next outside the double inclusion check because    it should be possible to include this file more than once and still get    the definitions from gcc's header.  */#if defined __GNUC__ && !defined _GCC_LIMITS_H_/* `_GCC_LIMITS_H_' is what GCC's file defines.  */# include_next <limits.h>#endif/* The <limits.h> files in some gcc versions don't define LLONG_MIN,   LLONG_MAX, and ULLONG_MAX.  Instead only the values gcc defined for   ages are available.  */#if defined __USE_ISOC99 && defined __GNUC__# ifndef LLONG_MIN#  define LLONG_MIN    (-LLONG_MAX-1)# endif# ifndef LLONG_MAX#  define LLONG_MAX    __LONG_LONG_MAX__# endif# ifndef ULLONG_MAX#  define ULLONG_MAX    (LLONG_MAX * 2ULL + 1)# endif#endif#ifdef    __USE_POSIX/* POSIX adds things to <limits.h>.  */# include <bits/posix1_lim.h>#endif#ifdef    __USE_POSIX2# include <bits/posix2_lim.h>#endif#ifdef    __USE_XOPEN# include <bits/xopen_lim.h>#endif
View Code

我們還可以通過在shell用getconf獲取限制:

PS:OPEN_MAX為進程同時最多可以打開的文件描述符的數量。

lancelot@debian:~/Code/tlpi$ getconf OPEN_MAX1024

第12章

這章主要將了系統和進程信息

/proc虛擬文件系統:維基

首先我們來看看/proc有些什么

lancelot@debian:~/Code/tlpi$ ls /proc/1      11994  1652  200   252   2712  32    3869  4156  4297  4442  4577  530   acpi       execdomains  kpageflags    softirqs10     12     17    2001  2551  2775  33    3870  4165  4299  4451  4579  5318  asound     fb           loadavg       stat10002  12017  19    202   26    28    3345  3927  4168  4401  4457  4580  589   ati        filesystems  locks         swaps10008  13     191   203   2609  2815  3346  396   4169  4403  4464  4583  6     buddyinfo  fs           meminfo       sys10010  14     194   21    2610  2869  34    4     4173  4404  4483  4584  6410  bus        interrupts   misc          sysrq-trigger10235  140    195   22    2612  2879  3410  40    4177  4407  4485  4622  6415  cgroups    iomem        modules       sysvipc10575  15     1956  23    2641  29    35    4000  4179  4410  4496  4627  667   cmdline    ioports      mounts        timer_list11     158    196   2384  2668  2970  3798  4085  4181  4412  4500  4632  7     consoles   irq          mtrr          timer_stats11377  16     198   2399  2669  2980  3828  4102  4186  4415  4503  4637  7733  cpuinfo    kallsyms     net           tty11640  1644   1987  24    2670  2982  3864  4103  4190  4422  4511  4642  8     crypto     kcore        pagetypeinfo  uptime11659  1645   1992  2480  2671  3     3865  4107  4196  4424  4516  4647  8167  devices    keys         partitions    version11704  1646   1994  25    2672  30    3866  4108  4204  4436  4518  5248  8168  diskstats  key-users    sched_debug   vmallocinfo11967  1647   2     251   27    3011  3867  4109  4211  4438  4526  5254  8169  dma        kmsg         self          vmstat11988  1651   20    2515  2710  31    3868  4115  4217  4439  4570  529   9     driver     kpagecount   slabinfo      zoneinfo

那些數字是進程ID(PID),每個進程ID都有其獨自的子文件夾,里面包含進程的相關信息。

通過PID為1的進程(init)來說明。

lancelot@debian:~/Code/tlpi$ sudo ls -l /proc/1[sudo] password for lancelot: 總用量 0dr-xr-xr-x 2 root root 0  4月 28 22:40 attr-rw-r--r-- 1 root root 0  4月 28 22:40 autogroup-r-------- 1 root root 0  4月 28 22:40 auxv-r--r--r-- 1 root root 0  4月 28 22:40 cgroup--w------- 1 root root 0  4月 28 22:40 clear_refs-r--r--r-- 1 root root 0  4月 28 12:26 cmdline-rw-r--r-- 1 root root 0  4月 28 22:40 comm-rw-r--r-- 1 root root 0  4月 28 22:40 coredump_filter-r--r--r-- 1 root root 0  4月 28 22:40 cpusetlrwxrwxrwx 1 root root 0  4月 28 22:40 cwd -> /-r-------- 1 root root 0  4月 28 22:40 environlrwxrwxrwx 1 root root 0  4月 28 12:26 exe -> /sbin/initdr-x------ 2 root root 0  4月 28 22:40 fddr-x------ 2 root root 0  4月 28 22:40 fdinfo-r-------- 1 root root 0  4月 28 22:40 io-r--r--r-- 1 root root 0  4月 28 12:27 limits-rw-r--r-- 1 root root 0  4月 28 22:40 loginuid-r--r--r-- 1 root root 0  4月 28 22:40 maps-rw------- 1 root root 0  4月 28 22:40 mem-r--r--r-- 1 root root 0  4月 28 22:40 mountinfo-r--r--r-- 1 root root 0  4月 28 22:40 mounts-r-------- 1 root root 0  4月 28 22:40 mountstatsdr-xr-xr-x 6 root root 0  4月 28 22:40 netdr-x--x--x 2 root root 0  4月 28 22:40 ns-r--r--r-- 1 root root 0  4月 28 22:40 numa_maps-rw-r--r-- 1 root root 0  4月 28 22:40 oom_adj-r--r--r-- 1 root root 0  4月 28 22:40 oom_score-rw-r--r-- 1 root root 0  4月 28 12:29 oom_score_adj-r--r--r-- 1 root root 0  4月 28 22:40 pagemap-r--r--r-- 1 root root 0  4月 28 22:40 personalitylrwxrwxrwx 1 root root 0  4月 28 22:40 root -> /-rw-r--r-- 1 root root 0  4月 28 22:40 sched-r--r--r-- 1 root root 0  4月 28 22:40 sessionid-r--r--r-- 1 root root 0  4月 28 22:40 smaps-r--r--r-- 1 root root 0  4月 28 22:40 stack-r--r--r-- 1 root root 0  4月 28 12:26 stat-r--r--r-- 1 root root 0  4月 28 22:40 statm-r--r--r-- 1 root root 0  4月 28 12:26 status-r--r--r-- 1 root root 0  4月 28 22:40 syscalldr-xr-xr-x 3 root root 0  4月 28 22:40 task-r--r--r-- 1 root root 0  4月 28 22:40 wchan

其中

cmdline是以'/0'分隔的命令參數

cwd是指向當前工作目錄的符號鏈接,可以看出init當前工作目錄為根目錄。

environ是環境列表,以'/0'分隔

HOME=/init=/sbin/initTERM=linuxBOOT_IMAGE=/vmlinuz-3.2.0-4-amd64PATH=/sbin:/usr/sbin:/bin:/usr/binPWD=/rootmnt=/root

exe是指向正在執行文件的符號鏈接,正在執行文件為/sbin/init。

fd是文件目錄,包含指向由該進程打開文件的符號鏈接

lancelot@debian:~/Code/tlpi$ sudo ls -l /proc/1/fd總用量 0lrwx------ 1 root root 64  4月 28 22:52 10 -> /run/initctl

maps為內存映射

lancelot@debian:~/Code/tlpi$ sudo cat /proc/1/maps 00400000-00409000 r-xp 00000000 08:08 9306173                            /sbin/init00608000-00609000 rw-p 00008000 08:08 9306173                            /sbin/init01e15000-01e36000 rw-p 00000000 00:00 0                                  [heap]7f5109159000-7f510915b000 r-xp 00000000 08:08 1838382                    /lib/x86_64-linux-gnu/libdl-2.13.so7f510915b000-7f510935b000 ---p 00002000 08:08 1838382                    /lib/x86_64-linux-gnu/libdl-2.13.so7f510935b000-7f510935c000 r--p 00002000 08:08 1838382                    /lib/x86_64-linux-gnu/libdl-2.13.so7f510935c000-7f510935d000 rw-p 00003000 08:08 1838382                    /lib/x86_64-linux-gnu/libdl-2.13.so7f510935d000-7f51094df000 r-xp 00000000 08:08 1835094                    /lib/x86_64-linux-gnu/libc-2.13.so7f51094df000-7f51096de000 ---p 00182000 08:08 1835094                    /lib/x86_64-linux-gnu/libc-2.13.so7f51096de000-7f51096e2000 r--p 00181000 08:08 1835094                    /lib/x86_64-linux-gnu/libc-2.13.so7f51096e2000-7f51096e3000 rw-p 00185000 08:08 1835094                    /lib/x86_64-linux-gnu/libc-2.13.so7f51096e3000-7f51096e8000 rw-p 00000000 00:00 0 7f51096e8000-7f5109706000 r-xp 00000000 08:08 1835054                    /lib/x86_64-linux-gnu/libselinux.so.17f5109706000-7f5109905000 ---p 0001e000 08:08 1835054                    /lib/x86_64-linux-gnu/libselinux.so.17f5109905000-7f5109906000 r--p 0001d000 08:08 1835054                    /lib/x86_64-linux-gnu/libselinux.so.17f5109906000-7f5109907000 rw-p 0001e000 08:08 1835054                    /lib/x86_64-linux-gnu/libselinux.so.17f5109907000-7f5109908000 rw-p 00000000 00:00 0 7f5109908000-7f5109947000 r-xp 00000000 08:08 1835059                    /lib/x86_64-linux-gnu/libsepol.so.17f5109947000-7f5109b46000 ---p 0003f000 08:08 1835059                    /lib/x86_64-linux-gnu/libsepol.so.17f5109b46000-7f5109b47000 r--p 0003e000 08:08 1835059                    /lib/x86_64-linux-gnu/libsepol.so.17f5109b47000-7f5109b48000 rw-p 0003f000 08:08 1835059                    /lib/x86_64-linux-gnu/libsepol.so.17f5109b48000-7f5109b68000 r-xp 00000000 08:08 1838390                    /lib/x86_64-linux-gnu/ld-2.13.so7f5109d4a000-7f5109d4e000 rw-p 00000000 00:00 0 7f5109d65000-7f5109d67000 rw-p 00000000 00:00 0 7f5109d67000-7f5109d68000 r--p 0001f000 08:08 1838390                    /lib/x86_64-linux-gnu/ld-2.13.so7f5109d68000-7f5109d69000 rw-p 00020000 08:08 1838390                    /lib/x86_64-linux-gnu/ld-2.13.so7f5109d69000-7f5109d6a000 rw-p 00000000 00:00 0 7fffc8fe9000-7fffc900a000 rw-p 00000000 00:00 0                          [stack]7fffc9191000-7fffc9192000 r-xp 00000000 00:00 0                          [vdso]ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
View Code

mem為進程虛擬內存

mounts為進程的安裝點

lancelot@debian:~/Code/tlpi$ sudo cat /proc/1/mountsrootfs / rootfs rw 0 0sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0udev /dev devtmpfs rw,relatime,size=10240k,nr_inodes=958260,mode=755 0 0devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=767824k,mode=755 0 0/dev/disk/by-uuid/c2a06636-4fcf-4701-8f46-6415015254a0 / ext4 rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0tmpfs /run/shm tmpfs rw,nosuid,nodev,noexec,relatime,size=1535640k 0 0/dev/sda7 /boot ext4 rw,relatime,user_xattr,barrier=1,stripe=4,data=ordered 0 0/dev/sda5 /home ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0/dev/sda6 /opt ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime 0 0
View Code

root為指向根目錄的符號鏈接

status記錄著進程的ID、內存使用情況、信號等信息。

lancelot@debian:~/Code/tlpi$ sudo cat /proc/1/status Name:    initState:    S (sleeping)Tgid:    1Pid:    1PPid:    0TracerPid:    0Uid:    0    0    0    0Gid:    0    0    0    0FDSize:    64Groups:    VmPeak:       10652 kBVmSize:       10648 kBVmLck:           0 kBVmPin:           0 kBVmHWM:         788 kBVmrss:         788 kBVmData:         188 kBVmStk:         136 kBVmExe:          36 kBVmLib:        2052 kBVmPTE:          44 kBVmSwap:           0 kBThreads:    1SigQ:    0/59891SigPnd:    0000000000000000ShdPnd:    0000000000000000SigBlk:    0000000000000000SigIgn:    fffffffe57f0d8fcSigCgt:    00000000280b2603CapInh:    0000000000000000CapPrm:    ffffffffffffffffCapEff:    ffffffffffffffffCapBnd:    ffffffffffffffffCpus_allowed:    fCpus_allowed_list:    0-3Mems_allowed:    00000000,00000001Mems_allowed_list:    0voluntary_ctxt_switches:    7947nonvoluntary_ctxt_switches:    33
View Code

task下存放著該進程的每個線程的子目錄(記錄線程的信息)

lancelot@debian:~/Code/tlpi$ sudo ls -l /proc/1/task總用量 0dr-xr-xr-x 6 root root 0  4月 28 23:07 1

子目錄的信息:

lancelot@debian:~/Code/tlpi$ sudo ls -l /proc/1/task/1總用量 0dr-xr-xr-x 2 root root 0  4月 28 23:08 attr-r-------- 1 root root 0  4月 28 23:08 auxv-r--r--r-- 1 root root 0  4月 28 23:08 cgroup--w------- 1 root root 0  4月 28 23:08 clear_refs-r--r--r-- 1 root root 0  4月 28 23:08 cmdline-rw-r--r-- 1 root root 0  4月 28 23:08 comm-r--r--r-- 1 root root 0  4月 28 23:08 cpusetlrwxrwxrwx 1 root root 0  4月 28 23:08 cwd -> /-r-------- 1 root root 0  4月 28 23:08 environlrwxrwxrwx 1 root root 0  4月 28 23:08 exe -> /sbin/initdr-x------ 2 root root 0  4月 28 23:08 fddr-x------ 2 root root 0  4月 28 23:08 fdinfo-r-------- 1 root root 0  4月 28 23:08 io-r--r--r-- 1 root root 0  4月 28 23:08 limits-rw-r--r-- 1 root root 0  4月 28 23:08 loginuid-r--r--r-- 1 root root 0  4月 28 23:08 maps-rw------- 1 root root 0  4月 28 23:08 mem-r--r--r-- 1 root root 0  4月 28 23:08 mountinfo-r--r--r-- 1 root root 0  4月 28 23:08 mountsdr-x--x--x 2 root root 0  4月 28 23:08 ns-r--r--r-- 1 root root 0  4月 28 23:08 numa_maps-rw-r--r-- 1 root root 0  4月 28 23:08 oom_adj-r--r--r-- 1 root root 0  4月 28 23:08 oom_score-rw-r--r-- 1 root root 0  4月 28 23:08 oom_score_adj-r--r--r-- 1 root root 0  4月 28 23:08 pagemap-r--r--r-- 1 root root 0  4月 28 23:08 personalitylrwxrwxrwx 1 root root 0  4月 28 23:08 root -> /-rw-r--r-- 1 root root 0  4月 28 23:08 sched-r--r--r-- 1 root root 0  4月 28 23:08 sessionid-r--r--r-- 1 root root 0  4月 28 23:08 smaps-r--r--r-- 1 root root 0  4月 28 23:08 stack-r--r--r-- 1 root root 0  4月 28 23:08 stat-r--r--r-- 1 root root 0  4月 28 23:08 statm-r--r--r-- 1 root root 0  4月 28 23:08 status-r--r--r-- 1 root root 0  4月 28 23:08 syscall-r--r--r-- 1 root root 0  4月 28 23:08 wchan
View Code

通過訪問/proc文件可以獲取很多有用的信息。

練習:

12-1.編寫一個程序,以用戶名作為命令行參數,列表顯示該用戶下所有正在運行的進程ID和命令名。通過分析系統中/proc/PID/status文件的Name和UID各行信息,可以思想此功能。

 1 /* 2  * ===================================================================================== 3  * 4  *       Filename:  12.1.c 5  * 6  *    Description:   7  * 8  *        Version:  1.0 9  *        Created:  2014年05月01日 21時03分09秒10  *       Revision:  none11  *       Compiler:  gcc12  *13  *         Author:  alan (), alan19920626@Gmail.com14  *   Organization:  15  *16  * =====================================================================================17  */18 19 #include <fcntl.h>20 #include <dirent.h>21 #include <pwd.h>22 #include <ctype.h>23 #include <sys/stat.h>24 #include "tlpi_hdr.h"25 #include "ugid_functions.h"26 27 #define MAX_LINE 100028 29 int main(int argc, char *argv[]){30     DIR *dirp;31     struct dirent *dp;32     int fd;33     FILE *fp;34     char path[MAX_LINE], cmd[MAX_LINE], line[MAX_LINE];35     char *p, *q;36     int numRead;37     uid_t id, p_uid;38     pid_t pid;39 40     if(argc != 2 || strcmp(argv[1], "--help") == 0)41         usageErr("%s username");42 43     id = userIdFromName(argv[1]);        //獲取用戶名對應的UID44     if(id == -1)45         errExit("userIdFromName");46 47     dirp = opendir("/proc");            //打開/proc文件48     if(dirp == NULL)49         errExit("opendir");50 51     printf("Uid: %ld/n", id);52     while((dp = readdir(dirp)) != NULL){53         if(dp->d_type != DT_DIR || !isdigit((unsigned char) dp->d_name[0]))     //跳過類型文件類型不是目錄和文件名不是數字的54             continue;55 56         snprintf(path, MAX_LINE, "/proc/%s/status", dp->d_name);                57         fp = fopen(path, "r");                                                 //打開進程對應的status文件的文件流58         p_uid = 0;59         while(fgets(line, MAX_LINE, fp) != NULL){                              //逐行獲取信息60             if(strncmp(line, "Name:", 5) == 0){                                //當字符串的開始包含Name:為進程名61                 for(p = line + 5; *p != '/0' && isspace((unsigned char)*p); ++p)62                     ;63                 for(q = p; *q != '/0' && isgraph((unsigned char)*q); ++q)64                     ;65                 strncpy(cmd, p, (int)(q-p));66                 cmd[(int)(q-p)] = '/0';67             }68 69             if(strncmp(line, "Pid:", 4) == 0){                                 //獲取進程號70                 pid = strtol(line+4, NULL, 10);71             }72 73             if(strncmp(line, "Uid:", 4) == 0){                                 //獲取有效用戶號74                 p_uid = strtol(line+4, NULL, 10);75                 break;76             }77         }78         fclose(fp);79         if(p_uid == id)80             printf("%5ld %s/n", p_uid, cmd);81     }82     exit(EXIT_SUCCESS);83 }

剛開始打算用open和read來讀取status的信息,但是不知道為什么只能測試是否包含"Name:",不能獲取進程號和有效用戶號,所以修改成通過fopen和fgets來讀取status文件的信息。感覺這個練習比之前的難度大了,綜合了比較多的系統調用和庫函數,感覺還是用得不熟練。除了把書上的練習做了,還要找些東東來搞搞,練習一下。

測試結果:

lancelot@debian:~/Code/tlpi$ ./12.1 lancelotUid: 1000 1000 bash 1000 startx 1000 xinit 1000 Xorg 1000 ck-launch-sessi 1000 ssh-agent 1000 x-session-manag 1000 dbus-launch 1000 dbus-daemon 1000 ibus-daemon 1000 ibus-gconf 1000 python 1000 ibus-x11 1000 gvfsd 1000 gconfd-2 1000 ibus-engine-sun 1000 gnome-settings- 1000 gnome-keyring-d 1000 pulseaudio 1000 gvfs-gdu-volume 1000 gvfs-afc-volume 1000 gvfs-gphoto2-vo 1000 gnome-shell 1000 gsd-printer 1000 nm-applet 1000 tracker-miner-f 1000 gdu-notificatio 1000 nautilus 1000 tracker-store 1000 gnome-screensav 1000 evolution-alarm 1000 gvfsd-trash 1000 evolution-calen 1000 gvfsd-burn 1000 evolution-addre 1000 goa-daemon 1000 gvfsd-metadata 1000 gnome-shell-cal 1000 mission-control 1000 Chrome 1000 chrome 1000 chrome-sandbox 1000 chrome 1000 nacl_helper 1000 chrome 1000 chrome 1000 chrome 1000 chrome 1000 chrome 1000 chrome 1000 chrome 1000 chrome 1000 chrome 1000 chrome 1000 dconf-service 1000 guake 1000 gnome-pty-helpe 1000 bash 1000 gvim 1000 gedit 1000 gnome-pty-helpe 1000 bash 1000 bash 1000 12.1

-----------------------還有兩題。。。又來挖坑了-------感覺對這些系統調用和庫函數的熟練程度嚴重不夠

-----------------------還要繼續努力啊!!!!加油!!!!!---------------------------------------------------

-----------------------要把學習記錄的進度加快,下冊也快看了一個月,還有一大部分沒看,而且代碼也很多沒實現


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵石县| 曲沃县| 越西县| 中超| 洱源县| 德化县| 吴旗县| 洛阳市| 新河县| 保靖县| 德兴市| 甘泉县| 白玉县| 垦利县| 浪卡子县| 沿河| 嘉祥县| 四子王旗| 西昌市| 吉木乃县| 扎鲁特旗| 侯马市| 博乐市| 随州市| 巧家县| 安图县| 砚山县| 察雅县| 阿城市| 馆陶县| 徐州市| 鄢陵县| 商南县| 车致| 武功县| 阳西县| 祥云县| 德昌县| 永胜县| 湛江市| 泸州市|