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