学习笔记-Linux C编程实践
来源:互联网 发布:淘宝宝贝优化 编辑:程序博客网 时间:2024/05/16 07:42
每天一个linux命令
Linux C编程
学习了 慕课网:Linux C语言编程基本原理与实践
简短的记一下笔记:
#inlcude<file.h>
先搜索INCLUDE环境变量的路径#inlcude"file.h"
先搜索当前目录- make工具可以把大型项目分成若干模块儿
gcc main.c -o main && ./main
可以同时执行两条命令,
仅当&&
前面返回0时,&&
后面的命令才执行;echo &?
可以查看程序是否执行成功(return 0
)- main(int argv, char* argc[])参数
- Linux C语言 标准输入流 / 输出流 / 错误流(文件I / O)
//printf("str");fprintf(stdout, "str");//scanf("%d", &value);fscanf(stdin, "%d", &value);//当return !0;fprintf(stderr, "errStr");return 1;//返回非0的数代表程序执行出错
- I/O重定向:
0代表标准输入
1代表标准输出
2代表便准错误
//从stdin重定向$ ./main.out 0 < input.txt //0可不写//从stdout重定向$ ./main.out 1 > output.txt //覆盖写。1可不写$ ./main.out 1 >> output.txt //追加写。1可不写//从stderr重定向$ ./main.out 2 > error.txt
在理解I/O重定向的基础上,开始理解管道的原理及应用
用代码举例:
$ ls /etc/ | grep ab // etc是Linux默认配置文件的存放目录。
管道的意思就是,把ls /etc/
的输出作为 grep ab
的输入。
利用这个原理,可以使用Linux中的各种小工具(命令行)组合起来编写一些更实用的工具。
Linux C语言指针与内存
- gdb调试工具:
start
单步调试p
是print的缩写,可以打印变量的值。n
是next的缩写,表示执行当前行并跳到下一行代码。s
表示跳进当前行的函数内,f
表示跳出函数。- x/5d 0xffffffffffdd 表示从指定地址打印连续5个变量的值
指针:
#include<stdio.h>int main(){ char str[] = "hello"; char *str2 = "world"; char str3[]; scanf("%s", str); scanf("%s", str2); scanf("%s", str3); return 0;}
第8行:可以执行,但有极大的安全隐患,一旦输入的字符数超过了预先为其分配的栈内存空间(6字节),会覆盖栈中其它数据,结果不可控。
第9行:这条语句会出错,因为str2指向一个字符串常量,这个字符串常量保存在内存空间中的代码段,不允许程序更改。
第10行:同第8行。
Linux C语言结构体
- 编译预处理:hello.c -> hello.i
$ gcc -E hello.c -o hello.i
其中-E
控制预处理结束即停止。
在预处理阶段会进行“宏”的处理,包括对“宏函数”的处理:
#include<stdio.h>//定义一个宏函数,参数不必指定类型#define ADD(a, b) (a + b)int main(){ int sum = ADD(1, 2);//预处理后:int sum = (1 + 2); return 0;}
- 结构体指针:
struct Node{ char name[20]; int value;};int main(){ struct Node node_1 = {"node_1", 1}; struct Node *p = &node_1; //(*p).name <=> p->name <=> node_1.name printf("%s\n", (*p).name);}
- 共用体(联合体)
共用体的地址和其各个成员的地址都是相同的:
union Data{ int a; char b; int c;};int main(){ union Data data_1; data_1.a = 1; data_2.b = 'C';//覆盖前一个值}
- 结构体成员 内存对齐:
内存对齐的规定:每个成员,相对于结构体首地址的偏移量,必须是这个成员所占内存大小的整数倍
struct Data{ int a; //相对结构体首地址的偏移量是0 char b; //相对结构体首地址的偏移量是4 int c; //相对结构体首地址的偏移量是8,在b后面填充3个字节};/*该结构体占用空间为12字节,是所有成员中所占的最大空间(int占4字节)的整数倍,所以c后不必填充字节。否则填充至最大成员所占空间大小的整数倍。*/
- 递归原理
注意与递推区别:
递归是从N到1
递推是从1到N
嗯差不多就到这啦~
0 0
- 学习笔记-Linux C编程实践
- unix/linux编程实践教程------学习笔记
- 《嵌入式linux上的c语言编程实践》(亚嵌教材)学习笔记
- Unix/Linux编程实践教程参考答案-----第二章学习笔记
- unix/linux编程实践教程------学习笔记(第二章)
- unix/linux编程实践教程------学习笔记(三)
- unix/linux编程实践教程------学习笔记(四)
- unix/linux编程实践教程------学习笔记(五)
- 《unix/linux编程实践教程》学习笔记:第一章概论
- 《unix/linux编程实践教程》学习笔记:第九章 shell
- Linux C编程一站式学习 笔记
- Linux+C学习笔记之IO编程
- Linux+C学习笔记之网络编程
- 《linux c编程一站式学习》笔记1
- 《linux c编程一站式学习》笔记2
- Linux.C编程一站式学习-笔记
- linux C编程学习笔记(一)
- Linux C 编程学习笔记1-GCC
- 12
- Java8(jdk8)接口与抽象类的区别
- Linux下的文件操作命令(二、匹配、排序及显示指定内容的命令)
- JAVA注意事项-01
- 自己动手搭建MVC之三
- 学习笔记-Linux C编程实践
- unity 使对象不悬空
- 正则表达式入门-知识字典
- ---Filter(二)针对http请求的Filter
- 29 图片缩小案例
- discuz 取消发帖验证码
- 变量作用域
- 【框架】Imager-loader_1.9.4图片下载框架
- Python 实现决策树 ID3 C4.5 悲观剪枝