【linux应用开发】

1、编译过程(4个)

预处理、编译、汇编、链接

2、交叉编译

交叉编译:在当前平台编译,可在其他平台运行
如在X86平台编译,可在ARM平台运行

3、GCC的使用

-E : 预处理(进行宏展开等) 使用:执行 gcc -E test.c 生成test.i
-S : 编译 (生成汇编代码) 使用: 执行 gcc -S test.c 生成test.S
-c : 汇编(生成机器码) 使用: 执行 gcc -c test.c 生成test.o
-o : 链接(生成可执行文件) 使用:执行 gcc test.c (-o test) 当没有-o,生成a.out,当有-o test,生成test

4、Makefile使用

$@ : 目标文件
$< : 第一个依赖文件
$^ : 所有依赖文件
wildchard : 获取指定路径指定文件加的所有文件,可改变文件名

Makefile中格式:
目标文件:依赖文件

test:test1.c test2.c test3.c
	gcc $^ -o $@  //即gcc test1.c test2.c test3.c -o test
	gcc $< -o $@  //即gcc test1.c -o test

5、文件I/O

首先看一下,文件I/O与标准I/O的比较

文件I/O(低级I/O,系统调用)标准I/O(调的libc库)
打开openfopen,freopen,fdopen
关闭closefclose
readgetc、fgetc、getchar
gets、fgets
fread
writeputc、fputc、putchar
puts、fputs
fwrite
表示文件描述符
缓存不带缓存全缓存、行缓存、不带缓存
可访问文件类型普通文件、设备文件、管道文件一般只访问普通文件

文件I/O每次操作都执行系统调用,而标准I/O则是对系统调用进行封装,可以看作是在文件I/O的基础上封装了缓冲机制,先读写缓冲区,必要时再访问实际的文件。减少频繁系统调用。

备注:
printf 函数是行缓冲,也就是说遇到’\n’后,才将缓冲区里的内容刷出来,否则就一直在缓冲区里。
eg.

/*
 *该程序运行结果为:先等5秒,在显示hahahahahahahahahaha
 *产生此结果的原因时,printf为行缓冲,也就是说,没有遇到\n,数据就会一直存在缓冲区,只有遇到\n才会将缓冲区内的数据一次性刷出来
 */
#include <stdio.h>
int main(void)
{
	int i=0;
	//setbuf(stdout, NULL);
	for(i=0;i<5;i++)
	{
		printf("haha");
		sleep(1);
		//fflush(stdout);
	}
	return 0;
}

如果想先打印haha,再sleep 1s,再打印haha,再sleep 1s,如此重复5次。那么有以下两种方式:

1)关闭行缓冲

setbuf(stdout, NULL)

/*
 *该程序运行结果为:先打印haha,再sleep 1s,再打印haha,再sleep 1s,如此重复5次
 */
#include <stdio.h>
int main(void)
{
	int i=0;
	setbuf(stdout, NULL);  //关闭行缓冲
	for(i=0;i<5;i++)
	{
		printf("haha");
		sleep(1);
	}
	return 0;
}

2)用fflush将缓冲区内的数据刷出来

fflush(stdout);

/*
 *该程序运行结果为:先打印haha,再sleep 1s,再打印haha,再sleep 1s,如此重复5次
 */
#include <stdio.h>
int main(void)
{
	int i=0;
	for(i=0;i<5;i++)
	{
		printf("haha");
		sleep(1);
		fflush(stdout);    //将缓冲区内的数据刷出
	}
	return 0;
}

6、Frambuffer应用编程

7、文字、图像显示

8、输入系统应用编程

9、网络编程

进程间通信方式(6种):
socket、信号量、信号、管道、消息队列、共享内存

简单解释
信号量:计数,保证同一时间,只被一个进程修改
信号:如 键盘按下 ctr + c 会产生 SIGINT信号
管道:如 ps -aux | grep …
共享内存:多个进程共享一处物理内存

基于TCP的socket:
Server:socket、bind、listen、accept、send/recv、close
Client:socket、connect、send/recv、close
基于UDP的socket:
Server:socket、bind、send/recv、close
Client:socket、connect、send/recv、close
或者
Server:socket、bind、sendto/recfrom、close
Client:socket、sendto/recfrom、close

10、多线程编程

全局变量(作为标志位)
信号量
互斥量(锁)

11、串口编程

12、I2C应用编程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值