Unix/Linux系统编程
一,开发工具
编译器 GCC
调试工具 GDB
代码编辑 Vim
1. 编译命令
gcc hello.c -o hello # 第二个hello为新生成的可执行文件名
-o 为生成的可执行文件指定名称。
-Wall 打印所有警告。
-E 把用户定义的所有的预定义#define展开,会生成 .i 后缀的C源文件。
-c 生成二进制文件,后缀名 .o
-g 生成可调试的可执行二进制文件
2. 调试命令
l list的简写,从第一行开始列出代码
break 16 设置断点,在代码第16行
break func 设置断点,在函数func()入口处
info break 查看断点信息
r run的简写,运行程序
n next的简写,执行下一条语句
p i print i 的简写,打印变量 i
c 继续运行程序,continue命令简写。
bt 查看函数堆栈。
finish 退出函数
q 退出gdb
二,编写Makefile
假设有三个文件 prog.c、 code.c、 code.h,对应的编译命令则是
$ gcc -c code.c -o code.o
$ gcc -c prog.c -o prog.o
$ gcc prog.o code.o -o test
但是一旦修改某个文件就需要再手打一遍以上三条命令。使用Makefile以后,只要一条简单的 make 命令就全部搞定。
Makefile 书写如下
test: prog.o code.o
gcc prog.o code.o -o test
prog.o: prog.c code.h
gcc -c prog.c -o prog.o
code.o: code.c code.h
gcc -c code.c -o code.o
clean:
rm -f *.o test
更高级一点的,还可以加入宏来避免在Makefile出现的“硬编码”。
OBJS = prog.o code.o
CC = gcc
CFLAGS = -Wall
test: $(BOJS)
$(CC) $(OBJS) -o test $(CFLAGS)
prog.o: prog.c code.h
$(CC) -c prog.c -o prog.o $(CFLAGS)
code.o: code.c code.h
$(CC) -c code.c -o code.o $(CFLAGS)
clean:
rm -f *.o test
补充:
$@ 代表当前的目标(target)
makefile 规则
目标(target) : 目标文件1 目标文件2
<tab> gcc -o 欲新建的可执行文件 目标文件1 目标文件2
Unix/Linux系统编程的更多相关文章
- Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道
Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道 背景 上一讲我们介绍了创建子进程的方式.我们都知道,创建子进程是为了与父进程协作(或者是为了执行新的程序,参考 Linux ...
- Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号
Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号 背景 上一讲我们介绍了Unix IPC中的2种管道. 回顾一下上一讲的介绍,IPC的方式通常有: Unix IPC包括:管道 ...
- Linux系统编程温故知新系列 --- 01
1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...
- LINUX系统编程 由REDIS的持久化机制联想到的子进程退出的相关问题
19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程 ...
- Linux系统编程@进程通信(一)
进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...
- 获得Unix/Linux系统中的IP、MAC地址等信息
获得Unix/Linux系统中的IP.MAC地址等信息 中高级 | 2010-07-13 16:03 | 分类:①C语言. Unix/Linux. 网络编程 ②手册 | 4,471 次阅读 ...
- Linux 系统编程
简介和主要概念 Linux 系统编程最突出的特点是要求系统程序员对它们工作的的系统的硬件和操作系统有深入和全面的了解,当然它们还有库和系统调用上的区别. 系统编程分为:驱动编程.用户空间编程和网络编程 ...
- Unix/Linux系统的发展史
Unix/Linux系统相信是学编程的人都认识这两个系统.我们知道Unix要钱,而Linux免费,而且这两者之间的发展史是什么样的,是不是两者就是同一个东西呢? 我将会以时间的发展过程来一步步的给大家 ...
- 读书笔记之Linux系统编程与深入理解Linux内核
前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...
随机推荐
- CodeForces - 798D Mike and distribution 想法题,数学证明
题意:给你两个数列a,b,你要输出k个下标,使得这些下标对应的a的和大于整个a数列的和的1/2.同时这些下标对应的b //题解:首先将条件换一种说法,就是要取floor(n/2)+1个数使得这些数大于 ...
- laravel composer install 报错解决方法
composer install 报错信息: 报错原因参考:http://blog.csdn.net/yicixing7/article/details/55050140 解决方法: 把compose ...
- msc文件
MSC微软管理控制台(Microsoft Management Control)文件.可以点击开始/运行,然后输入下列文件名就可以打开相应的控制窗口. 除第三个文件外,其他均在C:\WINDOWS\s ...
- iOS多线程编程之NSOperation的基本操作(转载)
一.NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperat ...
- Git 安装及使用小结
Git 安装及使用小结 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline ...
- [.NET]解决EMF图像自动放大空白
在.NET中产生emf主要使用Metafile对象,但在使用过程中会发生图像自动放大,多余空白的问题. 模拟:声明Size(100,100)的区域,并绘制p1(-50,-50)->p2(50,5 ...
- 访问GitLab的PostgreSQL数据库-(3)
1.登陆gitlab的安装服务查看配置文件 cat /var/opt/gitlab/gitlab-rails/etc/database.yml production: adapter: postgre ...
- 【spring mvc】application context的生命周期
上一次讲application context中bean的生命周期,后面贴了一部分代码,但根本没理解代码意思,有幸在博客园看到一篇关于这部分的代码解析,特别长,特此做了一些整理笔记,并附上链接:htt ...
- 15 jmeter分布式性能测试
背景由于jmeter本身的瓶颈,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起Java内存溢出的错误.要解决这个问题,可以使用分布式测试,运行多台机器运用所 ...
- Oracle多关键字模糊查询
以前写SQL时,知道MySQL多字段模糊查询可以使用[charlist] 通配符,如: SELECT * FROM Persons WHERE City LIKE '[ALN]%'但是在Oracle中 ...