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 秒