《Linux/Unix系统编程手册》读书笔记 目录

第11章

这章主要讲了关于Linux和UNIX的系统资源的限制。

关于限制都存在一个最小值,这些最小值为<limits.h>文件中的常量。

通过cat 命令查看:

  1. lancelot@debian:~/Code/tlpi$ cat /usr/include/limits.h
  2. /* Copyright (C) 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2005
  3. Free Software Foundation, Inc.
  4. This file is part of the GNU C Library.
  5.  
  6. The GNU C Library is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU Lesser General Public
  8. License as published by the Free Software Foundation; either
  9. version 2.1 of the License, or (at your option) any later version.
  10.  
  11. The GNU C Library is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. Lesser General Public License for more details.
  15.  
  16. You should have received a copy of the GNU Lesser General Public
  17. License along with the GNU C Library; if not, write to the Free
  18. Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  19. 02111-1307 USA. */
  20.  
  21. /*
  22. * ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types <limits.h>
  23. */
  24.  
  25. #ifndef _LIBC_LIMITS_H_
  26. #define _LIBC_LIMITS_H_ 1
  27.  
  28. #include <features.h>
  29.  
  30. /* Maximum length of any multibyte character in any locale.
  31. We define this value here since the gcc header does not define
  32. the correct value. */
  33. #define MB_LEN_MAX 16
  34.  
  35. /* If we are not using GNU CC we have to define all the symbols ourself.
  36. Otherwise use gcc's definitions (see below). */
  37. #if !defined __GNUC__ || __GNUC__ < 2
  38.  
  39. /* We only protect from multiple inclusion here, because all the other
  40. #include's protect themselves, and in GCC 2 we may #include_next through
  41. multiple copies of this file before we get to GCC's. */
  42. # ifndef _LIMITS_H
  43. # define _LIMITS_H
  44.  
  45. #include <bits/wordsize.h>
  46.  
  47. /* We don't have #include_next.
  48. Define ANSI <limits.h> for standard 32-bit words. */
  49.  
  50. /* These assume 8-bit `char's, 16-bit `short int's,
  51. and 32-bit `int's and `long int's. */
  52.  
  53. /* Number of bits in a `char'. */
  54. # define CHAR_BIT
  55.  
  56. /* Minimum and maximum values a `signed char' can hold. */
  57. # define SCHAR_MIN (-)
  58. # define SCHAR_MAX
  59.  
  60. /* Maximum value an `unsigned char' can hold. (Minimum is 0.) */
  61. # define UCHAR_MAX
  62.  
  63. /* Minimum and maximum values a `char' can hold. */
  64. # ifdef __CHAR_UNSIGNED__
  65. # define CHAR_MIN
  66. # define CHAR_MAX UCHAR_MAX
  67. # else
  68. # define CHAR_MIN SCHAR_MIN
  69. # define CHAR_MAX SCHAR_MAX
  70. # endif
  71.  
  72. /* Minimum and maximum values a `signed short int' can hold. */
  73. # define SHRT_MIN (-)
  74. # define SHRT_MAX
  75.  
  76. /* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
  77. # define USHRT_MAX
  78.  
  79. /* Minimum and maximum values a `signed int' can hold. */
  80. # define INT_MIN (-INT_MAX - )
  81. # define INT_MAX
  82.  
  83. /* Maximum value an `unsigned int' can hold. (Minimum is 0.) */
  84. # define UINT_MAX 4294967295U
  85.  
  86. /* Minimum and maximum values a `signed long int' can hold. */
  87. # if __WORDSIZE ==
  88. # define LONG_MAX 9223372036854775807L
  89. # else
  90. # define LONG_MAX 2147483647L
  91. # endif
  92. # define LONG_MIN (-LONG_MAX - 1L)
  93.  
  94. /* Maximum value an `unsigned long int' can hold. (Minimum is 0.) */
  95. # if __WORDSIZE ==
  96. # define ULONG_MAX 18446744073709551615UL
  97. # else
  98. # define ULONG_MAX 4294967295UL
  99. # endif
  100.  
  101. # ifdef __USE_ISOC99
  102.  
  103. /* Minimum and maximum values a `signed long long int' can hold. */
  104. # define LLONG_MAX 9223372036854775807LL
  105. # define LLONG_MIN (-LLONG_MAX - 1LL)
  106.  
  107. /* Maximum value an `unsigned long long int' can hold. (Minimum is 0.) */
  108. # define ULLONG_MAX 18446744073709551615ULL
  109.  
  110. # endif /* ISO C99 */
  111.  
  112. # endif /* limits.h */
  113. #endif /* GCC 2. */
  114.  
  115. #endif /* !_LIBC_LIMITS_H_ */
  116.  
  117. /* Get the compiler's limits.h, which defines almost all the ISO constants.
  118.  
  119. We put this #include_next outside the double inclusion check because
  120. it should be possible to include this file more than once and still get
  121. the definitions from gcc's header. */
  122. #if defined __GNUC__ && !defined _GCC_LIMITS_H_
  123. /* `_GCC_LIMITS_H_' is what GCC's file defines. */
  124. # include_next <limits.h>
  125. #endif
  126.  
  127. /* The <limits.h> files in some gcc versions don't define LLONG_MIN,
  128. LLONG_MAX, and ULLONG_MAX. Instead only the values gcc defined for
  129. ages are available. */
  130. #if defined __USE_ISOC99 && defined __GNUC__
  131. # ifndef LLONG_MIN
  132. # define LLONG_MIN (-LLONG_MAX-)
  133. # endif
  134. # ifndef LLONG_MAX
  135. # define LLONG_MAX __LONG_LONG_MAX__
  136. # endif
  137. # ifndef ULLONG_MAX
  138. # define ULLONG_MAX (LLONG_MAX * 2ULL + )
  139. # endif
  140. #endif
  141.  
  142. #ifdef __USE_POSIX
  143. /* POSIX adds things to <limits.h>. */
  144. # include <bits/posix1_lim.h>
  145. #endif
  146.  
  147. #ifdef __USE_POSIX2
  148. # include <bits/posix2_lim.h>
  149. #endif
  150.  
  151. #ifdef __USE_XOPEN
  152. # include <bits/xopen_lim.h>
  153. #endif

我们还可以通过在shell用getconf获取限制:

PS:OPEN_MAX为进程同时最多可以打开的文件描述符的数量。

  1. lancelot@debian:~/Code/tlpi$ getconf OPEN_MAX

第12章

这章主要将了系统和进程信息

/proc虚拟文件系统:维基

首先我们来看看/proc有些什么

  1. lancelot@debian:~/Code/tlpi$ ls /proc/
  2. acpi execdomains kpageflags softirqs
  3. asound fb loadavg stat
  4. ati filesystems locks swaps
  5. buddyinfo fs meminfo sys
  6. bus interrupts misc sysrq-trigger
  7. cgroups iomem modules sysvipc
  8. cmdline ioports mounts timer_list
  9. consoles irq mtrr timer_stats
  10. cpuinfo kallsyms net tty
  11. crypto kcore pagetypeinfo uptime
  12. devices keys partitions version
  13. diskstats key-users sched_debug vmallocinfo
  14. dma kmsg self vmstat
  15. driver kpagecount slabinfo zoneinfo

那些数字是进程ID(PID),每个进程ID都有其独自的子文件夹,里面包含进程的相关信息。

通过PID为1的进程(init)来说明。

  1. lancelot@debian:~/Code/tlpi$ sudo ls -l /proc/
  2. [sudo] password for lancelot:
  3. 总用量
  4. dr-xr-xr-x root root 4 : attr
  5. -rw-r--r-- root root 4 : autogroup
  6. -r-------- root root 4 : auxv
  7. -r--r--r-- root root 4 : cgroup
  8. --w------- root root 4 : clear_refs
  9. -r--r--r-- root root 4 : cmdline
  10. -rw-r--r-- root root 4 : comm
  11. -rw-r--r-- root root 4 : coredump_filter
  12. -r--r--r-- root root 4 : cpuset
  13. lrwxrwxrwx root root 4 : cwd -> /
  14. -r-------- root root 4 : environ
  15. lrwxrwxrwx root root 4 : exe -> /sbin/init
  16. dr-x------ root root 4 : fd
  17. dr-x------ root root 4 : fdinfo
  18. -r-------- root root 4 : io
  19. -r--r--r-- root root 4 : limits
  20. -rw-r--r-- root root 4 : loginuid
  21. -r--r--r-- root root 4 : maps
  22. -rw------- root root 4 : mem
  23. -r--r--r-- root root 4 : mountinfo
  24. -r--r--r-- root root 4 : mounts
  25. -r-------- root root 4 : mountstats
  26. dr-xr-xr-x root root 4 : net
  27. dr-x--x--x root root 4 : ns
  28. -r--r--r-- root root 4 : numa_maps
  29. -rw-r--r-- root root 4 : oom_adj
  30. -r--r--r-- root root 4 : oom_score
  31. -rw-r--r-- root root 4 : oom_score_adj
  32. -r--r--r-- root root 4 : pagemap
  33. -r--r--r-- root root 4 : personality
  34. lrwxrwxrwx root root 4 : root -> /
  35. -rw-r--r-- root root 4 : sched
  36. -r--r--r-- root root 4 : sessionid
  37. -r--r--r-- root root 4 : smaps
  38. -r--r--r-- root root 4 : stack
  39. -r--r--r-- root root 4 : stat
  40. -r--r--r-- root root 4 : statm
  41. -r--r--r-- root root 4 : status
  42. -r--r--r-- root root 4 : syscall
  43. dr-xr-xr-x root root 4 : task
  44. -r--r--r-- root root 4 : wchan

其中

cmdline是以'\0'分隔的命令参数

cwd是指向当前工作目录的符号链接,可以看出init当前工作目录为根目录。

environ是环境列表,以'\0'分隔

  1. HOME=/init=/sbin/initTERM=linuxBOOT_IMAGE=/vmlinuz-3.2.--amd64PATH=/sbin:/usr/sbin:/bin:/usr/binPWD=/rootmnt=/root

exe是指向正在执行文件的符号链接,正在执行文件为/sbin/init。

fd是文件目录,包含指向由该进程打开文件的符号链接

  1. lancelot@debian:~/Code/tlpi$ sudo ls -l /proc//fd
  2. 总用量
  3. lrwx------ root root 4 : -> /run/initctl

maps为内存映射

  1. lancelot@debian:~/Code/tlpi$ sudo cat /proc//maps
  2. - r-xp : /sbin/init
  3. - rw-p : /sbin/init
  4. 01e15000-01e36000 rw-p : [heap]
  5. 7f5109159000-7f510915b000 r-xp : /lib/x86_64-linux-gnu/libdl-2.13.so
  6. 7f510915b000-7f510935b000 ---p : /lib/x86_64-linux-gnu/libdl-2.13.so
  7. 7f510935b000-7f510935c000 r--p : /lib/x86_64-linux-gnu/libdl-2.13.so
  8. 7f510935c000-7f510935d000 rw-p : /lib/x86_64-linux-gnu/libdl-2.13.so
  9. 7f510935d000-7f51094df000 r-xp : /lib/x86_64-linux-gnu/libc-2.13.so
  10. 7f51094df000-7f51096de000 ---p : /lib/x86_64-linux-gnu/libc-2.13.so
  11. 7f51096de000-7f51096e2000 r--p : /lib/x86_64-linux-gnu/libc-2.13.so
  12. 7f51096e2000-7f51096e3000 rw-p : /lib/x86_64-linux-gnu/libc-2.13.so
  13. 7f51096e3000-7f51096e8000 rw-p :
  14. 7f51096e8000-7f5109706000 r-xp : /lib/x86_64-linux-gnu/libselinux.so.
  15. 7f5109706000-7f5109905000 ---p 0001e000 : /lib/x86_64-linux-gnu/libselinux.so.
  16. 7f5109905000-7f5109906000 r--p 0001d000 : /lib/x86_64-linux-gnu/libselinux.so.
  17. 7f5109906000-7f5109907000 rw-p 0001e000 : /lib/x86_64-linux-gnu/libselinux.so.
  18. 7f5109907000-7f5109908000 rw-p :
  19. 7f5109908000-7f5109947000 r-xp : /lib/x86_64-linux-gnu/libsepol.so.
  20. 7f5109947000-7f5109b46000 ---p 0003f000 : /lib/x86_64-linux-gnu/libsepol.so.
  21. 7f5109b46000-7f5109b47000 r--p 0003e000 : /lib/x86_64-linux-gnu/libsepol.so.
  22. 7f5109b47000-7f5109b48000 rw-p 0003f000 : /lib/x86_64-linux-gnu/libsepol.so.
  23. 7f5109b48000-7f5109b68000 r-xp : /lib/x86_64-linux-gnu/ld-2.13.so
  24. 7f5109d4a000-7f5109d4e000 rw-p :
  25. 7f5109d65000-7f5109d67000 rw-p :
  26. 7f5109d67000-7f5109d68000 r--p 0001f000 : /lib/x86_64-linux-gnu/ld-2.13.so
  27. 7f5109d68000-7f5109d69000 rw-p : /lib/x86_64-linux-gnu/ld-2.13.so
  28. 7f5109d69000-7f5109d6a000 rw-p :
  29. 7fffc8fe9000-7fffc900a000 rw-p : [stack]
  30. 7fffc9191000-7fffc9192000 r-xp : [vdso]
  31. ffffffffff600000-ffffffffff601000 r-xp : [vsyscall]

mem为进程虚拟内存

mounts为进程的安装点

  1. lancelot@debian:~/Code/tlpi$ sudo cat /proc//mounts
  2. rootfs / rootfs rw
  3. sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime
  4. proc /proc proc rw,nosuid,nodev,noexec,relatime
  5. udev /dev devtmpfs rw,relatime,size=10240k,nr_inodes=,mode=
  6. devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=,mode=,ptmxmode=
  7. tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=767824k,mode=
  8. /dev/disk/by-uuid/c2a06636-4fcf--8f46-6415015254a0 / ext4 rw,relatime,errors=remount-ro,user_xattr,barrier=,data=ordered
  9. tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k
  10. tmpfs /run/shm tmpfs rw,nosuid,nodev,noexec,relatime,size=1535640k
  11. /dev/sda7 /boot ext4 rw,relatime,user_xattr,barrier=,stripe=,data=ordered
  12. /dev/sda5 /home ext4 rw,relatime,user_xattr,barrier=,data=ordered
  13. /dev/sda6 /opt ext4 rw,relatime,user_xattr,barrier=,data=ordered
  14. rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime
  15. binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime

root为指向根目录的符号链接

status记录着进程的ID、内存使用情况、信号等信息。

  1. lancelot@debian:~/Code/tlpi$ sudo cat /proc//status
  2. Name: init
  3. State: S (sleeping)
  4. Tgid:
  5. Pid:
  6. PPid:
  7. TracerPid:
  8. Uid:
  9. Gid:
  10. FDSize:
  11. Groups:
  12. VmPeak: kB
  13. VmSize: kB
  14. VmLck: kB
  15. VmPin: kB
  16. VmHWM: kB
  17. VmRSS: kB
  18. VmData: kB
  19. VmStk: kB
  20. VmExe: kB
  21. VmLib: kB
  22. VmPTE: kB
  23. VmSwap: kB
  24. Threads:
  25. SigQ: /
  26. SigPnd:
  27. ShdPnd:
  28. SigBlk:
  29. SigIgn: fffffffe57f0d8fc
  30. SigCgt: 00000000280b2603
  31. CapInh:
  32. CapPrm: ffffffffffffffff
  33. CapEff: ffffffffffffffff
  34. CapBnd: ffffffffffffffff
  35. Cpus_allowed: f
  36. Cpus_allowed_list: -
  37. Mems_allowed: ,
  38. Mems_allowed_list:
  39. voluntary_ctxt_switches:
  40. nonvoluntary_ctxt_switches:

task下存放着该进程的每个线程的子目录(记录线程的信息)

  1. lancelot@debian:~/Code/tlpi$ sudo ls -l /proc//task
  2. 总用量
  3. dr-xr-xr-x root root 4 :

子目录的信息:

  1. lancelot@debian:~/Code/tlpi$ sudo ls -l /proc//task/
  2. 总用量
  3. dr-xr-xr-x root root 4 : attr
  4. -r-------- root root 4 : auxv
  5. -r--r--r-- root root 4 : cgroup
  6. --w------- root root 4 : clear_refs
  7. -r--r--r-- root root 4 : cmdline
  8. -rw-r--r-- root root 4 : comm
  9. -r--r--r-- root root 4 : cpuset
  10. lrwxrwxrwx root root 4 : cwd -> /
  11. -r-------- root root 4 : environ
  12. lrwxrwxrwx root root 4 : exe -> /sbin/init
  13. dr-x------ root root 4 : fd
  14. dr-x------ root root 4 : fdinfo
  15. -r-------- root root 4 : io
  16. -r--r--r-- root root 4 : limits
  17. -rw-r--r-- root root 4 : loginuid
  18. -r--r--r-- root root 4 : maps
  19. -rw------- root root 4 : mem
  20. -r--r--r-- root root 4 : mountinfo
  21. -r--r--r-- root root 4 : mounts
  22. dr-x--x--x root root 4 : ns
  23. -r--r--r-- root root 4 : numa_maps
  24. -rw-r--r-- root root 4 : oom_adj
  25. -r--r--r-- root root 4 : oom_score
  26. -rw-r--r-- root root 4 : oom_score_adj
  27. -r--r--r-- root root 4 : pagemap
  28. -r--r--r-- root root 4 : personality
  29. lrwxrwxrwx root root 4 : root -> /
  30. -rw-r--r-- root root 4 : sched
  31. -r--r--r-- root root 4 : sessionid
  32. -r--r--r-- root root 4 : smaps
  33. -r--r--r-- root root 4 : stack
  34. -r--r--r-- root root 4 : stat
  35. -r--r--r-- root root 4 : statm
  36. -r--r--r-- root root 4 : status
  37. -r--r--r-- root root 4 : syscall
  38. -r--r--r-- root root 4 : wchan

通过访问/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: none
  11. * Compiler: gcc
  12. *
  13. * Author: alan (), alan19920626@gmail.com
  14. * 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 1000
  28.  
  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 != || strcmp(argv[], "--help") == )
  41. usageErr("%s username");
  42.  
  43. id = userIdFromName(argv[]); //获取用户名对应的UID
  44. if(id == -)
  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[])) //跳过类型文件类型不是目录和文件名不是数字的
  54. continue;
  55.  
  56. snprintf(path, MAX_LINE, "/proc/%s/status", dp->d_name);
  57. fp = fopen(path, "r"); //打开进程对应的status文件的文件流
  58. p_uid = ;
  59. while(fgets(line, MAX_LINE, fp) != NULL){ //逐行获取信息
  60. if(strncmp(line, "Name:", ) == ){ //当字符串的开始包含Name:为进程名
  61. for(p = line + ; *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:", ) == ){ //获取进程号
  70. pid = strtol(line+, NULL, );
  71. }
  72.  
  73. if(strncmp(line, "Uid:", ) == ){ //获取有效用户号
  74. p_uid = strtol(line+, NULL, );
  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文件的信息。感觉这个练习比之前的难度大了,综合了比较多的系统调用和库函数,感觉还是用得不熟练。除了把书上的练习做了,还要找些东东来搞搞,练习一下。

测试结果:

  1. lancelot@debian:~/Code/tlpi$ ./12.1 lancelot
  2. Uid:
  3. bash
  4. startx
  5. xinit
  6. Xorg
  7. ck-launch-sessi
  8. ssh-agent
  9. x-session-manag
  10. dbus-launch
  11. dbus-daemon
  12. ibus-daemon
  13. ibus-gconf
  14. python
  15. ibus-x11
  16. gvfsd
  17. gconfd-
  18. ibus-engine-sun
  19. gnome-settings-
  20. gnome-keyring-d
  21. pulseaudio
  22. gvfs-gdu-volume
  23. gvfs-afc-volume
  24. gvfs-gphoto2-vo
  25. gnome-shell
  26. gsd-printer
  27. nm-applet
  28. tracker-miner-f
  29. gdu-notificatio
  30. nautilus
  31. tracker-store
  32. gnome-screensav
  33. evolution-alarm
  34. gvfsd-trash
  35. evolution-calen
  36. gvfsd-burn
  37. evolution-addre
  38. goa-daemon
  39. gvfsd-metadata
  40. gnome-shell-cal
  41. mission-control
  42. chrome
  43. chrome
  44. chrome-sandbox
  45. chrome
  46. nacl_helper
  47. chrome
  48. chrome
  49. chrome
  50. chrome
  51. chrome
  52. chrome
  53. chrome
  54. chrome
  55. chrome
  56. chrome
  57. dconf-service
  58. guake
  59. gnome-pty-helpe
  60. bash
  61. gvim
  62. gedit
  63. gnome-pty-helpe
  64. bash
  65. bash
  66. 12.1

-----------------------还有两题。。。又来挖坑了-------感觉对这些系统调用和库函数的熟练程度严重不够

-----------------------还要继续努力啊!!!!加油!!!!!---------------------------------------------------

-----------------------要把学习记录的进度加快,下册也快看了一个月,还有一大部分没看,而且代码也很多没实现

《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)的更多相关文章

  1. 《Linux/Unix系统编程手册》读书笔记 目录

    <Linux/Unix系统编程手册>读书笔记1  (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2  (创建于4月9日,最后更新4月10日) ...

  2. 《Linux/Unix系统编程手册》读书笔记9(文件属性)

    <Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...

  3. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  4. 《Linux/Unix系统编程手册》读书笔记6

    <Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...

  5. 《Linux/Unix系统编程手册》读书笔记5

    <Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...

  6. 《Linux/Unix系统编程手册》读书笔记4

    <Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过mallo ...

  7. 《Linux/Unix系统编程手册》读书笔记3

    <Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此 ...

  8. 《Linux/Unix系统编程手册》读书笔记1

    <Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于L ...

  9. 《Linux/Unix系统编程手册》读书笔记2

    <Linux/Unix系统编程手册>读书笔记 目录 第5章: 主要介绍了文件I/O更深入的一些内容. 原子操作,将一个系统调用所要完成的所有动作作为一个不可中断的操作,一次性执行:这样可以 ...

随机推荐

  1. VMM学习-vmm_log

    功能类似verilog里的$display函数,在vmm里做了强化,可以在仿真过程中看到整个平台的运行信息,用来调试仿真平台. 函数原型在vmm.sv里(class vmm_log;),其构造函数为e ...

  2. xml给提示

    1.     FAQ:不给提示: a)     window – preferences – myeclipse – xml – xml catalog b)     User Specified E ...

  3. javascript获取以及设置光标位置

    一. 获取光标位置: // 获取光标位置 function getCursortPosition (textDom) { var cursorPos = 0; if (document.selecti ...

  4. 【BZOJ】【1552】【Cerc2007】robotic sort / 【3506】【CQOI2014】排序机械臂

    Splay 离散化+Splay维护序列…… 好吧主要说一下我做这道题遇到的几个错误点: 1.离散化 2.由于找到的这个数的位置一定是大于等于 i 的,所以其实在把它splay到根以后,i 结点只能sp ...

  5. 【BZOJ】【2809】【APIO2012】派遣dispatching

    贪心/可并堆 跪了……我这么弱果然还是应该回家种红薯去…… 考虑选人的时候,每个人对答案的贡献其实是一样的,都是1,那么我们就贪心地去选花钱少的就好啦~ 具体的做法:倒着枚举(因为有b[i]<i ...

  6. 【BZOJ】【3907】网格

    组合数学/python 3907: 网格 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 162  Solved: 76[Submit][Status][ ...

  7. Leetcode#126 Word Ladder II

    原题地址 既然是求最短路径,可以考虑动归或广搜.这道题对字典直接进行动归是不现实的,因为字典里的单词非常多.只能选择广搜了. 思路也非常直观,从start或end开始,不断加入所有可到达的单词,直到最 ...

  8. Hdu 1009 FatMouse' Trade 分类: Translation Mode 2014-08-04 14:07 74人阅读 评论(0) 收藏

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. mongo 1067错误

    对mongo进行错误的操作导致mongo服务异常关闭,当重启mongo服务时出现1067错误此时在data目录下产生mongod.lock文件,可以讲此文件删除,然后重启就可以了 Please mak ...

  10. mybatis insert 如何返回主键

    在使用ibatis插入数据进数据库的时候,会用到一些sequence的数据,有些情况下,在插入完成之后还需要将sequence的值返回,然后才能进行下一步的操作.       使用ibatis的sel ...