zoukankan      html  css  js  c++  java
  • 《UNIX环境高级编程》学习心得 二

    窝萌来看我们看到这本书里的第一个程序

     1 #include "apue.h"
     2 #include <dirent.h>
     3 
     4 int
     5 main(int argc, char *argv[])
     6 {
     7     DIR                *dp;
     8     struct dirent    *dirp;
     9 
    10     if (argc != 2)
    11         err_quit("usage: ls directory_name");
    12 
    13     if ((dp = opendir(argv[1])) == NULL)
    14         err_sys("can't open %s", argv[1]);
    15     while ((dirp = readdir(dp)) != NULL)
    16         printf("%s
    ", dirp->d_name);
    17 
    18     closedir(dp);
    19     exit(0);
    20 }

    这个程序呢,几乎和linux系统中没有选项的ls命令的作用是一样的,显示一个目录中的所有文件(不包括隐藏文件)的名称。

    他先是使用了大师自己编写的一个头文件。这个头文件里面包含了很多常量(如MAXLINE)和大师自编函数的原型。同时也包含了<stdio.h>、<stdilb.h>、<unistd.h>和<string.h>这样常用的头文件,以减少书中代码的长度。

    接下来他使用了dirent.h的头文件。这个头文件呢是POSIX.1标准定义的unix类目录操作的头文件,包含了许多UNIX系统服务的函数原型,例如opendir函数、readdir函数.

    接下来就是主函数了。看到主函数main里面的参数呢,很多人就困惑了,这里面的参数是什么东西!对于惯用windows的孩子来说,argc和argv是非常陌生的一种东西。argc存放的是命令行参数的个数,命令行参数呢就储存在argv这个数组里了。举个栗子,看如下代码。

     1 #include <stdio.h>
     2 int main(int argc, char *argv[])
     3 {
     4         int n = argc, i;
     5         printf("%d
    ", n);
     6         for(i = 0; i < n; i++)
     7         {
     8                 printf("%s
    ", argv[i]);
     9         }
    10         return 0;
    11 }

    我将其编译后,在终端中输入如下指令

    ./a.out I love loli
    

    它会给我作如下显示:

    4
    ./a.out
    I
    love
    loli
    

    argc默认值为1,也就是我执行这个程序的路径,参数之间用空格分隔。通过这个例子应该能让大家理解这个argc和argv了吧。

    代码中间有两个出错处理,是大师自编的,在大师自编的头文件里可以找到它的原型和解释。

    至于中间的opendir和readdir呢,就是打开目录和读取目录的函数,这些都在dirent.h头文件里,这些我将会在以后的章节详细解释。

    本书中的代码在没有任何基础的情况下呢,是非常晦涩难懂的,但是它的结构和思路却是非常清晰,所以我在这里给大家科普一下,方便大家以后的学习。

  • 相关阅读:
    Microsoft .NET Framework 2.0实现发送邮件(Email)总结
    Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总
    抽象类
    WingIDE 单步调试 Uliweb Python 代码
    Android 4.0 SDK的离线方式安装
    .NET 3.5 中WCF客户端代理性能改进以及最佳实践
    在linux上部署Redmine
    认识jQuery mobile 框架,资源,书籍
    如何使用搜索技巧来成为一名高效的程序员
    Management Console 工具管理类软件通用开发框架(开放源码)
  • 原文地址:https://www.cnblogs.com/night163/p/4976410.html
Copyright © 2011-2022 走看看