<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>转烛空间权限 &#187; </title>
	<atom:link href="http://wangliping.net/tag/%e6%9d%83%e9%99%90/feed" rel="self" type="application/rss+xml" />
	<link>http://wangliping.net</link>
	<description>记录生活，学习技术</description>
	<lastBuildDate>Fri, 30 Jul 2010 02:30:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>C语言查看和更改文件的权限</title>
		<link>http://wangliping.net/c-change-file-permission</link>
		<comments>http://wangliping.net/c-change-file-permission#comments</comments>
		<pubDate>Mon, 25 Jan 2010 08:55:44 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[编程技术]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[chmod]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[权限]]></category>

		<guid isPermaLink="false">http://wangliping.net/c-change-file-permission</guid>
		<description><![CDATA[有时候需要在程序里获得某个文件的权限信息，正如在Linux下用ls -l命令可以查看权限，那么在C语言中同样有函数可以实现这样的功能。]]></description>
			<content:encoded><![CDATA[<p>　　有时候需要在程序里获得某个文件的权限信息，正如在Linux下用ls -l命令可以查看权限，那么在C语言中同样有函数可以实现这样的功能。</p>
</p>
<p><span id="more-619"></span><br />
<blockquote>
<p>#include &lt;stdio.h&gt;<br />#include &lt;sys/stat.h&gt;
<p>void main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *fileName = "/home/user/test/myfile";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct stat fileInfo;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (stat(fileName, &amp;fileInfo) &lt; 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(0);
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int mask = 0000777;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int access = mask &amp; fileInfo.st_mode;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%o\n%d\n", access, fileInfo.st_uid);<br />}</p>
</blockquote>
<p>　　关于更多的信息，诸如用户和组的信息，fileInfo.st_uid等等，可以查询stat结构，里面有很多的信息。</p>
<blockquote><p>struct&nbsp; stat<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp; dev_t&nbsp;&nbsp;&nbsp; st_dev;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*device*/<br />&nbsp;&nbsp;&nbsp;&nbsp; ino_t&nbsp;&nbsp;&nbsp;&nbsp; st_ino;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*inode*/<br />&nbsp;&nbsp;&nbsp;&nbsp; mode_t st_mode;&nbsp;&nbsp;&nbsp; /*protection*/<br />&nbsp;&nbsp;&nbsp;&nbsp; nlink_t&nbsp;&nbsp; st_nlink;&nbsp;&nbsp;&nbsp;&nbsp; /*number of hard&nbsp; links */<br />&nbsp;&nbsp;&nbsp;&nbsp; uid_t&nbsp;&nbsp;&nbsp;&nbsp; st_uid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*user ID of owner*/<br />&nbsp;&nbsp;&nbsp;&nbsp; gid_t&nbsp;&nbsp;&nbsp;&nbsp; st_gid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*group ID of owner*/<br />&nbsp;&nbsp;&nbsp;&nbsp; dev_t&nbsp;&nbsp;&nbsp; st_rdev;&nbsp;&nbsp;&nbsp;&nbsp; /*device type (if inodedevice)*/<br />&nbsp;&nbsp;&nbsp;&nbsp; off_t&nbsp;&nbsp;&nbsp;&nbsp; st_size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*total size,&nbsp; in bytes*/<br />&nbsp;&nbsp;&nbsp;&nbsp; unsigned long&nbsp; st_blksize;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*blocksize for filesystem I/O*/<br />&nbsp;&nbsp;&nbsp;&nbsp; unsigned long&nbsp; st_blocks;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* number of blocks allocated*/<br />&nbsp;&nbsp;&nbsp;&nbsp; time_t&nbsp;&nbsp; st_atime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*time of last access*/<br />&nbsp;&nbsp;&nbsp;&nbsp; time_t&nbsp;&nbsp; st_mtime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*time of last modification*/<br />&nbsp;&nbsp;&nbsp;&nbsp; time_t&nbsp;&nbsp; st_ctime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*time of last change*/<br />};</p>
</blockquote>
<p>　　当然你也可能更改文件的权限信息，譬如本来一个文件是0600的权限，你想更改为0644的权限，即如同Linux下chmod命令。在Linux下我们可以用：<br />
<blockquote>
<p>#chmod 0644 myfile</p>
</blockquote>
<p>　　来更改文件的权限，那么在C语言下，其实也提供了类似的函数。<br />
<blockquote>
<p>#include &lt;stdio.h&gt;<br />#include &lt;sys/stat.h&gt;
<p>void main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *fileName = "/home/user/test/myfile";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chmod(fileName, 0644);<br />}</p>
</blockquote>
<p>　　其实呢，还有<a href="http://man.chinaunix.net/develop/c&amp;c++/linux_c/main.htm" target="_blank">更多的函数</a>，跟Linux里的命令很相近。</p>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/how-to-use-fdisk-in-linux" title="实例解说 fdisk 使用方法">实例解说 fdisk 使用方法</a></li><li><a href="http://wangliping.net/c-file-find-out" title="C语言实现文件查找操作">C语言实现文件查找操作</a></li><li><a href="http://wangliping.net/source-insight-see-source-code" title="Source-Insight-看大规模大工程源代码">Source-Insight-看大规模大工程源代码</a></li><li><a href="http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen" title="Linux下测试键盘鼠标触摸屏触摸板">Linux下测试键盘鼠标触摸屏触摸板</a></li><li><a href="http://wangliping.net/cpp-link-sort-override-wrfile" title="C++单链表冒泡排序、运算符重载和文件读写">C++单链表冒泡排序、运算符重载和文件读写</a></li><li><a href="http://wangliping.net/linux_mem_info_watch" title="Linux内存信息查看相关">Linux内存信息查看相关</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/c-change-file-permission/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
