{"id":3547,"date":"2017-08-19T08:31:52","date_gmt":"2017-08-19T00:31:52","guid":{"rendered":"https:\/\/ixyzero.com\/blog\/?p=3547"},"modified":"2017-08-19T08:31:52","modified_gmt":"2017-08-19T00:31:52","slug":"linux%e4%b8%8b%e7%94%a8c%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0lsattrchattr%e5%91%bd%e4%bb%a4%e7%9a%84%e5%8a%9f%e8%83%bd","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/3547.html","title":{"rendered":"Linux\u4e0b\u7528C\u8bed\u8a00\u5b9e\u73b0lsattr\/chattr\u547d\u4ee4\u7684\u529f\u80fd"},"content":{"rendered":"<p>=Start=<\/p>\n<h4 id=\"Linux\u4e0b\u7528C\u8bed\u8a00\u5b9e\u73b0lsattr\/chattr\u547d\u4ee4\u7684\u529f\u80fd-\u7f18\u7531\uff1a\">\u7f18\u7531\uff1a<\/h4>\n<p>\u5b66\u4e60\u3001\u63d0\u9ad8\u9700\u8981<\/p>\n<h4 id=\"Linux\u4e0b\u7528C\u8bed\u8a00\u5b9e\u73b0lsattr\/chattr\u547d\u4ee4\u7684\u529f\u80fd-\u6b63\u6587\uff1a\">\u6b63\u6587\uff1a<\/h4>\n<h5 id=\"Linux\u4e0b\u7528C\u8bed\u8a00\u5b9e\u73b0lsattr\/chattr\u547d\u4ee4\u7684\u529f\u80fd-\u53c2\u8003\u89e3\u7b54\uff1a\">\u53c2\u8003\u89e3\u7b54\uff1a<\/h5>\n<p>\u4e4b\u524d\u5bf9ioctl()\u51fd\u6570\u4e0d\u719f\uff0c\u5bfc\u81f4\u5728\u7528\u5b83\u5b9e\u73b0lsattr\/chattr\u547d\u4ee4\u7684\u8fc7\u7a0b\u4e2d\u8e29\u4e86\u51e0\u4e2a\u5751\uff0c\u5dee\u70b9\u8981\u653e\u5f03\u4e86\uff0c\u8fd8\u597d\u540e\u6765\u6709\u4e00\u4e2a\u6210\u529f\u7684\u4f8b\u5b50\u53ef\u4ee5\u53c2\u8003\uff0c\u4ee5\u4fbf\u5bf9\u6bd4\u4e24\u8005\u4e4b\u95f4\u7684\u4e0d\u540c\u4e4b\u5904\uff0c\u4ece\u800c\u627e\u6253\u95ee\u9898\u6240\u5728\u3002\u5148\u7ed9\u51fa\u4fee\u6539\u540e\u53ef\u4ee5\u7528\u7684\u7248\u672c\uff1a<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_768052\" class=\"syntaxhighlighter sh-confluence nogutter java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"java comments\">\/* setflags.c - set the ext2 attributes for a set of files *\/<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java comments\">\/* The first parameter to this program is a string consisting of<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">0 (an empty string is okay) or more of the letters I, A, S, and<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">N. This string specifies which ext2 attributes should be turned<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">on for the files which are specified on the rest of the command<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">line -- the rest of the attributes are turned off. The letters<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">stand for immutable, append-only, sync, and nodump, respectively.<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">For example, the command \"setflags IN file1 file2\" turns on the<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">immutable and nodump flags for files file1 and file2, but turns<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">off the sync and append-only flags for those files. *\/<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java plain\">#include &lt;errno.h&gt;<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java plain\">#include &lt;fcntl.h&gt;<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java plain\">#include &lt;linux\/ext2_fs.h&gt;<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java plain\">#include &lt;stdio.h&gt;<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java plain\">#include &lt;string.h&gt;<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java plain\">#include &lt;sys\/ioctl.h&gt;<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java plain\">#include &lt;unistd.h&gt;<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">main(<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">argc,\u00a0<\/code><code class=\"java keyword\">char<\/code>\u00a0<code class=\"java plain\">** argv) {<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">char<\/code>\u00a0<code class=\"java plain\">** filename = argv +\u00a0<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">fd;<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">old_flags =\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* make sure the flags to set were specified, along with<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">some file names *\/<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(argc &lt;\u00a0<\/code><code class=\"java value\">3<\/code><code class=\"java plain\">) {<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">fprintf(stderr,\u00a0<\/code><code class=\"java string\">\"setflags usage: [I][A][S][N] &lt;filenames&gt;\\n\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java value\">1<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"FS_IMMUTABLE_FL = 0x%08x, %d\\n\"<\/code><code class=\"java plain\">, FS_IMMUTABLE_FL, FS_IMMUTABLE_FL);<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"FS_APPEND_FL = 0x%08x, %d\\n\"<\/code><code class=\"java plain\">, FS_APPEND_FL, FS_APPEND_FL);<\/code><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"FS_SYNC_FL = 0x%08x, %d\\n\"<\/code><code class=\"java plain\">, FS_SYNC_FL, FS_SYNC_FL);<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"FS_NODUMP_FL = 0x%08x, %d\\n\"<\/code><code class=\"java plain\">, FS_NODUMP_FL, FS_NODUMP_FL);<\/code><\/div>\n<div class=\"line number38 index37 alt1\"><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* iterate over all of the file names in argv[] *\/<\/code><\/div>\n<div class=\"line number40 index39 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">while<\/code>\u00a0<code class=\"java plain\">(*(++filename)) {<\/code><\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* Unlike normal attributes, ext2 attributes can only<\/code><\/div>\n<div class=\"line number42 index41 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">be set if we have a file descriptor (a file name isn't sufficient).<\/code><\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">We don't need write access to set the ext2 attributes, so O_RDONLY is fine. *\/<\/code><\/div>\n<div class=\"line number44 index43 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">fd = open(*filename, O_RDONLY);<\/code><\/div>\n<div class=\"line number45 index44 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(fd &lt;\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">) {<\/code><\/div>\n<div class=\"line number46 index45 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">fprintf(stderr,\u00a0<\/code><code class=\"java string\">\"cannot open %s: %s\\n\"<\/code><code class=\"java plain\">, *filename, strerror(errno));<\/code><\/div>\n<div class=\"line number47 index46 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">continue<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number48 index47 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number49 index48 alt2\"><\/div>\n<div class=\"line number50 index49 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* Sets the attributes as specified by the contents of flags. *\/<\/code><\/div>\n<div class=\"line number51 index50 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(ioctl(fd, FS_IOC_GETFLAGS, &amp;old_flags) == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">) {<\/code><\/div>\n<div class=\"line number52 index51 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">fprintf(stderr,\u00a0<\/code><code class=\"java string\">\"ioctl failed on %s: %s\\n\"<\/code><code class=\"java plain\">, *filename, strerror(errno));<\/code><\/div>\n<div class=\"line number53 index52 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">close(fd);<\/code><\/div>\n<div class=\"line number54 index53 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">continue<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number55 index54 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}\u00a0<\/code><code class=\"java keyword\">else<\/code>\u00a0<code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number56 index55 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"current attrs: 0x%08x\\n\"<\/code><code class=\"java plain\">, old_flags);<\/code><\/div>\n<div class=\"line number57 index56 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/\/ old_flags |= FS_IMMUTABLE_FL;<\/code><\/div>\n<div class=\"line number58 index57 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/\/ printf(\"\\nold_flags |= FS_IMMUTABLE_FL &gt;&gt;&gt; old_flags = 0x%08x\\n\", old_flags);<\/code><\/div>\n<div class=\"line number59 index58 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number60 index59 alt1\"><\/div>\n<div class=\"line number61 index60 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(strchr(argv[<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">],\u00a0<\/code><code class=\"java string\">'I'<\/code><code class=\"java plain\">)) old_flags |= FS_IMMUTABLE_FL;<\/code><\/div>\n<div class=\"line number62 index61 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(strchr(argv[<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">],\u00a0<\/code><code class=\"java string\">'A'<\/code><code class=\"java plain\">)) old_flags |= FS_APPEND_FL;<\/code><\/div>\n<div class=\"line number63 index62 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(strchr(argv[<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">],\u00a0<\/code><code class=\"java string\">'S'<\/code><code class=\"java plain\">)) old_flags |= FS_SYNC_FL;<\/code><\/div>\n<div class=\"line number64 index63 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(strchr(argv[<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">],\u00a0<\/code><code class=\"java string\">'N'<\/code><code class=\"java plain\">)) old_flags |= FS_NODUMP_FL;<\/code><\/div>\n<div class=\"line number65 index64 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"\\nold_flags = 0x%08x\\n\"<\/code><code class=\"java plain\">, old_flags);<\/code><\/div>\n<div class=\"line number66 index65 alt1\"><\/div>\n<div class=\"line number67 index66 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* Sets the attributes as specified by the contents of flags. *\/<\/code><\/div>\n<div class=\"line number68 index67 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(ioctl(fd, FS_IOC_SETFLAGS, &amp;old_flags) == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">) {<\/code><\/div>\n<div class=\"line number69 index68 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">fprintf(stderr,\u00a0<\/code><code class=\"java string\">\"ioctl failed on %s: %s\\n\"<\/code><code class=\"java plain\">, *filename, strerror(errno));<\/code><\/div>\n<div class=\"line number70 index69 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">close(fd);<\/code><\/div>\n<div class=\"line number71 index70 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">continue<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number72 index71 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number73 index72 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">close(fd);<\/code><\/div>\n<div class=\"line number74 index73 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number75 index74 alt2\"><\/div>\n<div class=\"line number76 index75 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java value\">0<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number77 index76 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>\u7136\u540e\u518d\u8bf4\u4e00\u4e0b\u5728\u4fee\u6539\u8fc7\u7a0b\u4e2d\u78b0\u5230\u7684\u95ee\u9898\uff1a<\/p>\n<h6 id=\"Linux\u4e0b\u7528C\u8bed\u8a00\u5b9e\u73b0lsattr\/chattr\u547d\u4ee4\u7684\u529f\u80fd-\u95ee\u9898\u4e00\u3001\u65e0\u6cd5\u7f16\u8bd1\u6210\u529f\uff0c\u62a5\u9519\u5982\u4e0b\uff1a\">\u95ee\u9898\u4e00\u3001\u65e0\u6cd5\u7f16\u8bd1\u6210\u529f\uff0c\u62a5\u9519\u5982\u4e0b\uff1a<\/h6>\n<blockquote><p>\/usr\/include\/linux\/ext2_fs.h: In function \u2018ext2_mask_flags\u2019:<br \/>\n\/usr\/include\/linux\/ext2_fs.h:182: error: \u2018FS_DIRSYNC_FL\u2019 undeclared (first use in this function)<br \/>\n\/usr\/include\/linux\/ext2_fs.h:182: error: (Each undeclared identifier is reported only once<br \/>\n\/usr\/include\/linux\/ext2_fs.h:182: error: for each function it appears in.)<br \/>\n\/usr\/include\/linux\/ext2_fs.h:182: error: \u2018FS_TOPDIR_FL\u2019 undeclared (first use in this function)<br \/>\n\/usr\/include\/linux\/ext2_fs.h:184: error: \u2018FS_NODUMP_FL\u2019 undeclared (first use in this function)<br \/>\n\/usr\/include\/linux\/ext2_fs.h:184: error: \u2018FS_NOATIME_FL\u2019 undeclared (first use in this function)<\/p><\/blockquote>\n<p>\u539f\u56e0\uff1a<\/p>\n<p>\u9700\u8981\u5728\u300c#include &lt;linux\/ext2_fs.h&gt;\u300d\u4e4b\u524d\u5148\u5f15\u5165\u300c#include &lt;linux\/fs.h&gt;\u300d\uff0c\u6709\u4e00\u4e2a\u987a\u5e8f\u5173\u7cfb\uff01<\/p>\n<h6 id=\"Linux\u4e0b\u7528C\u8bed\u8a00\u5b9e\u73b0lsattr\/chattr\u547d\u4ee4\u7684\u529f\u80fd-\u95ee\u9898\u4e8c\uff1a\u6267\u884c\u300cioctl(fd,FS_IOC_SETFLAGS,&amp;flags)\u300d\u65f6\u62a5\u9519\u300cOperationnotsupported\u300d\"><span style=\"color: #ff0000;\">\u95ee\u9898\u4e8c\uff1a\u6267\u884c\u300cioctl(fd, FS_IOC_SETFLAGS, &amp;flags)\u300d\u65f6\u62a5\u9519\u300cOperation not supported\u300d<\/span><\/h6>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_54332\" class=\"syntaxhighlighter sh-confluence nogutter java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">current flags:\u00a0<\/code><code class=\"java value\">0x00080000<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">desire flags =\u00a0<\/code><code class=\"java value\">0x00080010<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">ioctl(flags) =\u00a0<\/code><code class=\"java value\">0x00000010<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">ioctl failed on filename: Operation not supported<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>\u539f\u56e0\uff1a<\/p>\n<p>\u5728\u8bed\u53e5\u300cioctl(fd, FS_IOC_SETFLAGS, &amp;flags)\u300d\u91cc\u9762\u4f7f\u7528\u7684flags\u53d8\u91cf\u7684\u503c\u4e0d\u80fd\u662f0\u548cFS_IMMUTABLE_FL\u7b49\u53d8\u91cf\u7684\u5f02\u6216\u503c\uff0cflags\u7684\u521d\u59cb\u503c\u6700\u597d\u4e3a\u6587\u4ef6\u539f\u5148\u7684\u5c5e\u6027\u503c\uff08\u4e00\u822c\u4e3a524288\uff0c\u5341\u516d\u8fdb\u5236\u8868\u793a\u4e3a0x00080000\uff09\uff0c\u518d\u548c\u9700\u8981\u8bbe\u7f6e\u7684FS_IMMUTABLE_FL\u7b49\u53d8\u91cf\u8fdb\u884c\u5f02\u6216\uff0c\u7136\u540e\u4f5c\u4e3aioctl\u7684\u53c2\u6570\u624d\u4e0d\u4f1a\u62a5\u9519\u3002<\/p>\n<p>\u6240\u4ee5\uff0c\u63a8\u8350\u7684\u89e3\u51b3\u529e\u6cd5\u5c31\u662f\u5148\u300cioctl(fd,\u00a0FS_IOC_GETFLAGS, &amp;old_flags)\u300d\uff0c\u7136\u540e\u5bf9old_flags\u8fdb\u884c\u5f02\u6216\uff0c\u6700\u540e\u6267\u884c\u300cioctl(fd, FS_IOC_SETFLAGS, &amp;old_flags)\u300d\u3002<\/p>\n<h5 id=\"Linux\u4e0b\u7528C\u8bed\u8a00\u5b9e\u73b0lsattr\/chattr\u547d\u4ee4\u7684\u529f\u80fd-\u53c2\u8003\u94fe\u63a5\uff1a\">\u53c2\u8003\u94fe\u63a5\uff1a<\/h5>\n<p>#\u51fd\u6570\u624b\u518c<br \/>\n<a class=\"external-link\" href=\"http:\/\/man7.org\/linux\/man-pages\/man2\/ioctl.2.html\" rel=\"nofollow\">http:\/\/man7.org\/linux\/man-pages\/man2\/ioctl.2.html<\/a><br \/>\n<a class=\"external-link\" href=\"http:\/\/man7.org\/linux\/man-pages\/man2\/ioctl_iflags.2.html\" rel=\"nofollow\">http:\/\/man7.org\/linux\/man-pages\/man2\/ioctl_iflags.2.html<\/a><\/p>\n<p>#\u9519\u8bef\u7248\u672c\uff08\u53ea\u5dee\u4e00\u70b9\u70b9\uff09<br \/>\n<a class=\"external-link\" href=\"https:\/\/stackoverflow.com\/questions\/16961592\/performing-the-equivalent-of-chattr-i-filename-txt-from-linux-application\" rel=\"nofollow\">https:\/\/stackoverflow.com\/questions\/16961592\/performing-the-equivalent-of-chattr-i-filename-txt-from-linux-application<\/a><br \/>\n<a class=\"external-link\" href=\"http:\/\/www.danlj.org\/lad\/src\/setflags.c.html\" rel=\"nofollow\">http:\/\/www.danlj.org\/lad\/src\/setflags.c.html<\/a><br \/>\n<a class=\"external-link\" href=\"https:\/\/stackoverflow.com\/questions\/32488017\/how-do-i-chattr-i-an-open-file-descriptor-in-c\" rel=\"nofollow\">https:\/\/stackoverflow.com\/questions\/32488017\/how-do-i-chattr-i-an-open-file-descriptor-in-c<\/a><\/p>\n<p>#\u6210\u529f\u7248\u672c\uff08\u5199\u5f97\u592a\u590d\u6742\u4e86\uff09<br \/>\n<a class=\"external-link\" href=\"https:\/\/github.com\/posborne\/linux-programming-interface-exercises\/blob\/master\/15-file-attributes\/chattr.c\" rel=\"nofollow\">https:\/\/github.com\/posborne\/linux-programming-interface-exercises\/blob\/master\/15-file-attributes\/chattr.c<\/a><\/p>\n<p>#FS_DIRSYNC_FL\u7b49\u53d8\u91cf\u672a\u5b9a\u4e49\u9519\u8bef<br \/>\n<a class=\"external-link\" href=\"https:\/\/stackoverflow.com\/questions\/6969303\/whats-wrong-with-linux-ext2-fs-h\" rel=\"nofollow\">https:\/\/stackoverflow.com\/questions\/6969303\/whats-wrong-with-linux-ext2-fs-h<\/a><br \/>\n<a class=\"external-link\" href=\"https:\/\/ubuntuforums.org\/showthread.php?t=1408802\" rel=\"nofollow\">https:\/\/ubuntuforums.org\/showthread.php?t=1408802<\/a><br \/>\n<a class=\"external-link\" href=\"http:\/\/forum.ubuntu.org.cn\/viewtopic.php?f=77&amp;t=319496\" rel=\"nofollow\">http:\/\/forum.ubuntu.org.cn\/viewtopic.php?f=77&amp;t=319496<\/a><\/p>\n<p>=END=<\/p>\n","protected":false},"excerpt":{"rendered":"<p>=Start= \u7f18\u7531\uff1a \u5b66\u4e60\u3001\u63d0\u9ad8\u9700\u8981 \u6b63\u6587\uff1a \u53c2\u8003\u89e3\u7b54\uff1a \u4e4b\u524d\u5bf9ioctl()\u51fd\u6570\u4e0d\u719f\uff0c\u5bfc\u81f4\u5728\u7528\u5b83\u5b9e\u73b0lsa [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,11,7],"tags":[100,490,884,30,716],"class_list":["post-3547","post","type-post","status-publish","format-standard","hentry","category-knowledgebase-2","category-linux","category-programing","tag-c","tag-chattr","tag-ioctl","tag-linux","tag-lsattr"],"views":5662,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=3547"}],"version-history":[{"count":1,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3547\/revisions"}],"predecessor-version":[{"id":3548,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3547\/revisions\/3548"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=3547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=3547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=3547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}