﻿{"id":177,"date":"2009-08-07T21:07:23","date_gmt":"2009-08-07T21:07:23","guid":{"rendered":""},"modified":"2011-11-18T17:03:53","modified_gmt":"2011-11-18T09:03:53","slug":"177","status":"publish","type":"post","link":"http:\/\/zerobox.org\/notes\/177.html","title":{"rendered":"unix\u591a\u8fdb\u7a0b\u7f16\u7a0b\uff08\u4e00\uff09"},"content":{"rendered":"<p><span style=\"font-size: x-small;\">\u5199\u5728\u524d\u9762\u7684\u8bdd<br \/>\n\u672c\u6587\u4e3b\u8981\u6839\u636e\u672c\u4eba\u5728UNIX\u7cfb\u7edf\u4e0a\u7684\u7f16\u7a0b\u5b9e\u8df5\u7ecf\u9a8c\u603b\u7ed3\u800c\u6210, \u65e2\u505a\u4e3a\u81ea\u5df1\u5728\u4e00\u4e2a\u65f6\u671f<br \/>\n\u5185\u7f16\u7a0b\u5b9e\u8df5\u7684\u90e8\u5206\u603b\u7ed3, \u53c8\u53ef\u6210\u4e3a\u6587\u7ae0\u53d1\u8868. \u5bf9UNIX\u7a0b\u5e8f\u5458\u521d\u5b66\u8005\u6765\u8bf4\u662f\u4e00\u4e2a\u5c0f\u5c0f\u7684\u7ecf<br \/>\n\u9a8c, \u4ec5\u4f9b\u53c2\u8003; \u5bf9UNIX\u8001\u624b\u6765\u8bf4\u5219\u4e0d\u503c\u4e00\u54c2, \u8bf7\u5404\u4f4d\u591a\u591a\u6307\u6559.<\/span><\/p>\n<p>\u4e00.\u591a\u8fdb\u7a0b\u7a0b\u5e8f\u7684\u7279\u70b9<br \/>\n\u7531\u4e8eUNIX\u7cfb\u7edf\u662f\u5206\u65f6\u591a\u7528\u6237\u7cfb\u7edf, CPU\u6309\u65f6\u95f4\u7247\u5206\u914d\u7ed9\u5404\u4e2a\u7528\u6237\u4f7f\u7528,\u800c\u5728\u5b9e\u8d28\u4e0a\u5e94\u8be5<br \/>\n\u8bf4CPU\u6309\u65f6\u95f4\u7247\u5206\u914d\u7ed9\u5404\u4e2a\u8fdb\u7a0b\u4f7f\u7528,\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u6709\u81ea\u5df1\u7684\u8fd0\u884c\u73af\u5883\u4ee5\u4f7f\u5f97\u5728CPU\u505a\u8fdb\u7a0b<br \/>\n\u5207\u6362\u65f6\u4e0d\u4f1a&#8221;\u5fd8\u8bb0&#8221;\u8be5\u8fdb\u7a0b\u5df2\u8ba1\u7b97\u4e86\u4e00\u534a\u7684&#8221;\u534a\u6210??. \u4ee5DOS\u7684\u6982\u5ff5\u6765\u8bf4, \u8fdb\u7a0b\u7684\u5207\u6362\u90fd<br \/>\n\u662f\u4e00\u6b21&#8221;DOS\u4e2d\u65ad&#8221;\u5904\u7406\u8fc7\u7a0b, \u5305\u62ec\u4e09\u4e2a\u5c42\u6b21:<br \/>\n(1)\u7528\u6237\u6570\u636e\u7684\u4fdd\u5b58: \u5305\u62ec\u6b63\u6587\u6bb5(TEXT), \u6570\u636e\u6bb5(DATA,BSS), \u6808\u6bb5(STACK),<br \/>\n\u5171\u4eab\u5185\u5b58\u6bb5(SHARED MEMORY)\u7684\u4fdd\u5b58.<br \/>\n(2)\u5bc4\u5b58\u5668\u6570\u636e\u7684\u4fdd\u5b58: \u5305\u62ecPC(program counter,\u6307\u5411\u4e0b\u4e00\u6761\u8981\u6267\u884c\u7684\u6307<br \/>\n\u4ee4\u7684\u5730\u5740), PSW(processor status word,\u5904\u7406\u673a\u72b6\u6001\u5b57), SP(stack pointer,\u6808\u6307\u9488),<br \/>\nPCBP(pointer of process control block,\u8fdb\u7a0b\u63a7\u5236\u5757\u6307\u9488), FP(frame<br \/>\npointer,\u6307\u5411\u6808\u4e2d\u4e00\u4e2a\u51fd\u6570\u7684local\u53d8\u91cf\u7684\u9996\u5730\u5740), AP(augument<br \/>\npointer,\u6307\u5411\u6808\u4e2d\u51fd\u6570\u8c03\u7528\u7684\u5b9e\u53c2\u4f4d\u7f6e), ISP(interrupt stack pointer,\u4e2d\u65ad\u6808\u6307\u9488),<br \/>\n\u4ee5\u53ca\u5176\u4ed6\u7684\u901a\u7528\u5bc4\u5b58\u5668\u7b49.<br \/>\n(3)\u7cfb\u7edf\u5c42\u6b21\u7684\u4fdd\u5b58:<br \/>\n\u5305\u62ecproc,u,\u865a\u62df\u5b58\u50a8\u7a7a\u95f4\u7ba1\u7406\u8868\u683c,\u4e2d\u65ad\u5904\u7406\u6808.\u4ee5\u4fbf\u4e8e\u8be5\u8fdb\u7a0b\u518d\u4e00\u6b21\u5f97\u5230CPU\u65f6\u95f4\u7247\u65f6<br \/>\n\u80fd\u6b63\u5e38\u8fd0? \u65e2\u7136\u7cfb\u7edf\u5df2\u7ecf\u5904\u7406\u597d\u6240\u6709\u8fd9\u4e9b\u4e2d\u65ad\u5904\u7406\u7684\u8fc7\u7a0b, \u6211\u4eec\u505a\u7a0b\u5e8f\u8fd8\u6709\u4ec0\u4e48\u8981\u62c5\u5fc3<br \/>\n\u7684\u5462? \u6211\u4eec\u5c3d\u53ef\u4ee5\u4f7f\u7528\u7cfb\u7edf\u63d0\u4f9b\u7684\u591a\u8fdb\u7a0b\u7684\u7279\u70b9, \u8ba9\u51e0\u4e2a\u7a0b\u5e8f\u7cbe\u8bda\u5408\u4f5c,<br \/>\n\u7b80\u5355\u800c\u53c8\u9ad8\u6548\u5730\u628a\u7ed3\u679c\u7ed9\u5b83\u641e\u51fa\u6765.<\/p>\n<p>\u53e6\u5916,UNIX\u7cfb\u7edf\u672c\u8eab\u4e5f\u662f\u7528C\u8bed\u8a00\u5199\u7684\u591a\u8fdb\u7a0b\u7a0b\u5e8f,\u591a\u8fdb\u7a0b\u7f16\u7a0b\u662fUNIX\u7684\u7279\u70b9,\u5f53\u6211\u4eec\u719f\u6089<br \/>\n\u4e86\u591a\u8fdb\u7a0b?\u5c06\u4f1a\u5bf9UNIX\u7cfb\u7edf\u673a\u5236\u6709\u4e00\u4e2a\u8f83\u6df1\u7684\u8ba4\u8bc6.\u9996\u5148\u6211\u4ecb\u7ecd\u4e00\u4e0b\u591a\u8fdb\u7a0b\u7a0b\u5e8f\u7684\u4e00\u4e9b\u7a81<br \/>\n\u51fa\u7684\u7279\u70b9:<br \/>\n1.\u5e76\u884c\u5316<br \/>\n\u4e00\u4ef6\u590d\u6742\u7684\u4e8b\u4ef6\u662f\u53ef\u4ee5\u5206\u89e3\u6210\u82e5\u5e72\u4e2a\u7b80\u5355\u4e8b\u4ef6\u6765\u89e3\u51b3\u7684, \u8fd9\u5728\u7a0b\u5e8f\u5458<br \/>\n\u7684\u5927\u8111\u4e2d\u65e9\u5c31\u5f62\u6210\u4e86\u8fd9\u79cd\u6982\u5ff5, \u9996\u5148\u5c06\u95ee\u9898\u5206\u89e3\u6210\u4e00\u4e2a\u4e2a\u5c0f\u95ee\u9898, \u5c06\u5c0f\u95ee<br \/>\n\u9898\u518d\u7ec6\u5206, \u6700\u540e\u5728\u4e00\u4e2a\u5408\u9002\u7684\u89c4\u6a21\u4e0a\u505a\u6210\u4e00\u4e2a\u51fd\u6570. \u5728\u8f6f\u4ef6\u5de5\u7a0b\u4e2d\u4e5f\u662f\u8fd9<br \/>\n\u4e48\u8bf4\u7684. \u5982\u679c\u6211\u4eec\u4ee5\u56fe\u7684\u65b9\u5f0f\u6765\u601d\u8003, \u4e00\u4e9b\u5c0f\u95ee\u9898\u7684\u8ba1\u7b97\u662f\u53ef\u4ee5\u4e92\u4e0d\u5e72\u6270<br \/>\n\u7684, \u53ef\u4ee5\u540c\u65f6\u5904\u7406, \u800c\u5728\u5173\u952e\u70b9\u5219\u9700\u8981\u7edf\u4e00\u5728\u4e00\u4e2a\u5730\u65b9\u6765\u5904\u7406, \u8fd9\u6837\u7a0b\u5e8f<br \/>\n\u7684\u8fd0\u884c\u5c31\u662f\u5e76\u884c\u7684, \u81f3\u5c11\u4ece\u4eba\u7684\u65f6\u95f4\u89c2\u5ff5\u4e0a\u6765\u8bf4\u662f\u8fd9\u6837\u7684. \u800c\u6bcf\u4e2a\u5c0f\u95ee\u9898<br \/>\n\u7684\u8ba1\u7b97\u53c8\u662f\u8f83\u7b80\u5355\u7684.<br \/>\n2.\u7b80\u5355\u6709\u5e8f<br \/>\n\u8fd9\u6837\u7684\u7a0b\u5e8f\u5bf9\u7a0b\u5e8f\u5458\u6765\u8bf4\u4e0d\u4e9a\u4e8e\u7ba1\u7406\u4e00\u73ed\u4eba, \u7a0b\u5e8f\u5458\u4e3a\u6bcf\u4e2a\u8fdb\u7a0b\u8bbe\u8ba1<br \/>\n\u597d\u76f8\u5e94\u7684\u529f\u80fd, \u5e76\u901a\u8fc7\u4e00\u5b9a\u7684\u901a\u8baf\u673a\u5236\u5c06\u5b83\u4eec\u6709\u673a\u5730\u7ed3\u5408\u5728\u4e00\u8d77, \u5bf9\u6bcf\u4e2a<br \/>\n\u8fdb\u7a0b\u7684\u8bbe\u8ba1\u662f\u7b80\u5355\u7684, \u53ea\u5728\u603b\u63a7\u90e8\u5206\u5c0f\u5fc3\u5e94\u4ed8(\u5176\u5b9e\u4e5f\u662f\u86ee\u7b80\u5355\u7684), \u5c31\u53ef<br \/>\n\u5b8c\u6210\u6574\u4e2a\u7a0b\u5e8f\u7684\u65bd\u5de5.<br \/>\n3.\u4e92\u4e0d\u5e72\u6270<br \/>\n\u8fd9\u4e2a\u7279\u70b9\u662f\u64cd\u4f5c\u7cfb\u7edf\u7684\u7279\u70b9, \u5404\u4e2a\u8fdb\u7a0b\u662f\u72ec\u7acb\u7684, \u4e0d\u4f1a\u4e32\u4f4d.<br \/>\n4.\u4e8b\u52a1\u5316<br \/>\n\u6bd4\u5982\u5728\u4e00\u4e2a\u6570\u636e\u7535\u8bdd\u67e5\u8be2\u7cfb\u7edf\u4e2d, \u5c06\u7a0b\u5e8f\u8bbe\u8ba1\u6210\u4e00\u4e2a\u8fdb\u7a0b\u53ea\u5904\u7406\u4e00\u6b21<br \/>\n\u67e5\u8be2\u5373\u53ef, \u5373\u5b8c\u6210\u4e00\u4e2a\u4e8b\u52a1. \u5f53\u7535\u8bdd\u67e5\u8be2\u5f00\u59cb\u65f6, \u4ea7\u751f\u8fd9\u6837\u4e00\u4e2a\u8fdb\u7a0b\u5bf9\u4ed8<br \/>\n\u8fd9\u6b21\u67e5\u8be2; \u53e6\u4e00\u4e2a\u7535\u8bdd\u8fdb\u6765\u65f6, \u4e3b\u63a7\u7a0b\u5e8f\u53c8\u4ea7\u751f\u4e00\u4e2a\u8fd9\u6837\u7684\u8fdb\u7a0b\u5bf9\u4ed8, \u6bcf<br \/>\n\u4e2a\u8fdb\u7a0b\u5b8c\u6210\u67e5\u8be2\u4efb\u52a1\u540e\u6d88\u5931. \u8fd9\u6837\u7684\u7f16\u7a0b\u591a\u7b80\u5355, \u53ea\u8981\u505a\u4e00\u6b21\u67e5\u8be2\u7684\u7a0b\u5e8f<br \/>\n\u5c31\u53ef\u4ee5\u4e86.<\/p>\n<p>\u4e8c.\u5e38\u7528\u7684\u591a\u8fdb\u7a0b\u7f16\u7a0b\u7684\u7cfb\u7edf\u8c03\u7528<br \/>\n1.fork()<br \/>\n\u529f\u80fd:\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u8fdb\u7a0b.<br \/>\n\u8bed\u6cd5:#include &lt;unistd.h&gt;<br \/>\n#include &lt;sys\/types.h&gt;<br \/>\npid_t fork();<br \/>\n\u8bf4\u660e:\u672c\u7cfb\u7edf\u8c03\u7528\u4ea7\u751f\u4e00\u4e2a\u65b0\u7684\u8fdb\u7a0b, \u53eb\u5b50\u8fdb\u7a0b, \u662f\u8c03\u7528\u8fdb\u7a0b\u7684\u4e00\u4e2a\u590d<br \/>\n\u5236\u54c1. \u8c03\u7528\u8fdb\u7a0b\u53eb\u7236\u8fdb\u7a0b, \u5b50\u8fdb\u7a0b\u7ee7\u627f\u4e86\u7236\u8fdb\u7a0b\u7684\u51e0\u4e4e\u6240\u6709\u7684\u5c5e<br \/>\n\u6027:<br \/>\n. \u5b9e\u9645UID,GID\u548c\u6709\u6548UID,GID.<br \/>\n. \u73af\u5883\u53d8\u91cf.<br \/>\n. \u9644\u52a0GID.<br \/>\n. \u8c03\u7528exec()\u65f6\u7684\u5173\u95ed\u6807\u5fd7.<br \/>\n. UID\u8bbe\u7f6e\u6a21\u5f0f\u6bd4\u7279\u4f4d.<br \/>\n. GID\u8bbe\u7f6e\u6a21\u5f0f\u6bd4\u7279\u4f4d.<br \/>\n. \u8fdb\u7a0b\u7ec4\u53f7.<br \/>\n. \u4f1a\u8bddID.<br \/>\n. \u63a7\u5236\u7ec8\u7aef.<br \/>\n. \u5f53\u524d\u5de5\u4f5c\u76ee\u5f55.<br \/>\n. \u6839\u76ee\u5f55.<br \/>\n. \u6587\u4ef6\u521b\u5efa\u63a9\u7801UMASK.<br \/>\n. \u6587\u4ef6\u957f\u5ea6\u9650\u5236ULIMIT.<br \/>\n. \u9884\u5b9a\u503c, \u5982\u4f18\u5148\u7ea7\u548c\u4efb\u4f55\u5176\u4ed6\u7684\u8fdb\u7a0b\u9884\u5b9a\u53c2\u6570, \u6839\u636e\u79cd\u7c7b\u4e0d\u540c<br \/>\n\u51b3\u5b9a\u662f\u5426\u53ef\u4ee5\u7ee7\u627f.<br \/>\n. \u8fd8\u6709\u4e00\u4e9b\u5176\u5b83\u5c5e\u6027.<br \/>\n\u4f46\u5b50\u8fdb\u7a0b\u4e5f\u6709\u4e0e\u7236\u8fdb\u7a0b\u4e0d\u540c\u7684\u5c5e\u6027:<br \/>\n. \u8fdb\u7a0b\u53f7, \u5b50\u8fdb\u7a0b\u53f7\u4e0d\u540c\u4e0e\u4efb\u4f55\u4e00\u4e2a\u6d3b\u52a8\u7684\u8fdb\u7a0b\u7ec4\u53f7.<br \/>\n. \u7236\u8fdb\u7a0b\u53f7.<br \/>\n. \u5b50\u8fdb\u7a0b\u7ee7\u627f\u7236\u8fdb\u7a0b\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u6216\u6d41\u65f6, \u5177\u6709\u81ea\u5df1\u7684\u4e00\u4e2a\u62f7\u8d1d<br \/>\n\u5e76\u4e14\u4e0e\u7236\u8fdb\u7a0b\u548c\u5176\u5b83\u5b50\u8fdb\u7a0b\u5171\u4eab\u8be5<span class=\"t_tag\" onclick=\"tagshow(event)\">\u8d44\u6e90<\/span>.<br \/>\n. \u5b50\u8fdb\u7a0b\u7684\u7528\u6237\u65f6\u95f4\u548c\u7cfb\u7edf\u65f6\u95f4\u88ab\u521d\u59cb\u5316\u4e3a0.<br \/>\n. \u5b50\u8fdb\u7a0b\u7684\u8d85\u65f6\u65f6\u949f\u8bbe\u7f6e\u4e3a0.<br \/>\n. \u5b50\u8fdb\u7a0b\u7684\u4fe1\u53f7\u5904\u7406\u51fd\u6570\u6307\u9488\u7ec4\u7f6e\u4e3a\u7a7a.<br \/>\n. \u5b50\u8fdb\u7a0b\u4e0d\u7ee7\u627f\u7236\u8fdb\u7a0b\u7684\u8bb0\u5f55\u9501.<br \/>\n\u8fd4\u56de\u503c: \u8c03\u7528\u6210\u529f\u5219\u5bf9\u5b50\u8fdb\u7a0b\u8fd4\u56de0, \u5bf9\u7236\u8fdb\u7a0b\u8fd4\u56de\u5b50\u8fdb\u7a0b\u53f7, \u8fd9\u4e5f\u662f<br \/>\n\u6700\u65b9\u4fbf\u7684\u533a\u5206\u7236\u5b50\u8fdb\u7a0b\u7684\u65b9\u6cd5. \u82e5\u8c03\u7528\u5931\u8d25\u5219\u8fd4\u56de-1\u7ed9\u7236\u8fdb\u7a0b,<br \/>\n\u5b50\u8fdb\u7a0b\u4e0d\u751f\u6210.<br \/>\n\u4f8b\u5b50:pid_t pid;<br \/>\nif ((pid=fork())&gt;0) {<br \/>\n\/*\u7236\u8fdb\u7a0b\u5904\u7406\u8fc7\u7a0b*\/<br \/>\n}<br \/>\nelse if (pid==0) {<br \/>\n\/*\u5b50\u8fdb\u7a0b\u5904\u7406\u8fc7\u7a0b*\/<br \/>\nexit(0); \/*\u6ce8\u610f\u5b50\u8fdb\u7a0b\u5fc5\u987b\u7528exit()\u9000\u51fa\u8fd0\u884c*\/<br \/>\n}<br \/>\nelse {<br \/>\nprintf(&#8220;fork error<br \/>\n&#8220;);<br \/>\nexit(0);<br \/>\n}<br \/>\n2.system()<br \/>\n\u529f\u80fd:\u4ea7\u751f\u4e00\u4e2a\u65b0\u7684\u8fdb\u7a0b, \u5b50\u8fdb\u7a0b\u6267\u884c\u6307\u5b9a\u7684\u547d\u4ee4.<br \/>\n\u8bed\u6cd5:#include &lt;stdio.h&gt;<br \/>\n#include &lt;stdlib.h&gt;<br \/>\nint system(string)<br \/>\nchar *string;<br \/>\n\u8bf4\u660e:\u672c\u8c03\u7528\u5c06\u53c2\u6570string\u4f20\u9012\u7ed9\u4e00\u4e2a\u547d\u4ee4\u89e3\u91ca\u5668(\u4e00\u822c\u4e3ash)\u6267\u884c, \u5373<br \/>\nstring\u88ab\u89e3\u91ca\u4e3a\u4e00\u6761\u547d\u4ee4, \u7531sh\u6267\u884c\u8be5\u547d\u4ee4.\u82e5\u53c2\u6570string\u4e3a\u4e00<br \/>\n\u4e2a\u7a7a\u6307\u9488\u5219\u4e3a\u68c0\u67e5\u547d\u4ee4\u89e3\u91ca\u5668\u662f\u5426\u5b58\u5728.<br \/>\n\u8be5\u547d\u4ee4\u53ef\u4ee5\u540c\u547d\u4ee4\u884c\u547d\u4ee4\u76f8\u540c\u5f62\u5f0f, \u4f46\u7531\u4e8e\u547d\u4ee4\u505a\u4e3a\u4e00\u4e2a\u53c2\u6570\u653e<br \/>\n\u5728\u7cfb\u7edf\u8c03\u7528\u4e2d, \u5e94\u6ce8\u610f\u7f16\u8bd1\u65f6\u5bf9\u7279\u6b8a\u610f\u4e49\u5b57\u7b26\u7684\u5904\u7406. \u547d\u4ee4\u7684\u67e5<br \/>\n\u627e\u662f\u6309PATH\u73af\u5883\u53d8\u91cf\u7684\u5b9a\u4e49\u7684. \u547d\u4ee4\u6240\u751f\u6210\u7684\u540e\u679c\u4e00\u822c\u4e0d\u4f1a\u5bf9\u7236<br \/>\n\u8fdb\u7a0b\u9020\u6210\u5f71\u54cd.<br \/>\n\u8fd4\u56de\u503c:\u5f53\u53c2\u6570\u4e3a\u7a7a\u6307\u9488\u65f6, \u53ea\u6709\u5f53\u547d\u4ee4\u89e3\u91ca\u5668\u6709\u6548\u65f6\u8fd4\u56de\u503c\u4e3a\u975e\u96f6.<br \/>\n\u82e5\u53c2\u6570\u4e0d\u4e3a\u7a7a\u6307\u9488, \u8fd4\u56de\u503c\u4e3a\u8be5\u547d\u4ee4\u7684\u8fd4\u56de\u72b6\u6001(\u540cwaitpid())<br \/>\n\u7684\u8fd4\u56de\u503c. \u547d\u4ee4\u65e0\u6548\u6216\u8bed\u6cd5\u9519\u8bef\u5219\u8fd4\u56de\u975e\u96f6\u503c,\u6240\u6267\u884c\u7684\u547d\u4ee4\u88ab<br \/>\n\u7ec8\u6b62. \u5176\u4ed6\u60c5\u51b5\u5219\u8fd4\u56de-1.<br \/>\n\u4f8b\u5b50:char command[81];<br \/>\nint i;<br \/>\nfor (i=1;i&lt;8;i++) {<br \/>\nsprintf(command,&#8221;ps t tty%02i&#8221;,i);<br \/>\nsystem(command);<br \/>\n}<br \/>\n3.exec() \u529f\u80fd:\u6267\u884c\u4e00\u4e2a\u6587\u4ef6<br \/>\n\u8bed\u6cd5:#include &lt;unistd.h&gt;<br \/>\nint execl(path,arg0,&#8230;,argn,(char*)0)<br \/>\nchar *path,*arg0,&#8230;,*argn;<\/p>\n<p>int execv(path,argv)<br \/>\nchar *path,*argv[];<\/p>\n<p>int execle(path,arg0,&#8230;,argn,(char*)0,envp)<br \/>\nchar *path,*arg0,&#8230;,*argn,*envp[];<\/p>\n<p>int execve(path,argv,envp)<br \/>\nchar *path,*argv[],*envp[];<\/p>\n<p>int execvp(file,argv)<br \/>\nchar *file,*argv[];<br \/>\n\u8bf4\u660e:\u8fd9\u662f\u4e00\u4e2a\u7cfb\u7edf\u8c03\u7528\u65cf, \u7528\u4e8e\u5c06\u4e00\u4e2a\u65b0\u7684\u7a0b\u5e8f\u8c03\u5165\u672c\u8fdb\u7a0b\u6240\u5360\u7684\u5185<br \/>\n\u5b58, \u5e76\u8986\u76d6\u4e4b, \u4ea7\u751f\u65b0\u7684\u5185\u5b58\u8fdb\u7a0b\u6620\u8c61. \u65b0\u7684\u7a0b\u5e8f\u53ef\u4ee5\u662f\u53ef\u6267\u884c<br \/>\n\u6587\u4ef6\u6216SHELL\u6279\u547d\u4ee4.<br \/>\n\u5f53C\u7a0b\u5e8f\u88ab\u6267\u884c\u65f6,\u662f\u5982\u4e0b\u8c03\u7528\u7684:<br \/>\nmain(int argc,char *argv[],char *envp[]);<br \/>\nargc\u662f\u53c2\u6570\u4e2a\u6570,\u662f\u5404\u4e2a\u53c2\u6570\u5b57\u7b26\u4e32\u6307\u9488\u6570\u7ec4,envp\u662f\u65b0\u8fdb\u7a0b\u7684\u73af<br \/>\n\u5883\u53d8\u91cf\u5b57\u7b26\u4e32\u7684\u6307\u9488\u6570\u7ec4.argc\u81f3\u5c11\u4e3a1,argv[0]\u4e3a\u7a0b\u5e8f\u6587\u4ef6\u540d,<br \/>\n\u6240\u4ee5,\u5728\u4e0a\u9762\u7684exec\u7cfb\u7edf\u8c03\u7528\u65cf\u4e2d,path\u4e3a\u65b0\u8fdb\u7a0b\u6587\u4ef6\u7684\u8def\u5f84\u540d,<br \/>\nfile\u4e3a\u65b0\u8fdb\u7a0b\u6587\u4ef6\u540d,\u82e5file\u4e0d\u662f\u5168\u8def\u5f84\u540d,\u7cfb\u7edf\u8c03\u7528\u4f1a\u6309PATH\u73af<br \/>\n\u5883\u53d8\u91cf\u81ea\u52a8\u627e\u5bf9\u5e94\u7684\u53ef\u6267\u884c\u6587\u4ef6\u8fd0\u884c.\u82e5\u65b0\u8fdb\u7a0b\u6587\u4ef6\u4e0d\u662f\u4e00\u4e2a\u53ef<br \/>\n\u6267\u884c\u7684\u76ee\u6807\u6587\u4ef6(\u5982\u6279\u5904\u7406\u6587\u4ef6),\u5219execlp()\u548cexecvp()\u4f1a\u5c06\u8be5<br \/>\n\u6587\u4ef6\u5185\u5bb9\u4f5c\u4e3a\u4e00\u4e2a\u547d\u4ee4\u89e3\u91ca\u5668\u7684\u6807\u51c6\u8f93\u5165\u5f62\u6210system().<br \/>\narg0,&#8230;\u7b49\u6307\u9488\u6307\u5411&amp;#39;\ufffd&amp;#39;\u7ed3\u675f\u7684\u5b57\u7b26\u4e32,\u7ec4\u6210\u65b0\u8fdb\u7a0b\u7684\u6709\u6548\u53c2\u6570,<br \/>\n\u4e14\u8be5\u53c2\u6570\u5217\u8868\u4ee5\u4e00\u4e2a\u7a7a\u6307\u9488\u7ed3\u675f.\u53cd\u8fc7\u6765,arg0\u81f3\u5c11\u5fc5\u987b\u5b58\u5728\u5e76\u6307<br \/>\n\u5411\u65b0\u8fdb\u7a0b\u6587\u4ef6\u540d\u6216\u8def\u5f84\u540d.<br \/>\n\u540c\u6837,argv\u662f\u5b57\u7b26\u4e32\u6307\u9488\u6570\u7ec4,argv[0]\u6307\u5411\u65b0\u8fdb\u7a0b\u6587\u4ef6\u540d\u6216\u8def\u5f84<br \/>\n\u540d,\u5e76\u4ee5\u4e00\u7a7a\u6307\u9488\u7ed3\u675f.<br \/>\nenvp\u662f\u4e00\u4e2a\u5b57\u7b26\u4e32\u6307\u9488\u6570\u7ec4,\u4ee5\u7a7a\u6307\u9488\u7ed3\u675f,\u8fd9\u4e9b\u5b57\u7b26\u4e32\u7ec4\u6210\u65b0\u8fdb<br \/>\n\u7a0b\u7684\u73af\u5883.<br \/>\n\u5728\u8c03\u7528\u8fd9\u4e9b\u7cfb\u7edf\u8c03\u7528\u524d\u6253\u5f00\u7684\u6587\u4ef6\u6307\u9488\u5bf9\u65b0\u8fdb\u7a0b\u6765\u8bf4\u4e5f\u662f\u6253\u5f00\u7684,<br \/>\n\u9664\u975e\u5b83\u5df2\u5b9a\u4e49\u4e86close-on-exec\u6807\u5fd7.\u6253\u5f00\u7684\u6587\u4ef6\u6307\u9488\u5728\u65b0\u8fdb\u7a0b\u4e2d<br \/>\n\u4fdd\u6301\u4e0d\u53d8,\u6240\u6709\u76f8\u5173\u7684\u6587\u4ef6\u9501\u4e5f\u88ab\u4fdd\u7559.<br \/>\n\u8c03\u7528\u8fdb\u7a0b\u8bbe\u7f6e\u5e76\u6b63\u88ab\u6355\u4fd8\u7684\u4fe1\u53f7\u5728\u65b0\u8fdb\u7a0b\u4e2d\u88ab\u6062\u590d\u4e3a\u7f3a\u7701\u8bbe\u7f6e,<br \/>\n\u5176\u5b83\u7684\u5219\u4fdd\u6301\u4e0d\u53d8.<br \/>\n\u65b0\u8fdb\u7a0b\u542f\u52a8\u65f6\u6309\u6587\u4ef6\u7684SUID\u548cSGID\u8bbe\u7f6e\u5b9a\u4e49\u6587\u4ef6\u7684UID\u548cGID\u4e3a\u6709<br \/>\n\u6548UID\u548cGID.<br \/>\n\u65b0\u8fdb\u7a0b\u8fd8\u7ee7\u627f\u4e86\u5982\u4e0b\u5c5e\u6027:<br \/>\n. \u9644\u52a0GID.<br \/>\n. \u8fdb\u7a0b\u53f7.<br \/>\n. \u7236\u8fdb\u7a0b\u53f7.<br \/>\n. \u8fdb\u7a0b\u7ec4\u53f7.<br \/>\n. \u4f1a\u8bdd\u53f7.<br \/>\n. \u63a7\u5236\u7ec8\u7aef.<br \/>\n. alarm\u65f6\u949f\u4fe1\u53f7\u5269\u4e0b\u7684\u65f6\u95f4.<br \/>\n. \u5f53\u524d\u5de5\u4f5c\u76ee\u5f55.<br \/>\n. \u6839\u76ee\u5f55.<br \/>\n. \u6587\u4ef6\u521b\u5efa\u63a9\u7801.<br \/>\n. \u8d44\u6e90\u9650\u5236.<br \/>\n. \u7528\u6237\u65f6\u95f4,\u7cfb\u7edf\u65f6\u95f4,\u5b50\u8fdb\u7a0b\u7528\u6237\u65f6\u95f4,\u5b50\u8fdb\u7a0b\u7cfb\u7edf\u65f6\u95f4.<br \/>\n. \u8bb0\u5f55\u9501.<br \/>\n. \u8fdb\u7a0b\u4fe1\u53f7\u63a9\u7801.<br \/>\n. \u4fe1\u53f7\u5c4f\u853d.<br \/>\n. \u4f18\u5148\u7ea7.<br \/>\n. \u9884\u5b9a\u503c.<br \/>\n\u8c03\u7528\u6210\u529f\u540e,\u7cfb\u7edf\u8c03\u7528\u4fee\u6539\u65b0\u8fdb\u7a0b\u6587\u4ef6\u7684\u6700\u65b0\u8bbf\u95ee\u65f6\u95f4.<br \/>\n\u8fd4\u56de\u503c:\u8be5\u7cfb\u7edf\u8c03\u7528\u4e00\u822c\u4e0d\u4f1a\u6709\u6210\u529f\u8fd4\u56de\u503c, \u56e0\u4e3a\u539f\u6765\u7684\u8fdb\u7a0b\u5df2\u8361\u7136\u65e0<br \/>\n\u5b58.<br \/>\n\u4f8b\u5b50:printf(&#8220;now this process will be ps command<br \/>\n&#8220;);<br \/>\nexecl(&#8220;\/bin\/ps&#8221;,&#8221;ps&#8221;,&#8221;-ef&#8221;,NULL);<br \/>\n4.popen()<br \/>\n\u529f\u80fd:\u521d\u59cb\u5316\u4ece\/\u5230\u4e00\u4e2a\u8fdb\u7a0b\u7684\u7ba1\u9053.<br \/>\n\u8bed\u6cd5:#include &lt;stdio.h&gt;<br \/>\nFILE *popen(command,type)<br \/>\nchar *command,type;<br \/>\n\u8bf4\u660e:\u672c\u7cfb\u7edf\u8c03\u7528\u5728\u8c03\u7528\u8fdb\u7a0b\u548c\u88ab\u6267\u884c\u547d\u4ee4\u95f4\u521b\u5efa\u4e00\u4e2a\u7ba1\u9053.<br \/>\n\u53c2\u6570command\u505a\u4e3a\u88ab\u6267\u884c\u7684\u547d\u4ee4\u884c.type\u505a\u4e3aI\/O\u6a21\u5f0f,&#8221;r&#8221;\u4e3a\u4ece\u88ab<br \/>\n\u6267\u884c\u547d\u4ee4\u8bfb,&#8221;w&#8221;\u4e3a\u5411\u88ab\u6267\u884c\u547d\u4ee4\u5199.\u8fd4\u56de\u4e00\u4e2a\u6807\u51c6\u6d41\u6307\u9488,\u505a\u4e3a\u7ba1<br \/>\n\u9053\u63cf\u8ff0\u7b26,\u5411\u88ab\u6267\u884c\u547d\u4ee4\u8bfb\u6216\u5199\u6570\u636e(\u505a\u4e3a\u88ab\u6267\u884c\u547d\u4ee4\u7684STDIN\u6216<br \/>\nSTDOUT)\u8be5\u7cfb\u7edf\u8c03\u7528\u53ef\u4ee5\u7528\u6765\u5728\u7a0b\u5e8f\u4e2d\u8c03\u7528\u7cfb\u7edf\u547d\u4ee4,\u5e76\u53d6\u5f97\u547d\u4ee4<br \/>\n\u7684\u8f93\u51fa\u4fe1\u606f\u6216\u8005\u5411\u547d\u4ee4\u8f93\u5165\u4fe1\u606f.<br \/>\n\u8fd4\u56de\u503c:\u4e0d\u6210\u529f\u5219\u8fd4\u56deNULL,\u6210\u529f\u5219\u8fd4\u56de\u7ba1\u9053\u7684\u6587\u4ef6\u6307\u9488.<br \/>\n5.pclose()<br \/>\n\u529f\u80fd:\u5173\u95ed\u5230\u4e00\u4e2a\u8fdb\u7a0b\u7684\u7ba1\u9053.<br \/>\n\u8bed\u6cd5:#include &lt;stdio.h&gt;<br \/>\nint pclose(strm)<br \/>\nFILE *strm;<br \/>\n\u8bf4\u660e:\u672c\u7cfb\u7edf\u8c03\u7528\u7528\u4e8e\u5173\u95ed\u7531popen()\u6253\u5f00\u7684\u7ba1\u9053,\u5e76\u4f1a\u7b49\u5f85\u7531popen()<br \/>\n\u6fc0\u6d3b\u7684\u547d\u4ee4\u6267\u884c\u7ed3\u675f\u540e,\u5173\u95ed\u7ba1\u9053\u540e\u8bfb\u53d6\u547d\u4ee4\u8fd4\u56de\u7801.<br \/>\n\u8fd4\u56de\u503c:\u82e5\u5173\u95ed\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u4e0d\u662f\u7531popen()\u6253\u5f00\u7684,\u5219\u8fd4\u56de-1.<br \/>\n\u4f8b\u5b50:printf(&#8220;now this process will call popen system call<br \/>\n&#8220;);<br \/>\nFILE * fd;<br \/>\nif ((fd=popen(&#8220;ps -ef&#8221;,&#8221;r&#8221;))==NULL) {<br \/>\nprintf(&#8220;call popen failed<br \/>\n&#8220;);<br \/>\nreturn;<br \/>\n}<br \/>\nelse {<br \/>\nchar str[80];<br \/>\nwhile (fgets(str,80,fd)!=NULL)<br \/>\nprintf(&#8220;%s<br \/>\n&#8220;,str);<br \/>\n}<br \/>\npclose(fd);<br \/>\n6.wait()<br \/>\n\u529f\u80fd:\u7b49\u5f85\u4e00\u4e2a\u5b50\u8fdb\u7a0b\u8fd4\u56de\u5e76\u4fee\u6539\u72b6\u6001<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/wait.h&gt;<br \/>\npid_t wait(stat_loc)<br \/>\nint *stat_loc;<br \/>\n\u8bf4\u660e:\u5141\u8bb8\u8c03\u7528\u8fdb\u7a0b\u53d6\u5f97\u5b50\u8fdb\u7a0b\u7684\u72b6\u6001\u4fe1\u606f.\u8c03\u7528\u8fdb\u7a0b\u5c06\u4f1a\u6302\u8d77\u76f4\u5230\u5176<br \/>\n\u4e00\u4e2a\u5b50\u8fdb\u7a0b\u7ec8\u6b62.<br \/>\n\u8fd4\u56de\u503c:\u7b49\u5f85\u5230\u4e00\u4e2a\u5b50\u8fdb\u7a0b\u8fd4\u56de\u65f6,\u8fd4\u56de\u503c\u4e3a\u8be5\u5b50\u8fdb\u7a0b\u53f7,\u5426\u5219\u8fd4\u56de\u503c\u4e3a<br \/>\n-1.\u540c\u65f6stat_loc\u8fd4\u56de\u5b50\u8fdb\u7a0b\u7684\u8fd4\u56de\u503c.<br \/>\n\u4f8b\u5b50:\/*\u7236\u8fdb\u7a0b*\/<br \/>\nif (fork()&gt;0) {<br \/>\nwait((int *)0);<br \/>\n\/*\u7236\u8fdb\u7a0b\u7b49\u5f85\u5b50\u8fdb\u7a0b\u7684\u8fd4\u56de*\/<br \/>\n}<br \/>\nelse {<br \/>\n\/*\u5b50\u8fdb\u7a0b\u5904\u7406\u8fc7\u7a0b*\/<br \/>\nexit(0);<br \/>\n}<br \/>\n7.waitpid()<br \/>\n\u529f\u80fd:\u7b49\u5f85\u6307\u5b9a\u8fdb\u7a0b\u53f7\u7684\u5b50\u8fdb\u7a0b\u7684\u8fd4\u56de\u5e76\u4fee\u6539\u72b6\u6001<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/wait.h&gt;<br \/>\npid_t waitpid(pid,stat_loc,options)<br \/>\npid_t pid;<br \/>\nint *stat_loc,options;<br \/>\n\u8bf4\u660e:\u5f53pid\u7b49\u4e8e-1,options\u7b49\u4e8e0\u65f6,\u8be5\u7cfb\u7edf\u8c03\u7528\u7b49\u540c\u4e8ewait().\u5426\u5219\u8be5<br \/>\n\u7cfb\u7edf\u8c03\u7528\u7684\u884c\u4e3a\u7531\u53c2\u6570pid\u548coptions\u51b3\u5b9a.<br \/>\npid\u6307\u5b9a\u4e86\u4e00\u7ec4\u7236\u8fdb\u7a0b\u8981\u6c42\u77e5\u9053\u5176\u72b6\u6001\u7684\u5b50\u8fdb\u7a0b:<br \/>\n-1:\u8981\u6c42\u77e5\u9053\u4efb\u4f55\u4e00\u4e2a\u5b50\u8fdb\u7a0b\u7684\u8fd4\u56de\u72b6\u6001.<br \/>\n&gt;0:\u8981\u6c42\u77e5\u9053\u8fdb\u7a0b\u53f7\u4e3apid\u503c\u7684\u5b50\u8fdb\u7a0b\u7684\u72b6\u6001.<br \/>\n&lt;-1:\u8981\u6c42\u77e5\u9053\u8fdb\u7a0b\u7ec4\u53f7\u4e3apid\u7684\u7edd\u5bf9\u503c\u7684\u5b50\u8fdb\u7a0b\u7684\u72b6\u6001.<br \/>\noptions\u53c2\u6570\u4e3a\u4ee5\u6bd4\u7279\u65b9\u5f0f\u8868\u793a\u7684\u6807\u5fd7\u4ee5\u6216\u8fd0\u7b97\u7ec4\u6210\u7684\u4f4d\u56fe,\u6bcf\u4e2a<br \/>\n\u6807\u5fd7\u4ee5\u5b57\u8282\u4e2d\u67d0\u4e2a\u6bd4\u7279\u7f6e1\u8868\u793a:<br \/>\nWUNTRACED:\u62a5\u544a\u4efb\u4f55\u672a\u77e5\u800c\u53c8\u5df2\u505c\u6b62\u8fd0\u884c\u7684\u6307\u5b9a\u8fdb\u7a0b\u53f7\u7684\u5b50\u8fdb<br \/>\n\u7a0b\u7684\u72b6\u6001.\u8be5\u5b50\u8fdb\u7a0b\u7684\u72b6\u6001\u81ea\u505c\u6b62\u8fd0\u884c\u65f6\u8d77\u5c31\u6ca1\u6709\u88ab\u62a5\u544a \u8fc7.<br \/>\nWCONTINUED:\u62a5\u544a\u4efb\u4f55\u7ee7\u7eed\u8fd0\u884c\u7684\u6307\u5b9a\u8fdb\u7a0b\u53f7\u7684\u5b50\u8fdb\u7a0b\u7684\u72b6\u6001,<br \/>\n\u8be5\u5b50\u8fdb\u7a0b\u7684\u72b6\u6001\u81ea\u7ee7\u7eed\u8fd0\u884c\u8d77\u5c31\u6ca1\u6709\u88ab\u62a5\u544a\u8fc7.<br \/>\nWHOHANG:\u82e5\u8c03\u7528\u672c\u7cfb\u7edf\u8c03\u7528\u65f6,\u6307\u5b9a\u8fdb\u7a0b\u53f7\u7684\u5b50\u8fdb\u7a0b\u7684\u72b6\u6001\u76ee<br \/>\n\u524d\u5e76\u4e0d\u662f\u7acb\u5373\u6709\u6548\u7684(\u5373\u53ef\u88ab\u7acb\u5373\u8bfb\u53d6\u7684),\u8c03\u7528\u8fdb\u7a0b\u5e76\u88ab \u6682\u505c\u6267\u884c.<br \/>\nWNOWAIT:\u4fdd\u6301\u5c06\u5176\u72b6\u6001\u8bbe\u7f6e\u5728stat_loc\u7684\u8fdb\u7a0b\u5728\u53ef\u7b49\u5f85\u72b6\u6001.<br \/>\n\u8be5\u8fdb\u7a0b\u5c06\u7b49\u5f85\u76f4\u5230\u4e0b\u6b21\u88ab\u8981\u6c42\u5176\u8fd4\u56de\u72b6\u6001\u503c.<br \/>\n\u8fd4\u56de\u503c:\u7b49\u5f85\u5230\u4e00\u4e2a\u5b50\u8fdb\u7a0b\u8fd4\u56de\u65f6,\u8fd4\u56de\u503c\u4e3a\u8be5\u5b50\u8fdb\u7a0b\u53f7,\u5426\u5219\u8fd4\u56de\u503c\u4e3a 1.<br \/>\n\u540c\u65f6stat_loc\u8fd4\u56de\u5b50\u8fdb\u7a0b\u7684\u8fd4\u56de\u503c.<br \/>\n\u4f8b\u5b50:pid_t pid;<br \/>\nint stat_loc; \/*\u7236\u8fdb\u7a0b*\/<br \/>\nif ((pid=&#8221;fork())&#8221;&gt;0) {<br \/>\nwaitpid(pid,&amp;stat_loc,0);<br \/>\n\/*\u7236\u8fdb\u7a0b\u7b49\u5f85\u8fdb\u7a0b\u53f7\u4e3apid\u7684\u5b50\u8fdb\u7a0b\u7684\u8fd4\u56de*\/<br \/>\n}<br \/>\nelse {<br \/>\n\/*\u5b50\u8fdb\u7a0b\u7684\u5904\u7406\u8fc7\u7a0b*\/<br \/>\nexit(1);<br \/>\n}<br \/>\n\/*\u7236\u8fdb\u7a0b*\/<br \/>\nprintf(&#8220;stat_loc is [%d]<br \/>\n&#8220;,stat_loc);<br \/>\n\/*\u5b57\u7b26\u4e32&#8221;stat_loc is [1]&#8221;\u5c06\u88ab\u6253\u5370\u51fa\u6765*\/<br \/>\n8.setpgrp()<br \/>\n\u529f\u80fd:\u8bbe\u7f6e\u8fdb\u7a0b\u7ec4\u53f7\u548c\u4f1a\u8bdd\u53f7.<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\npid_t setpgrp()<br \/>\n\u8bf4\u660e:\u82e5\u8c03\u7528\u8fdb\u7a0b\u4e0d\u662f\u4f1a\u8bdd\u9996\u8fdb\u7a0b.\u5c06\u8fdb\u7a0b\u7ec4\u53f7\u548c\u4f1a\u8bdd\u53f7\u90fd\u8bbe\u7f6e\u4e3a\u4e0e\u5b83<br \/>\n\u7684\u8fdb\u7a0b\u53f7\u76f8\u7b49.\u5e76\u91ca\u653e\u8c03\u7528\u8fdb\u7a0b\u7684\u63a7\u5236\u7ec8\u7aef.<br \/>\n\u8fd4\u56de\u503c:\u8c03\u7528\u6210\u529f\u540e,\u8fd4\u56de\u65b0\u7684\u8fdb\u7a0b\u7ec4\u53f7.<br \/>\n\u4f8b\u5b50:\/*\u7236\u8fdb\u7a0b\u5904\u7406*\/<br \/>\nif (fork()&gt;0) {<br \/>\n\/*\u7236\u8fdb\u7a0b\u5904\u7406*\/<br \/>\n}<br \/>\nelse {<br \/>\nsetpgrp();<br \/>\n\/*\u5b50\u8fdb\u7a0b\u7684\u8fdb\u7a0b\u7ec4\u53f7\u5df2\u4fee\u6539\u6210\u4e0e\u5b83\u7684\u8fdb\u7a0b\u53f7\u76f8\u540c*\/<br \/>\nexit(0);<br \/>\n}<br \/>\n9.exit()<br \/>\n\u529f\u80fd:\u7ec8\u6b62\u8fdb\u7a0b.<br \/>\n\u8bed\u6cd5:#include &lt;stdlib.h&gt;<br \/>\nvoid exit(status)<br \/>\nint status;<br \/>\n\u8bf4\u660e:\u8c03\u7528\u8fdb\u7a0b\u88ab\u8be5\u7cfb\u7edf\u8c03\u7528\u7ec8\u6b62.\u5f15\u8d77\u9644\u52a0\u7684\u5904\u7406\u5728\u8fdb\u7a0b\u88ab\u7ec8\u6b62\u524d\u5168<br \/>\n\u90e8\u7ed3\u675f.<br \/>\n\u8fd4\u56de\u503c:\u65e0<br \/>\n10.signal()<br \/>\n\u529f\u80fd:\u4fe1\u53f7\u7ba1\u7406\u529f\u80fd<br \/>\n\u8bed\u6cd5:#include &lt;signal.h&gt;<br \/>\nvoid (*signal(sig,disp))(int)<br \/>\nint sig;<br \/>\nvoid (*disp)(int);<\/p>\n<p>void (*sigset(sig,disp))(int)<br \/>\nint sig;<br \/>\nvoid (*disp)(int);<\/p>\n<p>int sighold(sig)<br \/>\nint sig;<\/p>\n<p>int sigrelse(sig)<br \/>\nint sig;<\/p>\n<p>int sigignore(sig)<br \/>\nint sig;<\/p>\n<p>int sigpause(sig)<br \/>\nint sig;<br \/>\n\u8bf4\u660e:\u8fd9\u4e9b\u7cfb\u7edf\u8c03\u7528\u63d0\u4f9b\u4e86\u5e94\u7528\u7a0b\u5e8f\u5bf9\u6307\u5b9a\u4fe1\u53f7\u7684\u7b80\u5355\u7684\u4fe1\u53f7\u5904\u7406.<br \/>\nsignal()\u548csigset()\u7528\u4e8e\u4fee\u6539\u4fe1\u53f7\u5b9a\u4f4d.\u53c2\u6570sig\u6307\u5b9a\u4fe1\u53f7(\u9664\u4e86<br \/>\nSIGKILL\u548cSIGSTOP,\u8fd9\u4e24\u79cd\u4fe1\u53f7\u7531\u7cfb\u7edf\u5904\u7406,\u7528\u6237\u7a0b\u5e8f\u4e0d\u80fd\u6355\u6349\u5230).<br \/>\ndisp\u6307\u5b9a\u65b0\u7684\u4fe1\u53f7\u5b9a\u4f4d,\u5373\u65b0\u7684\u4fe1\u53f7\u5904\u7406\u51fd\u6570\u6307\u9488.\u53ef\u4ee5\u4e3a<br \/>\nSIG_IGN,SIG_DFL\u6216\u4fe1\u53f7\u53e5\u67c4\u5730\u5740.<br \/>\n\u82e5\u4f7f\u7528signal(),disp\u662f\u4fe1\u53f7\u53e5\u67c4\u5730\u5740,sig\u4e0d\u80fd\u4e3aSIGILL,SIGTRAP<br \/>\n\u6216SIGPWR,\u6536\u5230\u8be5\u4fe1\u53f7\u65f6,\u7cfb\u7edf\u9996\u5148\u5c06\u91cd\u7f6esig\u7684\u4fe1\u53f7\u53e5\u67c4\u4e3aSIG_DFL,<br \/>\n\u7136\u540e\u6267\u884c\u4fe1\u53f7\u53e5\u67c4.<br \/>\n\u82e5\u4f7f\u7528sigset(),disp\u662f\u4fe1\u53f7\u53e5\u67c4\u5730\u5740,\u8be5\u4fe1\u53f7\u65f6,\u7cfb\u7edf\u9996\u5148\u5c06\u8be5<br \/>\n\u4fe1\u53f7\u52a0\u5165\u8c03\u7528\u8fdb\u7a0b\u7684\u4fe1\u53f7\u63a9\u7801\u4e2d,\u7136\u540e\u6267\u884c\u4fe1\u53f7\u53e5\u67c4.\u5f53\u4fe1\u53f7\u53e5\u67c4<br \/>\n\u8fd0\u884c\u7ed3\u675f<br \/>\n\u540e,\u7cfb\u7edf\u5c06\u6062\u590d\u8c03\u7528\u8fdb\u7a0b\u7684\u4fe1\u53f7\u63a9\u7801\u4e3a\u4fe1\u53f7\u6536\u5230\u524d\u7684\u72b6\u6001.\u53e6\u5916,<br \/>\n\u4f7f\u7528sigset()\u65f6,disp\u4e3aSIG_HOLD,\u5219\u8be5\u4fe1\u53f7\u5c06\u4f1a\u52a0\u5165\u8c03\u7528\u8fdb\u7a0b\u7684<br \/>\n\u4fe1\u53f7\u63a9\u7801\u4e2d\u800c\u4fe1\u53f7\u7684\u5b9a\u4f4d\u4e0d\u53d8.<br \/>\nsighold()\u5c06\u4fe1\u53f7\u52a0\u5165\u8c03\u7528\u8fdb\u7a0b\u7684\u4fe1\u53f7\u63a9\u7801\u4e2d.<br \/>\nsigrelse()\u5c06\u4fe1\u53f7\u4ece\u8c03\u7528\u8fdb\u7a0b\u7684\u4fe1\u53f7\u63a9\u7801\u4e2d\u5220\u9664.<br \/>\nsigignore()\u5c06\u4fe1\u53f7\u7684\u5b9a\u4f4d\u8bbe\u7f6e\u4e3aSIG_IGN.<br \/>\nsigpause()\u5c06\u4fe1\u53f7\u4ece\u8c03\u7528\u8fdb\u7a0b\u7684\u4fe1\u53f7\u63a9\u7801\u4e2d\u5220\u9664,\u540c\u65f6\u6302\u8d77\u8c03\u7528<br \/>\n\u8fdb\u7a0b\u76f4\u5230\u6536\u5230\u4fe1\u53f7.<br \/>\n\u82e5\u4fe1\u53f7SIGCHLD\u7684\u4fe1\u53f7\u5b9a\u4f4d\u4e3aSIG_IGN,\u5219\u8c03\u7528\u8fdb\u7a0b\u7684\u5b50\u8fdb\u7a0b\u5728\u7ec8<br \/>\n\u6b62\u65f6\u4e0d\u4f1a\u53d8\u6210\u50f5\u6b7b\u8fdb\u7a0b.\u8c03\u7528\u8fdb\u7a0b\u4e5f\u4e0d\u7528\u7b49\u5f85\u5b50\u8fdb\u7a0b\u8fd4\u56de\u5e76\u505a\u76f8<br \/>\n\u5e94\u5904\u7406.<br \/>\n\u8fd4\u56de\u503c:\u8c03\u7528\u6210\u529f\u5219signal()\u8fd4\u56de\u6700\u8fd1\u8c03\u7528signal()\u8bbe\u7f6e\u7684disp\u7684\u503c.<br \/>\n\u5426\u5219\u8fd4\u56deSIG_ERR.<br \/>\n\u4f8b\u5b50\u4e00:\u8bbe\u7f6e\u7528\u6237\u81ea\u5df1\u7684\u4fe1\u53f7\u4e2d\u65ad\u5904\u7406\u51fd\u6570,\u4ee5SIGINT\u4fe1\u53f7\u4e3a\u4f8b:<br \/>\nint flag=0;<br \/>\nvoid myself()<br \/>\n{<br \/>\nflag=1;<br \/>\nprintf(&#8220;get signal SIGINT<br \/>\n&#8220;);<br \/>\n\/*\u82e5\u8981\u91cd\u65b0\u8bbe\u7f6eSIGINT\u4fe1\u53f7\u4e2d\u65ad\u5904\u7406\u51fd\u6570\u4e3a\u672c\u51fd\u6570\u5219\u6267\u884c\u4ee5<br \/>\n*\u4e0b\u6b65\u9aa4*\/<br \/>\nvoid (*a)();<br \/>\na=myself;<br \/>\nsignal(SIGINT,a);<br \/>\nflag=2;<br \/>\n}<br \/>\nmain()<br \/>\n{<br \/>\nwhile (1) {<br \/>\nsleep(2000); \/*\u7b49\u5f85\u4e2d\u65ad\u4fe1\u53f7*\/<br \/>\nif (flag==1) {<br \/>\nprintf(&#8220;skip system call sleep<br \/>\n&#8220;);<br \/>\nexit(0);<br \/>\n}<br \/>\nif (flag==2) {<br \/>\nprintf(&#8220;skip system call sleep<br \/>\n&#8220;);<br \/>\nprintf(&#8220;waiting for next signal<br \/>\n&#8220;);<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n11.kill()<br \/>\n\u529f\u80fd:\u5411\u4e00\u4e2a\u6216\u4e00\u7ec4\u8fdb\u7a0b\u53d1\u9001\u4e00\u4e2a\u4fe1\u53f7.<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;signal.h&gt;<br \/>\nint kill(pid,sig);<br \/>\npid_t pid;<br \/>\nint sig;<br \/>\n\u8bf4\u660e:\u672c\u7cfb\u7edf\u8c03\u7528\u5411\u4e00\u4e2a\u6216\u4e00\u7ec4\u8fdb\u7a0b\u53d1\u9001\u4e00\u4e2a\u4fe1\u53f7,\u8be5\u4fe1\u53f7\u7531\u53c2\u6570sig\u6307<br \/>\n\u5b9a,\u4e3a\u7cfb\u7edf\u7ed9\u51fa\u7684\u4fe1\u53f7\u8868\u4e2d\u7684\u4e00\u4e2a.\u82e5\u4e3a0(\u7a7a\u4fe1\u53f7)\u5219\u68c0\u67e5\u9519\u8bef\u4f46<br \/>\n\u5b9e\u9645\u4e0a\u5e76\u6ca1\u6709\u53d1\u9001\u4fe1\u53f7,\u7528\u4e8e\u68c0\u67e5pid\u7684\u6709\u6548\u6027.<br \/>\npid\u6307\u5b9a\u5c06\u8981\u88ab\u53d1\u9001\u4fe1\u53f7\u7684\u8fdb\u7a0b\u6216\u8fdb\u7a0b\u7ec4.pid\u82e5\u5927\u4e8e0,\u5219\u4fe1\u53f7\u5c06<br \/>\n\u88ab\u53d1\u9001\u5230\u8fdb\u7a0b\u53f7\u7b49\u4e8epid\u7684\u8fdb\u7a0b;\u82e5pid\u7b49\u4e8e0\u5219\u4fe1\u53f7\u5c06\u88ab\u53d1\u9001\u5230\u6240<br \/>\n\u6709\u7684\u4e0e\u53d1\u9001\u4fe1\u53f7\u8fdb\u7a0b\u540c\u5728\u4e00\u4e2a\u8fdb\u7a0b\u7ec4\u7684\u8fdb\u7a0b(\u7cfb\u7edf\u7684\u7279\u6b8a\u8fdb\u7a0b\u9664<br \/>\n\u5916);\u82e5pid\u5c0f\u4e8e-1,\u5219\u4fe1\u53f7\u5c06\u88ab\u53d1\u9001\u5230\u6240\u6709\u8fdb\u7a0b\u7ec4\u53f7\u4e0epid\u7edd\u5bf9\u503c<br \/>\n\u76f8\u540c\u7684\u8fdb\u7a0b;\u82e5pid\u7b49\u4e8e-1,\u5219\u4fe1\u53f7\u5c06\u88ab\u53d1\u9001\u5230\u6240\u6709\u7684\u8fdb\u7a0b(\u7279\u6b8a\u7cfb<br \/>\n\u7edf\u8fdb\u7a0b\u9664\u5916).<br \/>\n\u4fe1\u53f7\u8981\u53d1\u9001\u5230\u6307\u5b9a\u7684\u8fdb\u7a0b,\u9996\u5148\u8c03\u7528\u8fdb\u7a0b\u5fc5\u987b\u6709\u5bf9\u8be5\u8fdb\u7a0b\u53d1\u9001\u4fe1<br \/>\n\u53f7\u7684\u6743\u9650.\u82e5\u8c03\u7528\u8fdb\u7a0b\u6709\u5408\u9002\u7684\u4f18\u5148\u7ea7\u5219\u5177\u5907\u6709\u6743\u9650.\u82e5\u8c03\u7528\u8fdb\u7a0b<br \/>\n\u7684\u5b9e\u9645\u6216\u6709\u6548\u7684UID\u7b49\u4e8e\u63a5\u6536\u4fe1\u53f7\u7684\u8fdb\u7a0b\u7684\u5b9e\u9645UID\u6216\u7528setuid()<br \/>\n\u7cfb\u7edf\u8c03\u7528\u8bbe\u7f6e\u7684UID,\u6216sig\u7b49\u4e8eSIGCONT\u540c\u65f6\u6536\u53d1\u53cc\u65b9\u8fdb\u7a0b\u7684\u4f1a\u8bdd<br \/>\n\u53f7\u76f8\u540c,\u5219\u8c03\u7528\u8fdb\u7a0b\u4e5f\u6709\u53d1\u9001\u4fe1\u53f7\u7684\u6743\u9650.<br \/>\n\u82e5\u8fdb\u7a0b\u6709\u53d1\u9001\u4fe1\u53f7\u5230pid\u6307\u5b9a\u7684\u4efb\u4f55\u4e00\u4e2a\u8fdb\u7a0b\u7684\u6743\u9650\u5219\u8c03\u7528\u6210\u529f,<br \/>\n\u5426\u5219\u8c03\u7528\u5931\u8d25,\u6ca1\u6709\u4fe1\u53f7\u53d1\u51fa.<br \/>\n\u8fd4\u56de\u503c:\u8c03\u7528\u6210\u529f\u5219\u8fd4\u56de0,\u5426\u5219\u8fd4\u56de-1.<br \/>\n\u4f8b\u5b50:\u5047\u8bbe\u524d\u4e00\u4e2a\u4f8b\u5b50\u8fdb\u7a0b\u53f7\u4e3a324,\u73b0\u5411\u5b83\u53d1\u4e00\u4e2aSIGINT\u4fe1\u53f7,\u8ba9\u5b83\u505a<br \/>\n\u4fe1\u53f7\u5904\u7406:<br \/>\nkill((pid_t)324,SIGINT);<br \/>\n12.alarm()<br \/>\n\u529f\u80fd:\u8bbe\u7f6e\u4e00\u4e2a\u8fdb\u7a0b\u7684\u8d85\u65f6\u65f6\u949f.<br \/>\n\u8bed\u6cd5:#include &lt;unistd.h&lt;<br \/>\nunsigned int alarm(sec)<br \/>\nunsigned int sec;<br \/>\n\u8bf4\u660e:\u6307\u793a\u8c03\u7528\u8fdb\u7a0b\u7684\u8d85\u65f6\u65f6\u949f\u5728\u6307\u5b9a\u7684\u65f6\u95f4\u540e\u5411\u8c03\u7528\u8fdb\u7a0b\u53d1\u9001\u4e00\u4e2a<br \/>\nSIGALRM\u4fe1\u53f7.\u8bbe\u7f6e\u8d85\u65f6\u65f6\u949f\u65f6\u65f6\u95f4\u503c\u4e0d\u4f1a\u88ab\u653e\u5165\u5806\u6808\u4e2d,\u540e\u4e00\u6b21<br \/>\n\u8bbe\u7f6e\u4f1a\u628a\u524d\u4e00\u6b21(\u8fd8\u672a\u5230\u8d85\u65f6\u65f6\u95f4)\u51b2\u6389.<br \/>\n\u82e5sec\u4e3a0,\u5219\u53d6\u6d88\u4efb\u4f55\u4ee5\u524d\u8bbe\u7f6e\u7684\u8d85\u65f6\u65f6\u949f.<br \/>\nfork()\u4f1a\u5c06\u65b0\u8fdb\u7a0b\u7684\u8d85\u65f6\u65f6\u949f\u521d\u59cb\u5316\u4e3a0.\u800c\u5f53\u4e00\u4e2a\u8fdb\u7a0b\u7528exec()<br \/>\n\u65cf\u7cfb\u7edf\u8c03\u7528\u65b0\u7684\u6267\u884c\u6587\u4ef6\u65f6,\u8c03\u7528\u524d\u8bbe\u7f6e\u7684\u8d85\u65f6\u65f6\u949f\u5728\u8c03\u7528\u540e\u4ecd<br \/>\n\u6709\u6548.<br \/>\n\u8fd4\u56de\u503c:\u8fd4\u56de\u4e0a\u6b21\u8bbe\u7f6e\u8d85\u65f6\u65f6\u949f\u540e\u5230\u8c03\u7528\u65f6\u8fd8\u5269\u4f59\u7684\u65f6\u95f4\u79d2\u6570.<br \/>\n\u4f8b\u5b50:int flag=0;<br \/>\nvoid myself()<br \/>\n{<br \/>\nflag=1;<br \/>\nprintf(&#8220;get signal SIGALRM<br \/>\n&#8220;);<br \/>\n\/*\u82e5\u8981\u91cd\u65b0\u8bbe\u7f6eSIGALRM\u4fe1\u53f7\u4e2d\u65ad\u5904\u7406\u51fd\u6570\u4e3a\u672c\u51fd\u6570\u5219\u6267\u884c<br \/>\n*\u4ee5\u4e0b\u6b65\u9aa4*\/<br \/>\nvoid (*a)();<br \/>\na=myself;<br \/>\nsignal(SIGALRM,a);<br \/>\nflag=2;<br \/>\n}<br \/>\nmain()<br \/>\n{<br \/>\nalarm(100); \/*100\u79d2\u540e\u53d1\u8d85\u65f6\u4e2d\u65ad\u4fe1\u53f7*\/<br \/>\nwhile (1) {<br \/>\nsleep(2000); \/*\u7b49\u5f85\u4e2d\u65ad\u4fe1\u53f7*\/<br \/>\nif (flag==1) {<br \/>\nprintf(&#8220;skip system call sleep<br \/>\n&#8220;);<br \/>\nexit(0);<br \/>\n}<br \/>\nif (flag==2) {<br \/>\nprintf(&#8220;skip system call sleep<br \/>\n&#8220;);<br \/>\nprintf(&#8220;waiting for next signal<br \/>\n&#8220;);<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n13.msgsnd()<br \/>\n\u529f\u80fd:\u53d1\u9001\u6d88\u606f\u5230\u6307\u5b9a\u7684\u6d88\u606f\u961f\u5217\u4e2d.<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/ipc.h&gt;<br \/>\n#include &lt;sys\/msg.h&gt;<br \/>\nint msgsnd(msqid,msgp,msgsz,msgflg)<br \/>\nint msqid;<br \/>\nvoid *msgp;<br \/>\nsize_t msgsz;<br \/>\nint msgflg;<br \/>\n\u8bf4\u660e:\u53d1\u9001\u4e00\u4e2a\u6d88\u606f\u5230\u7531msqid\u6307\u5b9a\u6d88\u606f\u961f\u5217\u6807\u8bc6\u53f7\u7684\u6d88\u606f\u961f\u5217.<br \/>\n\u53c2\u6570msgp\u6307\u5411\u4e00\u4e2a\u7528\u6237\u5b9a\u4e49\u7684\u7f13\u51b2\u533a,\u5e76\u4e14\u7f13\u51b2\u533a\u7684\u7b2c\u4e00\u4e2a\u57df\u5e94<br \/>\n\u4e3a\u957f\u6574\u578b,\u6307\u5b9a\u6d88\u606f\u7c7b\u578b,\u5176\u4ed6\u6570\u636e\u653e\u5728\u7f13\u51b2\u533a\u7684\u6d88\u606f\u4e2d\u5176\u4ed6\u6b63\u6587<br \/>\n\u533a\u5185.\u4e0b\u9762\u662f\u6d88\u606f\u5143\u7d20\u5b9a\u4e49:<br \/>\nlong mtype;<br \/>\nchar mtext[];<br \/>\nmtype\u662f\u4e00\u4e2a\u6574\u6570,\u7528\u4e8e\u63a5\u6536\u8fdb\u7a0b\u9009\u62e9\u6d88\u606f\u7c7b\u578b.<br \/>\nmtext\u662f\u4e00\u4e2a\u957f\u5ea6\u4e3amsgsz\u5b57\u8282\u7684\u4efb\u4f55\u6b63\u6587,\u53c2\u6570msgsz\u53ef\u4ece0\u5230\u7cfb<br \/>\n\u7edf\u5141\u8bb8\u7684\u6700\u5927\u503c\u95f4\u53d8\u5316.<br \/>\nmsgflg\u6307\u5b9a\u64cd\u4f5c\u884c\u4e3a:<br \/>\n. \u82e5(msgflg&amp;IPC_NOWAIT)\u662f\u771f\u7684,\u6d88\u606f\u5e76\u4e0d\u662f\u88ab\u7acb\u5373\u53d1\u9001\u800c\u8c03\u7528<br \/>\n\u8fdb\u7a0b\u4f1a\u7acb\u5373\u8fd4\u56de.<br \/>\n. \u82e5(msgflg&amp;IPC_NOWAIT)\u4e0d\u662f\u771f\u7684,\u5219\u8c03\u7528\u8fdb\u7a0b\u4f1a\u88ab\u6302\u8d77\u76f4\u5230\u4e0b<br \/>\n\u9762\u60c5\u51b5\u4e4b\u4e00\u53d1\u751f:<br \/>\n* \u6d88\u606f\u88ab\u53d1\u9001\u51fa\u53bb.<br \/>\n* \u6d88\u606f\u961f\u5217\u6807\u5fd7\u88ab\u7cfb\u7edf\u5220\u9664.\u7cfb\u7edf\u8c03\u7528\u8fd4\u56de-1.<br \/>\n* \u8c03\u7528\u8fdb\u7a0b\u63a5\u6536\u5230\u4e00\u4e2a\u672a\u88ab\u5ffd\u7565\u7684\u4e2d\u65ad\u4fe1\u53f7,\u8c03\u7528\u8fdb\u7a0b\u7ee7\u7eed<br \/>\n\u6267\u884c\u6216\u88ab\u7ec8\u6b62.<br \/>\n\u8c03\u7528\u6210\u529f\u540e,\u5bf9\u5e94\u6307\u5b9a\u7684\u6d88\u606f\u961f\u5217\u7684\u76f8\u5173\u7ed3\u6784\u505a\u5982\u4e0b\u52a8\u4f5c:<br \/>\n. \u6d88\u606f\u6570(msg_qnum)\u52a01.<br \/>\n. \u6d88\u606f\u961f\u5217\u6700\u8fd1\u53d1\u9001\u8fdb\u7a0b\u53f7(msg_lspid)\u6539\u4e3a\u8c03\u7528\u8fdb\u7a0b\u53f7.<br \/>\n. \u6d88\u606f\u961f\u5217\u53d1\u9001\u65f6\u95f4(msg_stime)\u6539\u4e3a\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4.<br \/>\n\u4ee5\u4e0a\u4fe1\u606f\u53ef\u7528\u547d\u4ee4ipcs -a\u770b\u5230.<br \/>\n\u8fd4\u56de\u503c:\u6210\u529f\u5219\u8fd4\u56de0,\u5426\u5219\u8fd4\u56de-1.<br \/>\n14.msgrcv()<br \/>\n\u529f\u80fd:\u4ece\u6d88\u606f\u961f\u5217\u4e2d\u53d6\u5f97\u6307\u5b9a\u7c7b\u578b\u7684\u6d88\u606f.<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/ipc.h&gt;<br \/>\n#include &lt;sys\/msg.h&gt;<br \/>\nint msgrcv(msqid,msgp,msgsz,msgtyp,msgflg)<br \/>\nint msqid;<br \/>\nvoid *msgp;<br \/>\nint msgsz;<br \/>\nlong msgtyp;<br \/>\nint msgflg;<br \/>\n\u8bf4\u660e:\u672c\u7cfb\u7edf\u8c03\u7528\u4ece\u7531msqid\u6307\u5b9a\u7684\u6d88\u606f\u961f\u5217\u4e2d\u8bfb\u53d6\u4e00\u4e2a\u7531msgtyp\u6307\u5b9a<br \/>\n\u7c7b\u578b\u7684\u6d88\u606f\u5230\u7531msgp\u6307\u5411\u7684\u7f13\u51b2\u533a\u4e2d,\u540c\u6837\u7684,\u8be5\u7f13\u51b2\u533a\u7684\u7ed3\u6784\u5982<br \/>\n\u524d\u6240\u8ff0,\u5305\u62ec\u6d88\u606f\u7c7b\u578b\u548c\u6d88\u606f\u6b63\u6587.msgsz\u4e3a\u53ef\u63a5\u6536\u7684\u6d88\u606f\u6b63\u6587\u7684<br \/>\n\u5b57\u8282\u6570.\u82e5\u63a5\u6536\u5230\u7684\u6d88\u606f\u6b63\u6587\u7684\u957f\u5ea6\u5927\u4e8emsgsz,\u5219\u4f1a\u88ab\u622a\u77ed\u5230<br \/>\nmsgsz\u5b57\u8282\u4e3a\u6b62(\u5f53\u6d88\u606f\u6807\u5fd7msgflg&amp;MSG_NOERROR\u4e3a\u771f\u65f6),\u622a\u6389\u7684<br \/>\n\u90e8\u4efd\u5c06\u88ab\u4e22\u5931,\u800c\u4e14\u4e0d\u901a\u77e5\u6d88\u606f\u53d1\u9001\u8fdb\u7a0b.<br \/>\nmsgtyp\u6307\u5b9a\u6d88\u606f\u7c7b\u578b:<br \/>\n. \u4e3a0\u5219\u63a5\u6536\u6d88\u606f\u961f\u5217\u4e2d\u7b2c\u4e00\u4e2a\u6d88\u606f.<br \/>\n. \u5927\u4e8e0\u5219\u63a5\u6536\u6d88\u606f\u961f\u5217\u4e2d\u7b2c\u4e00\u4e2a\u7c7b\u578b\u4e3amsgtyp\u7684\u6d88\u606f.<br \/>\n. \u5c0f\u4e8e0\u5219\u63a5\u6536\u6d88\u606f\u961f\u5217\u4e2d\u7b2c\u4e00\u4e2a\u7c7b\u578b\u503c\u4e0d\u5c0f\u4e8emsgtyp\u7edd\u5bf9\u503c\u4e14<br \/>\n\u7c7b\u578b\u503c\u53c8\u6700\u5c0f\u7684\u6d88\u606f.<br \/>\nmsgflg\u6307\u5b9a\u64cd\u4f5c\u884c\u4e3a:<br \/>\n. \u82e5(msgflg&amp;IPC_NOWAIT)\u662f\u771f\u7684,\u8c03\u7528\u8fdb\u7a0b\u4f1a\u7acb\u5373\u8fd4\u56de,\u82e5\u6ca1\u6709<br \/>\n\u63a5\u6536\u5230\u6d88\u606f\u5219\u8fd4\u56de\u503c\u4e3a-1,errno\u8bbe\u7f6e\u4e3aENOMSG.<br \/>\n. \u82e5(msgflg&amp;IPC_NOWAIT)\u4e0d\u662f\u771f\u7684,\u5219\u8c03\u7528\u8fdb\u7a0b\u4f1a\u88ab\u6302\u8d77\u76f4\u5230\u4e0b<br \/>\n\u9762\u60c5\u51b5\u4e4b\u4e00\u53d1\u751f:<br \/>\n* \u961f\u5217\u4e2d\u7684\u6d88\u606f\u7684\u7c7b\u578b\u662f\u6709\u6548\u7684.<br \/>\n* \u6d88\u606f\u961f\u5217\u6807\u5fd7\u88ab\u7cfb\u7edf\u5220\u9664.\u7cfb\u7edf\u8c03\u7528\u8fd4\u56de-1.<br \/>\n* \u8c03\u7528\u8fdb\u7a0b\u63a5\u6536\u5230\u4e00\u4e2a\u672a\u88ab\u5ffd\u7565\u7684\u4e2d\u65ad\u4fe1\u53f7,\u8c03\u7528\u8fdb\u7a0b\u7ee7\u7eed<br \/>\n\u6267\u884c\u6216\u88ab\u7ec8\u6b62.<br \/>\n\u8c03\u7528\u6210\u529f\u540e,\u5bf9\u5e94\u6307\u5b9a\u7684\u6d88\u606f\u961f\u5217\u7684\u76f8\u5173\u7ed3\u6784\u505a\u5982\u4e0b\u52a8\u4f5c:<br \/>\n. \u6d88\u606f\u6570(msg_qnum)\u51cf1.<br \/>\n. \u6d88\u606f\u961f\u5217\u6700\u8fd1\u63a5\u6536\u8fdb\u7a0b\u53f7(msg_lrpid)\u6539\u4e3a\u8c03\u7528\u8fdb\u7a0b\u53f7.<br \/>\n. \u6d88\u606f\u961f\u5217\u63a5\u6536\u65f6\u95f4(msg_rtime)\u6539\u4e3a\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4.<br \/>\n\u4ee5\u4e0a\u4fe1\u606f\u53ef\u7528\u547d\u4ee4ipcs -a\u770b\u5230.<br \/>\n\u8fd4\u56de\u503c:\u8c03\u7528\u6210\u529f\u5219\u8fd4\u56de\u503c\u7b49\u4e8e\u63a5\u6536\u5230\u5b9e\u9645\u6d88\u606f\u6b63\u6587\u7684\u5b57\u8282\u6570.<br \/>\n\u4e0d\u6210\u529f\u5219\u8fd4\u56de-1.<br \/>\n15.msgctl()<br \/>\n\u529f\u80fd:\u6d88\u606f\u63a7\u5236\u64cd\u4f5c<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/ipc.h&gt;<br \/>\n#include &lt;sys\/msg.h&gt;<br \/>\nint msgctl(msqid,cmd,buf)<br \/>\nint msqid,cmd;<br \/>\nstruct msqid_ds *buf;<br \/>\n\u8bf4\u660e:\u672c\u7cfb\u7edf\u8c03\u7528\u63d0\u4f9b\u4e00\u7cfb\u5217\u6d88\u606f\u63a7\u5236\u64cd\u4f5c,\u64cd\u4f5c\u52a8\u4f5c\u7531cmd\u5b9a\u4e49,\u4ee5\u4e0b<br \/>\ncmd\u5b9a\u4e49\u503c\u8868\u660e\u4e86\u5404\u64cd\u4f5c\u52a8\u4f5c\u7684\u5b9a\u4e49.<br \/>\n. IPC_STAT:\u5c06msqid\u76f8\u5173\u7684\u6570\u636e\u7ed3\u6784\u4e2d\u5404\u4e2a\u5143\u7d20\u7684\u5f53\u524d\u503c\u653e\u5165\u7531<br \/>\nbuf\u6307\u5411\u7684\u7ed3\u6784\u4e2d.<br \/>\n. IPC_SET:\u5c06msqid\u76f8\u5173\u7684\u6570\u636e\u7ed3\u6784\u4e2d\u7684\u4e0b\u5217\u5143\u7d20\u8bbe\u7f6e\u4e3a\u7531buf\u6307<br \/>\n\u5411\u7684\u7ed3\u6784\u4e2d\u7684\u5bf9\u5e94\u503c.<br \/>\nmsg_perm.uid<br \/>\nmsg_perm.gid<br \/>\nmsg_perm.mode<br \/>\nmsg_qbytes<br \/>\n\u672c\u547d\u4ee4\u53ea\u80fd\u7531\u6709\u6548UID\u7b49\u4e8emsg_perm.cuid\u6216msg_perm.uid\u7684<br \/>\n\u8fdb\u7a0b\u6216\u6709\u6548UID\u6709\u5408\u9002\u6743\u9650\u7684\u8fdb\u7a0b\u64cd\u4f5c.\u53ea\u6709\u5177\u6709\u5408\u9002\u6743\u9650\u7684<br \/>\n\u7528\u6237\u624d\u80fd\u589e\u52a0msg_qbytes\u7684\u503c.<br \/>\n. IPC_RMID:\u5220\u9664\u7531msqid\u6307\u793a\u7684\u6d88\u606f\u961f\u5217.\u5c06\u5b83\u4ece\u7cfb\u7edf\u4e2d\u5220\u9664\u5e76<br \/>\n\u7834\u574f\u76f8\u5173\u7684\u6570\u636e\u7ed3\u6784.<br \/>\n\u672c\u547d\u4ee4\u53ea\u80fd\u7531\u6709\u6548UID\u7b49\u4e8emsg_perm.cuid\u6216msg_perm.uid\u7684<br \/>\n\u8fdb\u7a0b\u6216\u6709\u6548UID\u6709\u5408\u9002\u6743\u9650\u7684\u8fdb\u7a0b\u64cd\u4f5c.<br \/>\n\u8fd4\u56de\u503c:\u8c03\u7528\u6210\u529f\u5219\u8fd4\u56de\u503c\u4e3a0,\u5426\u5219\u4e3a-1.<br \/>\n16.msgget()<br \/>\n\u529f\u80fd:\u53d6\u5f97\u4e00\u4e2a\u6d88\u606f\u961f\u5217.<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/ipc.h&gt;<br \/>\n#include &lt;sys\/msg.h&gt;<br \/>\nint msgget(key,msgflg)<br \/>\nkey_t key;<br \/>\nint msgflg;<br \/>\n\u8bf4\u660e:\u672c\u7cfb\u7edf\u8c03\u7528\u8fd4\u56de\u4e0e\u53c2\u6570key\u76f8\u5173\u7684\u6d88\u606f\u961f\u5217\u7684\u6807\u8bc6\u7b26.<br \/>\n\u82e5\u4ee5\u4e0b\u4e8b\u5b9e\u6210\u7acb,\u5219\u4e0e\u6d88\u606f\u961f\u5217\u76f8\u5173\u7684\u6807\u8bc6\u7b26\u548c\u6570\u636e\u7ed3\u6784\u5c06\u88ab\u521b<br \/>\n\u5efa\u51fa\u6765:<br \/>\n. \u82e5\u53c2\u6570key\u7b49\u4e8eIPC_PRIVATE.<br \/>\n. \u82e5\u53c2\u6570key\u6ca1\u6709\u4e00\u4e2a\u5df2\u5b58\u5728\u7684\u6d88\u606f\u961f\u5217\u6807\u8bc6\u7b26\u4e0e\u4e4b\u76f8\u5173,\u540c\u65f6\u503c<br \/>\n(msgflg&amp;IPC_CREAT)\u4e3a\u771f.<br \/>\n\u521b\u5efa\u6d88\u606f\u961f\u5217\u65f6,\u4e0e\u65b0\u7684\u6d88\u606f\u961f\u5217\u6807\u8bc6\u7b26\u76f8\u5173\u7684\u6570\u636e\u7ed3\u6784\u5c06\u88ab\u521d<br \/>\n\u59cb\u5316\u4e3a\u5982\u4e0b:<br \/>\n. msg_perm.cuid\u548cmsg_perm.uid\u8bbe\u7f6e\u4e3a\u8c03\u7528\u8fdb\u7a0b\u7684\u6709\u6548UID.<br \/>\n. msg_perm.cgid\u548cmsg_perm.gid\u8bbe\u7f6e\u4e3a\u8c03\u7528\u8fdb\u7a0b\u7684\u6709\u6548GID.<br \/>\n. msg_perm.mode\u8bbf\u95ee\u6743\u9650\u6bd4\u7279\u4f4d\u8bbe\u7f6e\u4e3amsgflg\u8bbf\u95ee\u6743\u9650\u6bd4\u7279\u4f4d.<br \/>\n. msg_qnum,msg_lspid,msg_lrpid,msg_stime,msg_rtime\u8bbe\u7f6e\u4e3a0.<br \/>\n. msg_ctime\u8bbe\u7f6e\u4e3a\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4.<br \/>\n. msg_qbytes\u8bbe\u7f6e\u4e3a\u7cfb\u7edf\u5141\u8bb8\u7684\u6700\u5927\u503c.<br \/>\n\u8fd4\u56de\u503c:\u8c03\u7528\u6210\u529f\u5219\u8fd4\u56de\u4e00\u975e0\u503c,\u79f0\u4e3a\u6d88\u606f\u961f\u5217\u6807\u8bc6\u7b26;\u5426\u5219\u8fd4\u56de\u503c\u4e3a-1.<br \/>\n\u4f8b\u5b50:\u672c\u4f8b\u5c06\u5305\u62ec\u4e0a\u8ff0\u6240\u6709\u6d88\u606f\u961f\u5217\u64cd\u4f5c\u7684\u7cfb\u7edf\u8c03\u7528:<br \/>\n#define RKEY 0x9001L \/*\u8bfb\u6d88\u606f\u961f\u5217\u7684KEY\u503c*\/<br \/>\n#define WKEY 0x9002L \/*\u5199\u6d88\u606f\u961f\u5217\u7684KEY\u503c*\/<br \/>\n#define MSGFLG 0666 \/*\u6d88\u606f\u961f\u5217\u8bbf\u95ee\u6743\u9650*\/<br \/>\n#define IPC_WAIT 0 \/*\u7b49\u5f85\u65b9\u5f0f\u5728include\u6587\u4ef6\u4e2d\u672a\u5b9a\u4e49*\/<br \/>\nint rmsqid; \/*\u8bfb\u6d88\u606f\u961f\u5217\u6807\u8bc6\u7b26*\/<br \/>\nint wmsqid; \/*\u5199\u6d88\u606f\u961f\u5217\u6807\u8bc6\u7b26*\/<br \/>\nstruct msgbuf {<br \/>\nlong mtype;<br \/>\nchar mtext[200];<br \/>\n} buf;<br \/>\n\/*\u82e5\u8bfb\u6d88\u606f\u961f\u5217\u5df2\u5b58\u5728\u5c31\u53d6\u5f97\u6807\u8bc6\u7b26,\u5426\u5219\u5219\u521b\u5efa\u5e76\u53d6\u5f97\u6807\u8bc6\u7b26*\/<br \/>\nif ((rmsqid=msgget(RKEY,MSGFLG|IPC_CREAT))&lt;0) {<br \/>\nprintf(&#8220;get read message queue failed<br \/>\n&#8220;);<br \/>\nexit(1);<br \/>\n} \/*\u82e5\u5199\u6d88\u606f\u961f\u5217\u5df2\u5b58\u5728\u5219\u5931\u8d25,\u82e5\u4e0d\u5b58\u5728\u5219\u521b\u5efa\u5e76\u53d6\u5f97\u6807\u8bc6\u7b26*\/<br \/>\nif ((wmsqid=&#8221;msgget(WKEY,&#8221; MSGFLG|IPC_CREAT|IPC_TRUNC))&lt;0) {<br \/>\nprintf(&#8220;get write message queue failed<br \/>\n&#8220;);<br \/>\nexit(2);<br \/>\n} \/*\u63a5\u6536\u6240\u6709\u7c7b\u578b\u7684\u6d88\u606f*\/<br \/>\nif (msgrcv(rmsqid,&amp;buf,sizeof(struct msgbuf)-sizeof(long), 0L,IPC_WAIT)&gt;0)<br \/>\nprintf(&#8220;get %ld type message from queue:%s<br \/>\n&#8220;,<br \/>\nbuf.mtype,buf.mtext);<br \/>\nelse {<br \/>\nprintf(&#8220;get message failed<br \/>\n&#8220;);<br \/>\nexit(3);<br \/>\n}<br \/>\nbuf.mtype=3L;<br \/>\nif (msgsnd(wmsqid,&amp;buf,sizeof(struct msgbuf)-sizeof(long),<br \/>\nIPC_NOWAIT)&gt;0)<br \/>\nprintf(&#8220;send message OK<br \/>\n&#8220;);<br \/>\nelse {<br \/>\nprintf(&#8220;send message failed<br \/>\n&#8220;);<br \/>\nexit(4);<br \/>\n}<br \/>\nmsgctl(wmsqid,IPC_RMID,(struct msqid *)NULL);<br \/>\n17.shmat()<br \/>\n\u529f\u80fd:\u8054\u63a5\u5171\u4eab\u5185\u5b58\u7684\u64cd\u4f5c.<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/ipc.h&gt;<br \/>\n#include &lt;sys\/shm.h&gt;<br \/>\nvoid *shmat(shmid,shmaddr,shmflg)<br \/>\nint shmid;<br \/>\nvoid *shmaddr;<br \/>\nint shmid;<br \/>\n\u8bf4\u660e:\u5c06\u7531shmid\u6307\u793a\u7684\u5171\u4eab\u5185\u5b58\u8054\u63a5\u5230\u8c03\u7528\u8fdb\u7a0b\u7684\u6570\u636e\u6bb5\u4e2d.\u88ab\u8054\u63a5\u7684<br \/>\n\u6bb5\u653e\u5728\u5730\u5740,\u8be5\u5730\u5740\u7531\u4ee5\u4e0b\u51c6\u5219\u6307\u5b9a:<br \/>\n. \u82e5shmaddr\u7b49\u4e8e(void *)0,\u5219\u6bb5\u8054\u63a5\u5230\u7531\u7cfb\u7edf\u9009\u62e9\u7684\u7b2c\u4e00\u4e2a\u53ef<br \/>\n\u7528\u7684\u5730\u5740\u4e0a.<br \/>\n. \u82e5shmaddr\u4e0d\u7b49\u4e8e(void *)0\u540c\u65f6(shmflg&amp;SHM_RND)\u503c\u4e3a\u771f,\u5219<br \/>\n\u6bb5\u8054\u63a5\u5230\u7531(shmaddr-(shmaddr%SHMLBA))\u7ed9\u51fa\u7684\u5730\u5740\u4e0a.<br \/>\n. \u82e5shmaddr\u4e0d\u7b49\u4e8e(void *)0\u540c\u65f6(shmflg&amp;SHM_RND)\u503c\u4e3a\u5047,\u5219<br \/>\n\u6bb5\u8054\u63a5\u5230\u7531shmaddr\u6307\u5b9a\u7684\u5730\u5740\u4e0a.<br \/>\n\u82e5(shmflg&amp;sSHM_RDONLY)\u4e3a\u771f\u5e76\u4e14\u8c03\u7528\u8fdb\u7a0b\u6709\u8bfb\u5141\u8bb8,\u5219\u88ab\u8054\u63a5<br \/>\n\u7684\u6bb5\u4e3a\u53ea\u8bfb;\u5426\u5219,\u82e5\u503c\u4e0d\u4e3a\u771f\u4e14\u8c03\u7528\u8fdb\u7a0b\u6709\u8bfb\u5199\u6743\u9650,\u5219\u88ab\u8054\u63a5<br \/>\n\u7684\u6bb5\u4e3a\u53ef\u8bfb\u5199\u7684.<br \/>\n\u8fd4\u56de\u503c:\u82e5\u8c03\u7528\u6210\u529f\u5219\u8fd4\u56de\u88ab\u8054\u63a5\u7684\u5171\u4eab\u5185\u5b58\u6bb5\u5728\u6570\u636e\u6bb5\u4e0a\u7684\u542f\u59cb\u5730\u5740.<br \/>\n\u5426\u5219\u8fd4\u56de\u503c\u4e3a-1.<br \/>\n18.shmdt()<br \/>\n\u529f\u80fd:\u65ad\u5f00\u5171\u4eab\u5185\u5b58\u8054\u63a5\u7684\u64cd\u4f5c.<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/ipc.h&gt;<br \/>\n#include &lt;sys\/shm.h&gt;<br \/>\nvoid *shmdt(shmaddr)<br \/>\nvoid *shmaddr;<br \/>\n\u8bf4\u660e:\u672c\u7cfb\u7edf\u8c03\u7528\u5c06\u7531shmaddr\u6307\u5b9a\u7684\u5171\u4eab\u5185\u5b58\u6bb5\u4ece\u8c03\u7528\u8fdb\u7a0b\u7684\u6570\u636e\u6bb5<br \/>\n\u8131\u79bb\u51fa\u53bb.<br \/>\n\u8fd4\u56de\u503c:\u82e5\u8c03\u7528\u6210\u529f\u5219\u8fd4\u56de\u503c\u4e3a0,\u5426\u5219\u8fd4\u56de\u503c\u4e3a-1.<br \/>\n19.shmget()<br \/>\n\u529f\u80fd:\u53d6\u5f97\u5171\u4eab\u5185\u5b58\u6bb5<br \/>\n\u8bed\u6cd5:#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/ipc.h&gt;<br \/>\n#include &lt;sys\/shm.h&gt;<br \/>\nint shmget(key,size,shmflg)<br \/>\nkey_t key;<br \/>\nint size,shmflg;<br \/>\n\u8bf4\u660e:\u672c\u7cfb\u7edf\u8c03\u7528\u8fd4\u56dekey\u76f8\u5173\u7684\u5171\u4eab\u5185\u5b58\u6807\u8bc6\u7b26.<br \/>\n\u5171\u4eab\u5185\u5b58\u6807\u8bc6\u7b26\u548c\u76f8\u5173\u6570\u636e\u7ed3\u6784\u53ca\u81f3\u5c11size\u5b57\u8282\u7684\u5171\u4eab\u5185\u5b58\u6bb5\u80fd<br \/>\n\u6b63\u5e38\u521b\u5efa,\u8981\u6c42\u4ee5\u4e0b\u4e8b\u5b9e\u6210\u7acb:<br \/>\n. \u53c2\u6570key\u7b49\u4e8eIPC_PRIVATE.<br \/>\n. \u53c2\u6570key\u6ca1\u6709\u76f8\u5173\u7684\u5171\u4eab\u5185\u5b58\u6807\u8bc6\u7b26,\u540c\u65f6(shmflg&amp;IPC_CREAT)<br \/>\n\u503c\u4e3a\u771f.<br \/>\n\u5171\u4eab\u5185\u5b58\u521b\u5efa\u65f6,\u65b0\u751f\u6210\u7684\u5171\u4eab\u5185\u5b58\u6807\u8bc6\u76f8\u5173\u7684\u6570\u636e\u7ed3\u6784\u88ab\u521d\u59cb<br \/>\n\u5316\u5982\u4e0b:<br \/>\n. shm_perm.cuid\u548cshm_perm.uid\u8bbe\u7f6e\u4e3a\u8c03\u7528\u8fdb\u7a0b\u7684\u6709\u6548UID.<br \/>\n. shm_perm.cgid\u548cshm_perm.gid\u8bbe\u7f6e\u4e3a\u8c03\u7528\u8fdb\u7a0b\u7684\u6709\u6548GID.<br \/>\n. shm_perm.mode\u8bbf\u95ee\u6743\u9650\u6bd4\u7279\u4f4d\u8bbe\u7f6e\u4e3ashmflg\u8bbf\u95ee\u6743\u9650\u6bd4\u7279\u4f4d.<br \/>\n. shm_lpid,shm_nattch,shm_atime,shm_dtime\u8bbe\u7f6e\u4e3a0.<br \/>\n. shm_ctime\u8bbe\u7f6e\u4e3a\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4.<br \/>\n. shm_segsz\u8bbe\u7f6e\u4e3a0.<br \/>\n\u8fd4\u56de\u503c:\u82e5\u8c03\u7528\u6210\u529f\u5219\u8fd4\u56de\u4e00\u4e2a\u975e0\u503c,\u79f0\u4e3a\u5171\u4eab\u5185\u5b58\u6807\u8bc6\u7b26,\u5426\u5219\u8fd4\u56de<br \/>\n\u503c\u4e3a-1.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5199\u5728\u524d\u9762\u7684\u8bdd \u672c\u6587\u4e3b\u8981\u6839\u636e\u672c\u4eba\u5728UNIX\u7cfb\u7edf\u4e0a\u7684\u7f16\u7a0b\u5b9e\u8df5\u7ecf\u9a8c\u603b\u7ed3\u800c\u6210, \u65e2\u505a\u4e3a\u81ea &hellip;<\/p>\n<p class=\"read-more\"><a href=\"http:\/\/zerobox.org\/notes\/177.html\">\u7ee7\u7eed\u9605\u8bfb &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[76,65,109],"class_list":["post-177","post","type-post","status-publish","format-standard","hentry","tag-unix","tag-65","tag-109"],"views":917,"_links":{"self":[{"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/posts\/177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/comments?post=177"}],"version-history":[{"count":0,"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/posts\/177\/revisions"}],"wp:attachment":[{"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/media?parent=177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/categories?post=177"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/tags?post=177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}