读书人

如果发挥出C语言的威力,该如何解决

发布时间: 2012-09-11 10:49:03 作者: rapoo

如果发挥出C语言的威力
感觉自己现在只能用C语言写些简单的程序,比如写个命令行界面的信息管理啦,什么的,C语言很强大,几乎可以做任何事情,
我想知道,如何用C直接去操控硬件,或者做一些很有深度的东西。
比如说操作系统,LINUX,内核部分是用C实现的等等
怎样去学习这方面的东西,不让自己的C语言水平只停留在一般水平。
看世界编程语言排行,C语言第一,占那么大的份额,主要用在了哪些方面?

[解决办法]

探讨
楼主去下载个linux0.1版本。一万行的代码,基本是C写的。告诉你怎么用C驱动X386的机器。

[解决办法]
linux 驱动,协议栈都可以看,后者浏览器的http协议实现 ,apache源码
[解决办法]
C实现算法、操作系统、数据结构、编译器,这才是C的领域

大部分和用户直接接触的东西用C做都说明用错了语言


[解决办法]
那么多开源代码, 你有能力就去读, 没能力就去读书打基础.
[解决办法]
C/C++ code
//输出PROG中有但LIST中没有的文本行,即集合PROG-LIST#include <stdio.h>#include <string.h>#include <stdlib.h>#include <search.h>#define MAXLINES 1000000#define MAXCHARS 256char buf[MAXLINES][MAXCHARS];char P[256]="PROG";//程序Program需要的文件列表char L[256]="LIST";//dir /b /s生成的实际文件列表ListFILE *fp,*fl;int c,n,L1,hh;int ignore_case=0;char ln[MAXCHARS];int icompare(const void *arg1,const void *arg2) {   return stricmp((char *)arg1,(char *)arg2);}int compare(const void *arg1,const void *arg2) {   return strcmp((char *)arg1,(char *)arg2);}int main(int argc,char **argv) {    if (argc>1) strcpy(P,argv[1]);//命令行参数1覆盖PROG    if (argc>2) strcpy(L,argv[2]);//命令行参数2覆盖LIST    if (argc>3) ignore_case=1;//若存在命令行参数3,忽略大小写    if ((fl=fopen(L,"rt"))==NULL) {        fprintf(stderr,"Can not open %s\n",L);        fprintf(stderr,"Usage: %s [PROG] [LIST] [-i]\n",argv[0]);        return 1;    }    if ((fp=fopen(P,"rt"))==NULL) {        fclose(fl);        fprintf(stderr,"Can not open %s\n",P);        return 2;    }    n=0;    hh=0;    while (1) {        if (fgets(ln,MAXCHARS,fl)==NULL) break;//        hh++;        L1=strlen(ln)-1;        if ('\n'!=ln[L1]) {//超长行忽略后面内容            fprintf(stderr,"%s Line %d too long(>%d),spilth ignored.\n",L,hh,MAXCHARS);            while (1) {                c=fgetc(fl);                if ('\n'==c || EOF==c) break;//            }        }        while (1) {//去掉行尾的'\n'和空格            if ('\n'==ln[L1] || ' '==ln[L1]) {                ln[L1]=0;                L1--;                if (L1<0) break;//            } else break;//        }        if (L1>=0) {            strcpy(buf[n],ln);            n++;            if (n>=MAXLINES) {                fclose(fl);                fclose(fp);                fprintf(stderr,"%s up to %d lines",L,MAXLINES);                return 3;            }        }    }    fclose(fl);    if (ignore_case) qsort(buf,n,MAXCHARS,icompare);    else qsort(buf,n,MAXCHARS,compare);    hh=0;    while (1) {        if (fgets(ln,MAXCHARS,fp)==NULL) break;//        hh++;        L1=strlen(ln)-1;        if ('\n'!=ln[L1]) {//超长行忽略后面内容            fprintf(stderr,"%s Line %d too long(>%d),spilth ignored.\n",P,hh,MAXCHARS);            while (1) {                c=fgetc(fp);                if ('\n'==c || EOF==c) break;//            }        }        while (1) {//去掉行尾的'\n'和空格            if ('\n'==ln[L1] || ' '==ln[L1]) {                ln[L1]=0;                L1--;                if (L1<0) break;//            } else break;//        }        if (L1>=0) {            if (ignore_case) {                if (NULL==bsearch(ln,buf,n,MAXCHARS,icompare)) printf("%s\n",ln);            } else {                if (NULL==bsearch(ln,buf,n,MAXCHARS,compare)) printf("%s\n",ln);            }        }    }    fclose(fp);    return 0;}
------解决方案--------------------


探讨
C实现算法、操作系统、数据结构、编译器,这才是C的领域

大部分和用户直接接触的东西用C做都说明用错了语言

读书人网 >C语言

热点推荐