Linux C/C++程序开发
文章平均质量分 50
首先会介绍Linux下如何搭建开发环境以及各种工具的使用,包括:GCC,GDB,Vim,Emacs,Makefile等。
其次会介绍一些Linux开发与windows一些不同的要点。
微岩
这个作者很懒,什么都没留下…
展开
-
Linux C 网络编程——6. IO阻塞、非阻塞、复用、信号驱动、异步驱动
在Linux中进程空间和内核空间是分开的,系统调用是在Kernel中,IO 数据会先复制到进程空间,这样进程才能访问。所以Linux I/O分为2个步骤:等待数据和复制数据1. 阻塞I/O(Blocking IO)socket的默认方式。请求IO进程(recvfrom)会一直处于阻塞状态,这种效率极低。2. 非阻塞IOrecvfrom不会阻塞,通过不断查询K原创 2013-11-05 18:27:49 · 2647 阅读 · 0 评论 -
Linux C 网络编程——5. 并发服务器
1. 原理在Linux C 网络编程——4. 简单TCP Socket程序中实现了一个最基本的基于TCP的CS通信,这里介绍一种可以允许Server端可以同时处理多个请求(并发服务器)。原理:每次accept服务器调用fork(),创建一个子进程处理请求。2. 实现只需要修改上一篇文章中的Server.c的while循环即可while(1){ addr_原创 2013-11-05 17:26:05 · 2512 阅读 · 0 评论 -
Linux C 网络编程——4. 简单TCP Socket程序
根据图中的流程,实现一个最简单的TCP程序。1. 客户端功能:发送一个字符串给服务器/* ============================================================================ Name : SimpleSockTCPClient.c Author : wistone Versio原创 2013-11-03 15:31:43 · 9496 阅读 · 2 评论 -
Linux C 网络编程——3. TCP套接口编程
1. 基本流程2. socket()int socket(int domain, int type, int protocol);socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1。(1)domain:AF_INET:IP原创 2013-10-30 19:58:54 · 2822 阅读 · 0 评论 -
Linux C 网络编程——2. 基础
1. 地址存储结构头文件 : netinet/in.hIPv4:struct in_addr{ in_addr_t s_addr; //uint32};struct sockaddr_in{ uint8_t sin_len; sa_family_t sin_family; //地址族 in_port_t sin_原创 2013-10-30 19:19:25 · 1925 阅读 · 0 评论 -
Linux C 网络编程——1. 大端序和小端序
1. 字节序数据在内存中有2种存放方式:大端序(Big-Endian):低位字节放在高位地址小端序(Little-Endian):相反x86系列则采用little endian方式存储数据如:0x12345678数据以8bit位单位,在内存中的存储如下:Big Endian 低地址原创 2013-10-30 18:53:07 · 2703 阅读 · 0 评论 -
unistd.h
unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称。该头文件由 POSIX.1 标准(单一UNIX规范的基础)提出,故所有遵循该标准的操作系统和编译器均应提供该头文件(如 Unix 的所有官方版本,包括 Mac OS X、Linux 等)。对于类 Unix 系统,unistd.h 中所定义的接口通常都是大量针对系统调用的封装(英语转载 2013-10-30 16:09:16 · 1750 阅读 · 0 评论 -
errno , perror,strerror
1. 简介很多系统函数在错误返回时将错误原因记录在libc定义的全局变量errno中,每种错误原因对应一个错误码。errno在头文件errno.h中声明,是一个整型变量,所有错误码都是正整数。然后我们可以用perror或strerror函数将errno解释成字符串2. perror#include void perror(const char *s);原创 2013-10-30 16:00:17 · 2621 阅读 · 0 评论 -
C/C++ sizeof 总结
最近很多C/C++的笔试面试中都会涉及到sizeof的问题,所以在此总结一下。1. 定义首先要注意的是sizeof不是函数, 是C的一个单目运算符(++, --等)。sizeof有2种使用方式:(1) sizeof( int )(2) sizeof int一般采用第一种方式返回值:size_t 类型。2. sizeof ( 基本数值类型 )直接返回原创 2013-10-25 15:34:53 · 1693 阅读 · 0 评论 -
C++程序内存分配详解
1. 硬盘中的结构——程序首先在Linux下查看一下test文件的信息:[root@localhost Ctest]# file test //此文件基本情况test: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),for GNU/Linux 2.2.5, dynamically linked (uses sh原创 2013-10-19 11:13:22 · 2017 阅读 · 0 评论 -
GDB多线程调试
关于GDB的基本使用方法可以参见:GDB调试精粹及使用实例GDB print 详解这两篇文章。GDB多线程调试1. 常用命令命令:(1)info threads 显示当前可调试的所有线程。每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。(2)thread ID 切换到ID线程。原创 2013-09-28 14:03:26 · 1676 阅读 · 0 评论 -
linux exec函数
1. 定义以exec开头的函数,统称exec函数:#include int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execle(const char *path, const char *arg, ..., char转载 2013-06-28 17:53:06 · 1584 阅读 · 0 评论 -
Linux进程函数详解
1. atexit(设置程序正常结束前调用的函数) 相关函数 _exit,exit,on_exit表头文件 #include定义函数 int atexit (void (*function)(void));函数说明 atexit()用来设置一个程序正常结束前调用的函数。当程序通过调用exit()或从main中返回时,参数function所指定的函数会先被转载 2013-06-28 16:21:35 · 1307 阅读 · 0 评论 -
进程与线程
摘要:本文详细分析了进程与线程的关系,只出进程是资源分配的基本单位,线程是CPU进行调度和分派的基本单位。1. 程序程序就是存放在存储设备上的各种可执行的文件。2. 进程2.1定义:程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,(1)进程是一个可拥有资源的独立单位;(2)进程同时又是一个可独立调度和分派的基本单位。2.2组成:进程 = PCB(Process Con原创 2013-06-28 15:18:48 · 1321 阅读 · 0 评论 -
GDB同步显示源代码——layout
GDB调试的时候,很多人会忽略一个强大的命令layout。1. 显示源代码窗口(gdb) layout src 2. 显示寄存器窗口(gdb) layout regs3. 显示汇编代码窗口(gdb) layout asm4. 显示源代码和汇编代码(gdb)layout split 5. 显示窗口的大小info win 6. 切原创 2013-06-28 17:47:34 · 6395 阅读 · 0 评论 -
emacs笔记三:调试程序
如果直接采用GDB调试程序,将会很痛苦,你会很怀念VC的调试功能。也有人在vim上安装插件,扩展GDB的功能,但是我比较懒,所以就选择了Emacs的GDB调试功能。1. 可调试内容GDB可以的,emacs就行(99%)。(如果碰到不行,想想办法)2. 打开被调试程序我觉得这个没什么说的,可以用鼠标选,也可以C-x d path 输入路径。3. Tool原创 2013-04-22 17:07:12 · 1497 阅读 · 0 评论 -
emacs笔记二: 高级操作
1. 搜索C-s 向前搜索C-f 向后搜索再次按下命令(C-s)察看下一个, Backspace 察看上一个Enter 结束搜索,停留在当前位子C-g 结束搜索,停留在第一个结果。2. 窗口C-x 1 保留光标所在窗口,关闭其他窗口C-x 2 上下分割窗口C-x 3 左右分割窗口C-x原创 2013-04-22 16:54:26 · 1259 阅读 · 0 评论 -
在64位Linux系统交叉编译32位软件:ffmpeg
在64位Linux系统中,如果不加设置,直接编译出来的软件是64位的,如果需要编译32位版本可以这么做:./configure --prefix=../ --extra-cflags="-m32" --extra-ldflags="-m32"makemake install原创 2013-04-17 16:23:49 · 6685 阅读 · 0 评论 -
emacs笔记一:基本操作
1. 翻页C-v : pagedownM-v : pageup 2. 移动字符: C-p C-b.................pos.................C-f C-n词:(首---------------------------------尾)原创 2013-04-11 14:44:48 · 1277 阅读 · 0 评论 -
GDB print 详解
print命令的格式是: print xxx p xxx1. print 操作符 @ 是一个和数组有关的操作符,在后面会有更详细的说明。 :: 指定一个在文件或是一个函数中的变量。 {} 表示一个指向内存地址的类型为type的一个对象。2. 察看内容 全局变量(所有文件可见原创 2013-04-08 11:07:00 · 4443 阅读 · 0 评论 -
解决64位Linux系统编译32位错误
如果你的Linux系统安装的是64系统,那么在你编译软件的时候会遇到一些问题。主要原因是可能你需要编译32位的软件(对于程序员来说,这尤为重要)。解决方法:需要安装libc6-i386 libc6-dev-i386 lib32gcc1 gcc-multilib gcc-4.6-multilib g++-multilib g++-4.6-multilib lib32st原创 2013-03-29 16:28:02 · 2309 阅读 · 0 评论 -
GDB调试精粹及使用实例
一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 利用set args 命令就可以修改转载 2013-04-01 09:46:20 · 1176 阅读 · 0 评论 -
GCC学习笔记
1.简介 GCC(GNU Compiler Collection,GNU编译器集合)是一套由GNU工程开发的支持多种编程语言的编译器。GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布。GCC是大多数类Unix操作系统(如Linux、BSD、Mac OS X等)的标准的编译器,GCC同样适用于微的Windows。GCC支持多种计算机体系芯片,如x86、ARM,并已原创 2013-03-18 10:51:59 · 1101 阅读 · 0 评论