Linux C程序基础

GCC、G++编译器

安装命令:
GCC和G++可在GUN官网www.gnu.org下载相应的安装包
yum install make
yum install gcc
yum install gcc-c++

GCC、G++没有图形界面,只能在终端(ctrl+alt+t)上以命令方式运行
gcc [-选项1] [-选项2] [-选项3] <源文件名>
g++ [-选项1] [-选项2] [-选项3] <源文件名>
常见编译选项:
在这里插入图片描述
源文件(.c)、预处理(.i)、编译(.o)、汇编(.o)、连接(可执行文件)

linux特殊类型

void *:类属指针,能够同时支持所有数据类型的指针,ANSI C标准常用类属指针代替函数参数中的其他指针,使同一个函数能支持多种数据类型。
_t:以此结尾的数据类型被称为原始系统数据类型,定义在头文件sys/types.h,以typedef操作符定义,使目标系统数据结构的接口,在不同的操作系统中其字长会有变化。
<unistd.h>包含了许多linux 系统服务的函数原型。

使用vi编程

实例:
cd ~
mkdir helloworld
cd ~/helloworld
vi helloworld.c
gcc helloworld.c -o helloworld
在这里插入图片描述

GDB调试器:

GDB调试器调试的对象是可执行文件,使用GCC或G++编译器编译源代码时,必须加上-g选项才能使目标可执行文件包含可被调试信息。
GDB常用调试命令:
在这里插入图片描述
实例:(使用命令全称也可)
gcc -g helloworld.c -o helloworld
gdb helloworld
(读取文件成功,列出信息)
(gdb) list
(列出打开的可执行文件的代码)
(gdb) l
(列出可执行文件代码的行信息)
(gdb) b 5
(在第5行加入断点)
(gdb) r
(程序运行,在第五行暂停)
(gdb) n
(执行到第六行)
(gdb) p c
(打印出变量c)

文本编辑工具:VIM、Emacs

VIM和vi类似,且可以语法加亮、多级撤销、显示行号、多文件编辑
Emacs单模式,使用键盘、鼠标可以直接操作
Eclipse:高级!
apt-get install eclipse-cdt

linux环境下文件操作和文件IO操作

文件操作(系统调用方式):

打开文件:

open(文件路径,标志),返回值为正整数则成功,失败返回-1。
标志可选参数有:
在这里插入图片描述
主标志:
O_RDONLY,O_WRONLY,O_RDWR
副标志:
O_APPEND(读写文件从文件尾部开始移动,所写入数据追加到文件尾部)
O_TRUNC(若文件存在并且以可写方式打开,则将文件清空)
O_CREAT(若路径中的文件不存在则自动建立该文件)
O_EXCL(检查要打开的文件是否存在,若不存在则监理文件)

新建文件:

1.open(文件路径,标志,权限标志)
权限标志:

2.creat(路径,umask)

文件状态和属性操作:
fstat(文件标识符,struct stat *buf)返回一个已打开文件的状态和属性信息
lstat(路径,struct stat *buf)针对未打开文件,对符号链接文件返回本身信息
stat(路径,struct stat *buf)针对未打开文件,对符号链接文件返回指向文件信息
其中struct stat是stat.h函数库提供的用于保存文件类型的结构体

说明:
DIR *类型用于opendir(char *)操作,即打开目录,这时得到的是指向该目录本身的指针;
readdir(DIR *)用于读取目录中的文件信息,返回类型为struct dirent,这时返回值是目录中某个文件的名字、i节点号等文件本身属性信息。有了这个返回值,就可以使用结构体中的name项使用stat函数读取每个文件的状态信息,只要循环使用readdir函数,即可遍历目录中所有文件。

目录操作:

mkdir(路径,umask:)当目录被成功创建返回值为0,否则为-1
获得当前工作目录的操作可使用函数getcwd(char *buf,size_t size)
chdir(路径):改变执行程序的工作目录
扫描子目录相关的函数封装在dirent.h中
rmdir(路径):删除空目录
unlink(路径):删除文件
mkstemp(路径):创建linux临时文件

错误处理:

错误信息代码存储在errno变量中,具体可查看头文件errno.h
perror(“文件操作”)当文件操作函数失败时就可以输出错误信息

文件I/O操作:

linux将所有的硬件设备当做文件处理。

非缓冲文件操作:

适合于比较小规模文件的读写和对实时性要求很高的设备的数据通信,系统调用提供;
read(文件标识符,内存块指针,内存块长度)
writd(文件标识符,内存块指针,内存块长度)返回值是他实际写入的长度
lseek(文件标识符,偏移长度,起始位置)
起始位置是参考起点,便宜长度相对于起始位置来决定文件指针的开始位置。否则可能会导致写入文件时覆盖之前的内容
在这里插入图片描述
0:标准输入
1:标准输出
2:标准错误

缓冲文件操作:

适合于大规模非实时性数据处理问题,标准输入输出库提供。
stdin
stdout
stderr
fopen(路径,打开方式)
fread(缓冲区指针,长度,数量,文件流指针)
fscanf(文件流指针,”控制字符串”,输入项列表)
fprintf(文件流指针,”控制字符串”,输出项列表)
ferror(fp)返回文件操作错误代码
feof(fp)当文件流内指针指向文件末尾时,返回非零值,否则返回0
clearee()清楚errno变量内的错误信息

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值