linux C的一些笔记

1.主函数的入参

 主函数类似定义

int main();
int main(int args);
int main(int args,char * av[]);

可以无惨,可以接受参数输入,入参一般为命令行执行参数,比如

 

 传入一个文件名,在主函数中读取它的内容。

args代表参数的个数,*av 代表输入的一串参数可以输入one,two,three....无限长参数。

2.vim批量操作

ctrl + v 进入区块选择模式

 

 按d 删除选中内容

 同样选择区块,按大写shift+i插入标记,最后按两次esc完成批量插入

 

 

 自用vim样式,在~/.vimrc处配置

set number
set hlsearch "高亮度反白
set backspace=2 "可随时用退格键删除
set autoindent "自动缩排
set ruler "可显示最后一行的状态
set showmode "左下角那一行的状态
set bg=dark "显示不同的底色色调
syntax on "进行语法检验,颜色显示
inoremap ' ''<ESC>i
inoremap " ""<ESC>i
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap < <><ESC>i
inoremap { {<CR>}<ESC>O
func SkipPair()
        if getline('.')[col('.') - 1] == '<' || getline('.')[col('.') - 1] == ')' || getline('.')[col('.') - 1    ] == ']' || getline('.')[col('.') - 1] == '"' || getline('.')[col('.') - 1] == "'" || getline('.')[col('.'    ) - 1] == '}'
          return "\<ESC>la"
        else
          return "\t"
        endif
          endfunc
 " 将tab键绑定为跳出括号
 "   :inoremap <TAB> <c-r>=SkipPair()<CR>``

/etc/.vimrc

set completeopt=menu,menuone  
"以下配置可以查看omnicomplete帮助设置
let OmniCpp_MayCompleteDot=1    “  打开  . 操作符
let OmniCpp_MayCompleteArrow=1  "打开 -> 操作符
let OmniCpp_MayCompleteScope=1  ”打开 :: 操作符
let OmniCpp_NamespaceSearch=1   “打开命名空间
let OmniCpp_GlobalScopeSearch=1  
let OmniCpp_DefaultNamespace=["std"]  
let OmniCpp_ShowPrototypeInAbbr=1  “打开显示函数原型
let OmniCpp_SelectFirstItem = 2”自动弹出时自动跳至第一个

set tags+=/usr/share/vim/vim74/Tag/c
set tags+=/usr/share/vim/vim74/Tag/cpp

按键u表示 undo,撤销按键,在ctrl+v的模式下使用

ctrl+v模式下选择区域,使用y复制内容,p粘贴

3.遍历字符串数组

        char **ptr = args;
        int count = 0;
        for(;*ptr!=NULL;ptr++){
                count++;
                printf("str len: %d\n",strlen(*ptr));
                printf("value: %s\n",*ptr);
        }   

使用指针指向数组头,移动指针拿到每个char的地址,*ptr获取他们的值,字符串长度函数使用string.h

4.按照书上粗略实现more命令

int see_more();

int main(int ac,char* av[]){
        FILE *f; 
        if(ac == 1){ 
                do_more(stdin);
        }else{
                char *filename = av[1];
                printf("==============more command===============\n");
                f = fopen(filename,"r");
                if(f!=NULL){
                        do_more(f);
                        fclose(f);
                }   
        }   
        return 0;
}
void do_more(FILE *fp){
        char line[LINELEN];
        int num_of_lines = 0;
        FILE *fp_tty = fopen("/dev/tty","r");
        if(fp_tty == NULL){
                exit(1);
        }   
        int reply;
        while(fgets(line,sizeof(line),fp)){
                if(num_of_lines == PAGELEN){
                        reply = see_more(fp_tty);
                        if(reply == 0){ 
                                break;
                        }
                        num_of_lines -= reply;
                }
                if(fputs(line,stdout) == EOF){
                        exit(1);
                }
                num_of_lines ++;

        }
}
int see_more(FILE *cmd){
        int c;
        while((c=getc(cmd))!= EOF){
                if(c == 'q'){
                        return 0;
                }else if(c == ' '){
                        return PAGELEN;
                }else if(c == '\n'){
                        return 1;
                }
        }
        return 0;
}

原书上容易段错误,改为sizeof数组后可以运行,具有如下两个功能

 

 

 

 

编译指令如下

[ctk@localhost linux_coding]$ cc fileopt.c -o fileopt

执行指令

[ctk@localhost linux_coding]$ ./fileopt

 

posted @ 2022-12-19 17:16  天目山电鳗  阅读(41)  评论(0编辑  收藏  举报