﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-戏水游鱼的blog</title><link>http://www.cnitblog.com/zwd321081/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 04 May 2026 21:01:32 GMT</lastBuildDate><pubDate>Mon, 04 May 2026 21:01:32 GMT</pubDate><ttl>60</ttl><item><title>Linux学习笔记（1）－－文件信息</title><link>http://www.cnitblog.com/zwd321081/archive/2008/05/10/43571.html</link><dc:creator>戏水游鱼</dc:creator><author>戏水游鱼</author><pubDate>Sat, 10 May 2008 03:59:00 GMT</pubDate><guid>http://www.cnitblog.com/zwd321081/archive/2008/05/10/43571.html</guid><wfw:comment>http://www.cnitblog.com/zwd321081/comments/43571.html</wfw:comment><comments>http://www.cnitblog.com/zwd321081/archive/2008/05/10/43571.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/zwd321081/comments/commentRss/43571.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/zwd321081/services/trackbacks/43571.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linux学习笔记的第一部分的最终目的是模拟一个ls命令。下面贴出的是如何获取文件信息的代码<br><br>&nbsp; 1 #include &lt;stdio.h&gt;<br>&nbsp; 2 #include &lt;sys/types.h&gt;<br>&nbsp; 3 #include &lt;sys/stat.h&gt;<br>&nbsp; 4 #include &lt;unistd.h&gt;<br>&nbsp; 5 <br>&nbsp; 6 int main(int argc, char* argv[]) //argc 外部命令的个数 argv 外部命令内容<br>&nbsp; 7 {<br>&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp; struct stat file_stat;&nbsp; //定义为stat的结构体file_stat,用于保存文件信息<br>&nbsp; 9 <br>&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp; if(argc != 2){//判断程序是否带有一个参数，没有给出提示。1表示执行程序<br>&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Usage:%s filename\n",argv[0]);<br>&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br>&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;14 <br>&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp; //调用stat函数，如果出错，给出提示<br>&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp; if(stat(argv[1],&amp;file_stat) == -1){<br>&nbsp;17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perror("Cannot get the information of the file!\n");<br>&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br>&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;20 <br>&nbsp;21&nbsp;&nbsp;&nbsp;&nbsp; //使用POSIX中定义的宏判断是否是常规文件<br>&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp; if(S_ISREG(file_stat.st_mode))<br>&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%s is regular File,Judged by S_ISREG\n",argv[1]);<br>&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp; //通过st_mode与S_IFREG的位运算判断是否是常规文件（linux提供的方式）<br>&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp; if(file_stat.st_mode &amp; S_IFREG)<br>&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%s is regular File,Judged by S_ISREG\n",argv[1]);<br>&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp; //通过S_ISDIR宏判断是否是目录<br>&nbsp;28&nbsp;&nbsp;&nbsp;&nbsp; if(S_ISDIR(file_stat.st_mode))<br>&nbsp;29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%s is Directory,Judged by S_ISDIR\n",argv[1]);<br>&nbsp;30&nbsp;&nbsp;&nbsp;&nbsp; //通过st_mode与S_IFDIR的位运算判断是否是目录<br>&nbsp;31&nbsp;&nbsp;&nbsp;&nbsp; if(file_stat.st_mode &amp; S_IFDIR)<br>&nbsp;32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%s is Directory,Judged by bit calculate S_ISDIR\n",argv[1]);<br>&nbsp;33 <br>&nbsp;34&nbsp;&nbsp;&nbsp;&nbsp; //输出file_stat中其他的信息<br>&nbsp;35&nbsp;&nbsp;&nbsp;&nbsp; printf("Owner ID: %d,Group ID: %d\n",file_stat.st_uid,file_stat.st_gid);<br>&nbsp;36&nbsp;&nbsp;&nbsp;&nbsp; printf("Last Access Time: %15s\n",ctime(&amp;file_stat.st_atime));<br>&nbsp;37&nbsp;&nbsp;&nbsp;&nbsp; printf("Last Modification Time: %15s\n",ctime(&amp;file_stat.st_mtime));<br>&nbsp;38&nbsp;&nbsp;&nbsp;&nbsp; printf("Last Status Change Time: %15s\n",ctime(&amp;file_stat.st_ctime));<br>&nbsp;39 <br>&nbsp;40&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>&nbsp;41 }<br><br>执行结果：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mkdir test;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ls -l<br>-rwxr-xr-x 1 zwd zwd 7128 2008-05-06 14:49 open<br>-rw-r--r-- 1 zwd zwd&nbsp; 672 2008-05-06 14:57 open.c<br>-rwxr-xr-x 1 zwd zwd 7461 2008-05-10 11:46 stat<br>-rw-r--r-- 1 zwd zwd 1593 2008-05-10 11:46 stat.c<br>drwxr-xr-x 2 zwd zwd 4096 2008-05-10 11:46 test<br>-rw-r--r-- 1 zwd zwd&nbsp;&nbsp; 10 2008-05-06 14:44 test.dat<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./stat test<br>test is Directory,Judged by S_ISDIR<br>test is Directory,Judged by bit calculate S_ISDIR<br>Owner ID: 1000,Group ID: 1000<br>Last Access Time: Sat May 10 11:46:21 2008<br>Last Modification Time: Sat May 10 11:46:21 2008<br>Last Status Change Time: Sat May 10 11:46:21 2008<br><br>
<br><br>
<br><br>stat文件类型可以查看手册Linux programmer's manual <br>ps:谁能告诉一下，如何将代码呈现高亮，这样看起来比较方便。我在vim上的代码是高亮的，但是不知道如何粘贴。谢谢<br><br>
<br><br><br> <img src ="http://www.cnitblog.com/zwd321081/aggbug/43571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/zwd321081/" target="_blank">戏水游鱼</a> 2008-05-10 11:59 <a href="http://www.cnitblog.com/zwd321081/archive/2008/05/10/43571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux学习笔记（1）－－文件操作</title><link>http://www.cnitblog.com/zwd321081/archive/2008/05/08/43509.html</link><dc:creator>戏水游鱼</dc:creator><author>戏水游鱼</author><pubDate>Thu, 08 May 2008 07:29:00 GMT</pubDate><guid>http://www.cnitblog.com/zwd321081/archive/2008/05/08/43509.html</guid><wfw:comment>http://www.cnitblog.com/zwd321081/comments/43509.html</wfw:comment><comments>http://www.cnitblog.com/zwd321081/archive/2008/05/08/43509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/zwd321081/comments/commentRss/43509.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/zwd321081/services/trackbacks/43509.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;    开个博客，记录下自己的学习历程。我尽量写的详细点，好好学学。
&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 参考书：《linux 编程技术详解》人民邮电出版社  杜华。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 《The c programme language》 <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;linux 的文件操作一般分打开，操作，关闭三个阶段。主要用的函数有open,read,fork,close等这几个函数。关于函数的具体用法，可以参考linux编程手册（有个中文版）。
<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 代码：<br>&nbsp; 1 #include &lt;stdio.h&gt;<br>&nbsp; 2 #include &lt;sys/types.h&gt;<br>&nbsp; 3 #include &lt;sys/stat.h&gt;<br>&nbsp; 4 #include &lt;fcntl.h&gt;<br>&nbsp; 5 <br>&nbsp; 6 int main()<br>&nbsp; 7 {<br>&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp; char test;<br>&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp; int fd;&nbsp;&nbsp; //接受文件描述符（一个很小的整数，返回打开文件的信息）<br>&nbsp;10 <br>&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp; if((fd = open("test.dat",O_RDONLY)) == -1){&nbsp;&nbsp;&nbsp; //打开文件，以只读方式打开。失败，给出提示<br>&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perror("Cannot open the test.dat");&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;14 <br>&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp; if(fork() == -1){&nbsp;&nbsp; //用fork创建一个子进程（父进程返回子进程的进程号，子进程返回0）<br>&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perror("Cannot Create the child process");<br>&nbsp;17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br>&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;19 <br>&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp; read(fd,&amp;test,1); //读取test.dat文件中的一个字符，将其保存在名为test中<br>&nbsp;21 <br>&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp; //输出运行结果，函数getpid获得进程的进程号<br>&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp; printf("Process ID: %ld readthe character : %c\n",(long)getpid(),test);<br>&nbsp;24 <br>&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp; //关闭文件，注意这里实际上是关闭两次（父子）<br>&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp; close(fd);<br>&nbsp;27 <br>&nbsp;28&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>&nbsp;29 }<br><br>int open(const char *pathname, int flag); 返回一个文件标识符<br>ssize_t read(int fd, int *buf, int count);&nbsp;&nbsp; //read函数从fd中读取count个字节，放入buf中。<br>pid_t fork(void);<br>printf: %c&nbsp;&nbsp; 单个字符<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %d&nbsp; 十进制整数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %e&nbsp; 科学计数法的十进制表示<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %f&nbsp; 浮点数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %s&nbsp; 字符串<br>int close(int fd);&nbsp; 成功0，失败－1<br> <img src ="http://www.cnitblog.com/zwd321081/aggbug/43509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/zwd321081/" target="_blank">戏水游鱼</a> 2008-05-08 15:29 <a href="http://www.cnitblog.com/zwd321081/archive/2008/05/08/43509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>