免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3537 | 回复: 15
打印 上一主题 下一主题

发布一段自己的小程序,以结交学习unix下C编程的朋友! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-09 21:51 |只看该作者 |倒序浏览
本人因做毕业设计,学习C编程已有一个月了,但这段时间的学习进展很慢,一直想多结交些同样在学习unix下C编程的朋友。以下是本人写的一个小程序,是用来读取配置文件中的参数的。希望大家多多指正,同时也希望能起到抛砖引玉的作用,大家都发布一下自己的觉得有用的代码。
我的联系方式:zhguowen0103@hotmail.com (MSN:加好友时请注明“共同学C”。

说明:
本人开发环境:OS:AIX 5.2-03 编译器:IBM(R) XL C Enterprise Edition V7.0 这段程序是用来在当前目录下一个文件中读取disk_int and cpu_int两个参数的值,要求文件的格式为:

…………
disk_int 30
cpu_int 5
…………

程序代码:

#include <stdio.h>   
#include <string.h>  
#include <fcntl.h>

char temp_d[8];
char temp[4096];
char *p;
int temp_i=0;
const char tmp1[8]="cpu_int";
const char tmp2[9]="disk_int";

/* 将要取的参数字符串读入数组temp_d中 */
void get_str(char *p)
{
        int i=0;
        while ((*p>='0')&&(*p<='9'))
            {
                    temp_d=*p;
                    temp_i=i;
                    i++;
                    p++;
                    temp_d='\0';
            }
        return;
}

/*计算数组temp_d中字符串的算术值*/
int get_value()
{
        int i=0;
        int j=0;
        for (i=0;i<=temp_i;i++)
        {
                j*=10;
                j+=temp_d-48;
        }
        return j;
}

int main(int argc, char* argv[])
{
        int fd,aa;

        if (argc != 2)
        {
                printf("Only one file can be input");
                return;
        }
        if ((fd=open(argv[1],O_RDONLY))== -1)
        {                                                                  
                printf("cannot open file1");                                         
                exit ( 0 ) ;                                                     
        }  
        read (fd,temp,4096);/*将文件中的内容读入数组temp中*/
        p=strstr(temp,tmp1);
        while(*p!=' '&&*p!='=')
            p++;
        p++;

        get_str(p);
        aa=get_value();
        printf("cpu_int =%d\n",aa);
                                              
        p=strstr(temp,tmp2);
        while(*p!=' ')
                    p++;
            p++;
        get_str(p);
        aa=get_value();
        printf("disk_int =%d\n",aa);
        return;
}

论坛徽章:
0
2 [报告]
发表于 2007-05-09 22:08 |只看该作者
"本人因做毕业设计,学习C编程已有一个月了"
不是吧,到毕业设计时候才学C一个月?看来你是提前毕业了

论坛徽章:
0
3 [报告]
发表于 2007-05-09 23:40 |只看该作者
void get_str(char *p)
没有必要传指针

void get_str(char p)
就可以了,调用时:
get_str(*p);

论坛徽章:
0
4 [报告]
发表于 2007-05-10 00:17 |只看该作者
原帖由 epegasus 于 2007-5-9 22:08 发表
"本人因做毕业设计,学习C编程已有一个月了"
不是吧,到毕业设计时候才学C一个月?看来你是提前毕业了


据我了解,只有少部分专业没开c这门课。

论坛徽章:
0
5 [报告]
发表于 2007-05-10 08:30 |只看该作者
楼主的数组用法似乎有些问题
  1.         while ((*p>='0')&&(*p<='9'))
  2.             {
  3.                     temp_d=*p;
  4.                     temp_i=i;
  5.                     i++;
  6.                     p++;
  7.                     temp_d='\0';
  8.             }
复制代码

中的
  1. temp_d=*p;
复制代码

论坛徽章:
0
6 [报告]
发表于 2007-05-10 08:59 |只看该作者
大家发布的比较有用的代码在精华区里多得很的!

论坛徽章:
0
7 [报告]
发表于 2007-05-10 09:35 |只看该作者
呵呵,实现功能都比较容易,关键是差错处理,你的程序健壮性不是很好
建议用LibXML去读配置文件,方便配置文件格式支持很灵活
另外,我想,配置文件应该是树的格式,比如:

  1. ###############config.ini#############
  2. #对系统的说明
  3. [SYSTEM]
  4. ID = 123
  5. IP_ADDR=192.168.0.1
  6. #对客户端说明
  7. [CLIENT]
  8. COUNT  =    3
  9. TIME      =          4324324
  10. NAME = LOCALHOST
复制代码

这样是不是更好点

论坛徽章:
0
8 [报告]
发表于 2007-05-10 10:04 |只看该作者
多谢大家的指点和关注。
我是自考生,三年前确实学过《C语言程序设计》,学得也不深,也差不多都忘了。现在开始做毕业设计了,再次学习C,我的毕设题目是《AIX操作系统壮态监控软件的实现》。这一个月的时间,大多时间不是在学纯C语言的语句等,更多的时间是在了解AIX下的系统函数和unix下编程的知识,我看了《unix环境高级编程》这本书,发现里面好多实例并不能直接拿到AIX下运行。
AIX下的C编程与unix下C编程有何区别?是我一直很困惑的地方,ASCI C / POSIX/SVR4 让我一头雾水。
unix下C编程的教材,讲BSD、Linux、Saloris很多,唯独不讲AIX,IBM厂家提供的手册又太涩,难哪!

[ 本帖最后由 zhguowen 于 2007-5-10 10:15 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-05-10 10:15 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2007-05-10 10:38 |只看该作者
原帖由 zhguowen 于 2007-5-10 10:04 发表
多谢大家的指点和关注。
我是自考生,三年前确实学过《C语言程序设计》,学得也不深,也差不多都忘了。现在开始做毕业设计了,再次学习C,我的毕设题目是《AIX操作系统壮态监控软件的实现》。这一个月的时间,大 ...


Single Unix规范还是要好好读读,我记得AIX是符合Single Unix规范的。
http://blog.chinaunix.net/u/29642/showart_240655.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP