首页 > 系统相关 >linux C的一些笔记

linux C的一些笔记

时间:2022-12-19 17:36:47浏览次数:47  
标签:set int 笔记 let linux 一些 inoremap OmniCpp more

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

 

标签:set,int,笔记,let,linux,一些,inoremap,OmniCpp,more
From: https://www.cnblogs.com/chentingk/p/16992627.html

相关文章

  • linux 下使用Git 下载代码、编译VLC 步骤
     本文根据 ​​http://wiki.videolan.org/UnixCompile​​ 编写 第一步:安装Git相关的程序包:%sudoapt-getinstallgitlibtoolbuild-essentialpkg-configauto......
  • Linux ssh密钥自动登录 专题
    在开发中,经常需要从一台主机ssh登陆到另一台主机去,每次都需要输一次login/Password,很繁琐。使用密钥登陆就可以不用输入用户名和密码了实现从主机A免密码登陆到主机B(即把主......
  • Linux磁盘管理
    ​Linux磁盘管理1.写在前面在此强调一个Linux的核心机制就是一切皆文件。I/OPorts即I/O设备地址,用来标识硬件对应的设备地址,来让操作系统以及cpu使用。CPU的核数不......
  • 使用elasticsearch遇到的一些问题以及解决方法(不断更新)
     7.org.elasticsearch.transport.RemoteTransportException:Failedtodeserializeexceptionresponsefromstream原因:es节点之间的JDK版本不一样解决方法:统一JDK环境......
  • UE4学习笔记25——【UI】显示图片,简易菜单制作,多格式文本块
    P65.显示图片到屏幕上P66.UI主菜单制作P67.使用多格式文本块P65 (新建一个包含第一人称射击模板的工程)在内容浏览器中新建一个文件夹(WJJ1209),右键“用户界面——......
  • linux 如何查找进程的执行路径
    1.首先查出进程号ps-aux|grep"command"或ps-fx|grep"command"2.得到进程号之后通过pwdx命令获取进程执行路径pwdxpid3.得到进程号之后通过查看/proc获取......
  • Linux 随记
    Linux普通用户上传文件失败给普通用户授予该目录的上传文件权限如果没有root账号,那就只能给普通用户授权某个目录的上传文件权限;给需要上传文件的目录授权,例如,你需要......
  • Linux C语言程序设计(微课视频版)
     LinuxC语言程序设计(微课视频版) 主编:张同光 出版单位:清华大学出版社 ISBN: ISBN: 出版时间:2023.6 CIP:  内容简介本书以“学完C语言之后知道能做什么”为编写目......
  • Linux 查看端口占用情况
    Linux查看端口占用情况可以使用lsof和netstat命令。lsoflsof(listopenfiles)是一个列出当前系统打开文件的工具。lsof查看端口占用语法格式:lsof-i:端口号......
  • linux 动态库加载优先级
    在Linux系统中,动态库的加载优先级可以由多个因素决定,包括:1、LD_LIBRARY_PATH环境变量:如果在环境变量LD_LIBRARY_PATH中指定了一个库文件的路径,那么在这个路径中找......