Linux内核

shell

shell命令

shell脚本

glibc

在Linux上使用C/C++开发

C标准库、内核服务、线程、网络、文件…

搭建C开发环境

sudo apk install gcc

windows codeblocks 开源的 轻量级开发工具

选择合适的开发工具

vim

gcc编译工具

直接控制参数比较灵活

mkdir c
cd c
vim args.c
#include <stdio.h>
#include <stblib.h>
int main(int args,char *argv[]){
for(int i=0;i< argc;i++){
printf("%s\n",argv[i]);
}
return 0;
}
//只是把参数输出
//vim 先ese 然后shift+: wq 退出
man 3 str 按TAB  可以看所有字符串的方法

man 3 strcmp

gaoxin@greatlinux:~/c$ vim args.c
gaoxin@greatlinux:~/c$ vim errtest.c
gaoxin@greatlinux:~/c$ ./errtest
-bash: ./errtest: No such file or directory
gaoxin@greatlinux:~/c$ vi status_code.sh

return

Tips: vim Ctrl + P; 自动补全提示

#!/bin/bash
if ./errtest ; then
echo OK
fi

if ./errtest -err ;then
echo ERR
fi

Linux调用

man 2 fork

man syscalls

程序获取自己的PID

先查看man文档

man 2 getpid

SYNOPSIS

#include <sys/types.h>

#include <unistd.h>

pid_t getpid(void);
pid_t getppid(void);
printf("%d\n",getpid());

使用 getppid 可以获取父进程 PID 。

###创建子进程

● Linux/Unix 提供了系统调用 fork 用于创建子进程。

● fork 没有参数。

#include<unisted>
#include <stdio.h>
#include <stblib.h>
int main(int args,char *argv[]){
fork();
printf("PID:%d PPID:%d\n",getpid(),getppid());
return 0;
}

全部删除:按esc后,进入命令模式,然后按键dG

复制至文件尾 yG

全部复制:按esc后,按键ggyG

全选高亮显示:按esc后,按键ggvG或者ggVG

yy 复制游标所在行整行

选中文本进行复制 在命令模式下按 v 进入 Visual Mode,然后用 方向键 或 hjkl 选择文本,再按 y 进行复制

粘贴

p 粘贴至游标后(下)

P 粘贴至游标前(上)

要使用 系统粘贴板 的内容,也可以直接在命令模式按 Shift + Inset 进行粘贴。

cp fork1.c fork2.c
#include<unisted>
#include <stdio.h>
#include <stblib.h>
int main(int args,char *argv[]){
int pid = fork();
if(pid < 0){
dprintf(2,"Error:fork failed");
return -1;
}

if(pid >0){
//父进程代码
printf("I an parent %d\n",getpid());
printf("My child is %d\n",pid);
}else{
//子进程代码
printf("I am child %d\n",getpid());
}

return 0;
}
gcc -o fork2 fork2.c

这个命令用于编译

Linux没有线程 携程

Linux的进程和线程效率一样高

用的轻量级进程 做了大量的优化

练习
● 连续 3 次调用 fork ,最后总共会有多少个进程?
● 调用 fork 后,父进程调用 sleep 延迟 3 秒后退出,子进
程使用 chdir 切换工作目录到 /tmp ?
提示:
– 使用 man 2 chdir 查看接口帮助文档。
– 若想查看结果,可以调用 getcwd 获取当前工作目录。
– 运行 man 2 getcwd 查看接口帮助文档。
– sleep(n) 即可实现延迟 n 秒