- 論壇徽章:
- 0
|
以下是用linux C寫的實現(xiàn)wc功能的函數(shù)
#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寫的實現(xiàn)ls部分功能的函數(shù)。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//用lstat函數(shù)獲取文件的類型
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;
}
//瀏覽文件夾的內(nèi)容
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;
}
//實現(xiàn)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;
}
//實現(xiàn)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;
}
//實現(xiàn)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;
}
//實現(xiàn)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;
}
//實現(xiàn)多個輸入文件時的輸出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 |
|