Linux C语言-笔记

1.在虚拟机中安装ubuntu
2.右键打开终端
首先安装vim

sudo apt-get update
sudo apt-get install vim
cc -v //检查当前编译器版本,可看到使用的是gcc版本
gcc -v
cd ~ //到根目录
pwd //查看当前所在位置
ls //当前目录下包含哪些文件夹或文件, 可回到桌面打开查看文件夹
ls -l //可显示详细信息,开头是'-'即为文件,是'd'即为文件夹
touch abcd //创建文件
rm abcd  //删除文件
mkdir workspace   //创建目录
cd workspace
pwd
mkdir lesson1
cd lesson1
touch a.c
vim(或vi) a.c

vim的使用:

按i:在当前光标前插入一个字符
按a:在当前光标后插入一个字符
shift+a  在行尾插入
shift+i     在行首插入
o                 下一行插入
shift+o           当前行上一行插入
dd         删除整行
x          删除一个字符
esc 进入命令模式
:w 按enter,进行保存
:q 退出vim

首先使用vim编辑a.c

#include <stdio.h>
int main(void){
    printf("hello world\n");
    return 0;
}

:wq
cc a.c(这里写的是cc,其实是gcc)
ls  // a.c  a.out  默认输出了一个文件a.out
ls -l
//  -rw-r--r--  fro(当前用户名)  fro(当前所属用户组)  xxxxxx   a.c
//  -rwxr-xr-x  fro(当前用户名)  fro(当前所属用户组)  xxxxxx   a.out    这个有x,代表可执行

./a.out   //执行

//  为什么出现3次rwx?Linux系统可能有多个用户都在使用,不同用户拥有不同权限
//第一个表示当前创建这个文件的用户可读可写可执行
//第二个表示同一个用户组的用户,第三个表示不是当前用户或用户组的任意用户
//  rwx分别表示可读可写可执行

编写多个文件

首先 cd ..   
mkdir lesson2
cd lesson2
vi hello.c
:sp second.c   //新建一个文件,并进入second.c
esc后  ctrl+w+down  //进入下面的hello.c
:set nu 打开行号

剪切hello.c
光标移动到想要剪切的行
输入 行数+dd   //这样就剪切了
粘贴:  ctrl+w+up 进入second.c,  按p

:wqa   //a表示all  ,把所有文件都保存并退出

gcc hello.c second.c -o main.out
./main.out

gcc -c max.c -o max.o    //只编译,不连接
gcc -c min.c -o min.o
gcc max.o min.o hello.c   //这样比较快,使用编译好的.o,就不用再重新编译
cat hello.c   //可以查看
cat min.o     //一堆乱码
rm *.o        //删掉所有的.o文件

make命令
make工具可以将大型的开发项目分成若干个模块,清晰快捷地整理源文件
make内部也是用的gcc

make -v   //先检查有没有装make
sudo apt-get install make //安装make
vi Makefile

注意Makefile文件里的tab必须是6个空格,如果是4个空格(很多windows下ide会设为4个空格),会通不过
这里写图片描述

make
ls

mkdir lesson3
cd lesson3
vi main.c
gcc main.c -o main.out && ./main.out      
//linux中多个命令可用&&,条件是前一个命令return 0;如果return 其他数字,不会执行后一条指令
echo $?       //0      
//linux下,执行完一条命令后,可以输入 echo $?,如果输出0,就说明程序是正常执行的,如果输出其他数字,说明失败了

下面看main的参数

cp main.c main2.c
vi main2.c
gcc main2.c -o m2.out
ls
./m2.out -l -aaa 
//argv[0] is ./m2.out
//argv[1] is -l
//argv[2] is -aaa
#include <stdio.h>
int main(int argc, char *argv[])
{
    int i;  
    for(i=0;i<argc;i++){    //如果把int i写在for循环里,98是不支持的,会报错
        printf("argv[%d] is %s\n",i,argv[i]);
    }
    return 0;
}

Linux的标准输入流、标准输出流、标准错误流

stdin   //标准输入流默认情况下是键盘
stdout   
//也是一个文件,比如切换到网卡,就可以向网卡写入数据
//切换到打印机,就可以向打印机写入数据
//默认是显示器
// 
stderr
#include <stdio.h>
int main(void)
{
    fprintf(stdout,"please enter an integer(>2)\n");
       //向显示器输出,相当于 printf(stdout,"please ...");
    int a;
    fscanf(stdin,"%d",&a);
    if(a<2){
        fprinf(stderr,"wrong\n");
        return 1;   //注意这里,标准错误流的返回值不能为0
    }
    return 0;
}
./a.out
//0
//wrong

输入流输出流以及错误流的重定向

//标准输入流是0,标准输出流是1,如果不写就是默认的
./a.out 1>> a.txt      //重定向到a.txt
cat a.txt
ls /etc
ls /etc >> etc.txt   //重定向到etc.txt
cat etc.txt
ls /etc > etc.txt   //如果是单箭头,每次都是新的内容,如果是双箭头,就追加新的内容

以上是输出流的重定向,以下输入流的重定向

vi input.txt   //4
./a.out < input.txt        //注意箭头方向

错误流的重定向

./a.out 1>t.txt 2>f.txt    //正确的输入到t.txt,错误的输入到f.txt 

管道:把多个程序结合起来

ls /etc/ | grep ab
//前一个命令的输出作为后一个命令的输入
//列出etc下文件名中包含ab的文件
ps -e   //查看进程
ps -e | grep ssh  //如果有,说明已经启动了ssh服务,可以通过终端远程连接我们这个操作系统
./input.out | ./avg.out
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值