免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1397 | 回复: 0

C写的实现wc和ls函数 [复制链接]

论坛徽章:
0
发表于 2009-10-09 12:38 |显示全部楼层
以下是用linux C写的实现wc功能的函数
#include
#define BEGIN 1;
int main(int argc, char *argv[])
{
    int characters, lines, words, state;
    char c;
    state = characters = lines = words = 0;
    while((c = getchar()) != '0') {
        characters++;
        if(c == '\n') {
            lines++;
            state = 0;
            continue;
        } else if(c == ' ') {
            state = 0;
            continue;
        } else if(c == '\t') {
            state = 0;
            continue;
        } else {
            if(state == 0) {
                state = BEGIN;
                words++;
            }
            continue;
        }
    }
    printf("%d characters. %d words. %d lines.\n", characters, words, lines);
}
以下是用linux C写的实现ls部分功能的函数。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//用lstat函数获取文件的类型
int get_mode(char *file)
{
    struct stat buf;
    char *ptr;
    if(lstat(file, &buf) pw_name);
    strcpy(name2, getpwuid(buf.st_gid)->pw_name);
    printf(" %s %s", name1, name2);
    return 0;
}
//浏览文件夹的内容
struct dirent **scan_dir(int *n)
{
    struct dirent **namelist;
   
    (*n) = scandir(".", &namelist, 0, alphasort);
    if ((*n) d_name[0] != '.') {
            printf("%-s  ", namelist->d_name);
        }
        
        free(namelist);
    }
    printf("\n");
    free(namelist);
    return 0;
}
//实现ls -l的命令
int l_ls()
{
    struct dirent **namelist;
    int n, i;
    long all_size = 0, size;
    char ch[40] = {0};
    namelist = scan_dir(&n);
   
    //得到文件总的大小
    for(i = 0; i d_name[0] != '.') {
            size = get_size(namelist->d_name);
            all_size += size;
        }
    }
    //打印信息
    printf("总用量:%ld\n", all_size);
    for(i = 0; i d_name[0] != '.') {
            get_mode(namelist->d_name);
            get_rwx(namelist->d_name);
            get_nlink(namelist->d_name);
            
            get_name(namelist->d_name);
            printf(" %5ld", get_size(namelist->d_name));
            get_time(namelist->d_name, ch);
            printf(" %s", ch);
            printf(" %s", namelist->d_name);
            printf("\n");
        }
        free(namelist);
    }
    free(namelist);
    return 0;
}
//实现ls -al的命令
int al_ls()
{
    struct dirent **namelist;
    int n, i;
    long all_size = 0, size;
    char ch[40] = {0};
   
    namelist = scan_dir(&n);
   
    //得到文件总的大小
    for(i = 0; i d_name);
        all_size += size;
    }
    printf("总用量:%ld\n", all_size);
    for(i = 0; i d_name);
        get_rwx(namelist->d_name);
        get_nlink(namelist->d_name);   
        get_name(namelist->d_name);
        all_size += size;
        printf(" %5ld", get_size(namelist->d_name));
        get_time(namelist->d_name, ch);
        printf(" %s", ch);
        printf(" %s", namelist->d_name);
        printf("\n");
        free(namelist);
    }
    free(namelist);
    return 0;
}
//实现ls -a的命令
int a_ls()
{
    struct dirent **namelist;
    int i, n;
    namelist = scan_dir(&n);
    for(i = 0; i d_name);
        free(namelist);
    }
    printf("\n");
    free(namelist);
    return 0;
}
//实现ls -A的命令
int A_ls()
{
    struct dirent **namelist;
    int i, n, test1, test2;
    namelist = scan_dir(&n);
    for(i = 0; i d_name) == 0;
        test2 = strcmp("..", namelist->d_name) == 0;
        if(test1 || test2){
            free(namelist);
            continue;
        }
        printf("%-s  ", namelist->d_name);
        free(namelist);
    }
    printf("\n");
    free(namelist);
    return 0;
}
//浏览指定目录下的文件
int dir_ls(char *name)
{
    struct dirent **namelist;
    char file[20] = {0};
    int i, n;
    strcpy(file, "./");
    strcat(file, name);
    printf("%s\n", name);
    n = scandir(file, &namelist, 0, alphasort);
    for(i = 0; i d_name[0] == '.') {
            free(namelist);
            continue;
        }
        printf("%-s  ", namelist->d_name);
        free(namelist);
    }
    printf("\n");
    free(namelist);
    return 0;
}
//实现多个输入文件时的输出name_ls
int name_ls(int argc, char **argv)
{
    int i;
    struct stat buf;
    for(i = 1; i  2) {
        name_ls(argc, argv);
    } else {
        perror("Input error!\n");
    }
    return 0;
}
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104213/showart_2066203.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

PostgreSQL中国大会,早鸟票抢购!

PostgreSQL中国大会,早鸟票抢购!
2019年11月29~11月30日,由 PostgreSQL中文社区与ITPUB联合主办的第九届《PostgreSQL 中国技术大会》将在北京隆重召开。PostgreSQL 作为功能最强的的开源关系型数据库之一,得到了越来越多企业的推广和运用,也越来越受到广大技术爱好者的欢迎和重视。这将是 PostgreSQL 的又一次交流盛会。




----------------------------------------

点击报名>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP