随笔分类 -  Linux程序设计

摘要:通过调用fork和exec函数都能创建新的进程,但两者有着本质的区别:fork函数拷贝了父进程的内存映像,而exec函数用用新的映像来覆盖调用进程的进程映像的功能。一 fork函数 #include pid_t fork(void); //创建子进程成功时,向子进程返回0,并将子进程的进程ID返回给父进程 //创建失败时,返回-1,并将errno设置为EAGAIN 返回值是允许父进程和子进程区别自己并执行不同代码的关键特征。#include #include #include int main(void){ pid_t childpi... 阅读全文
posted @ 2013-12-18 23:12 LOSER Z 阅读(436) 评论(0) 推荐(0)
摘要:一、文件共享 内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。 1、每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述表 2、内核为所有打开文件维持一张文件表 3、每个打开文件都有一个v节点结构,v节点包含了文件类型和对此文件进行各种操作的函数的指针。PS:Linux中没有使用v节点,而是使用了通用i节点结构。 文件描述符标志只用于一个进程的一个描述符 文件状态标志适用于指向该给定文件表项的任何进程中的所有描述符二、原子操作 1、pread函数和pwrite函数 #include ssize... 阅读全文
posted @ 2013-12-16 19:15 LOSER Z 阅读(813) 评论(0) 推荐(0)
摘要:UNIX系统中的大多数文件I/O只需要用到5个函数:open,read,write,lseek以及close文件描述符 文件描述符是一个非负整数,所有打开的文件都通过文件描述符引用 文件描述符的变化范围是0-OPEN_MAX,OPEN_MAX是每个进程最多打开的文件1、open函数 #include int open(const char* pathname, int flag, mode_t mode );//若成功则返回文件描述符,若出错则返回-1 flag打开方式有3种:O_RDONLY只读打开 O_WRONLY 只写打开 ... 阅读全文
posted @ 2013-12-13 17:35 LOSER Z 阅读(732) 评论(0) 推荐(0)
摘要:一,Makefile的文件名 默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件,大部分情况下,make命令都支持makefile和Makefile这两种命名。所以一般情况下都是将文件名命为这两个,没有后缀。二,Makefile内容格式语法 目标名:依赖目标 @命令 @命令三,make命令行的使用 1,通用情况:make -f make脚本文件 目标名,这种情况适用于没有使用makefile或Makefile文件名,而是使用其它格式的命名方式,如: 我们有一个demo... 阅读全文
posted @ 2013-12-11 16:27 LOSER Z 阅读(413) 评论(0) 推荐(0)
摘要:在ubuntu中,敲入命令行:sudo apt-get install vim,然后输入系统密码,确认Y,即可下载vim按下vim,在后面跟上文件的路径,即可进入文件到编辑模式,如果不存在该文件,将创建一个文件VIM的运行模式分为3种:编辑模式:等待编辑命令输入插入模式:编辑模式下,输入 i 或者o或者a进入插入模式,插入文本信息,退出插入模式按Esc,随即进入编辑模式命令模式:在编辑模式下,输入 “:” 进行命令模式VIM 使用的命令:q 直接退出vi:wq 保存后退出vi ,并可以新建文件:q! 强制退出,一般用于编辑过后,不想保存,直接退出:w file 将当前内容保存成某个文件:set 阅读全文
posted @ 2013-12-10 16:59 LOSER Z 阅读(274) 评论(0) 推荐(0)
摘要:一、静态库的编译 静态库的编译过程如下: 1、编译成目标文件 这里有一个可选项-static,调用格式:gcc -c -static 代码文件名.c 2、归档成静态库 A、归档的工具是ar工具,使用ar -r可以将文件归档成静态库,调用格式:ar -r 静态库文件 被归档的文件 例如:我们这有两个C文件,分别为test1.c和test2.c 首先我们将它编译成目标文件:gcc -c -static test1.c gcc -c -static test2.c 此时会产生两个文件,分别为test1.... 阅读全文
posted @ 2013-12-09 19:27 LOSER Z 阅读(986) 评论(0) 推荐(1)
摘要:使用到两个函数mmap:用于分配内存;munmap:用于释放内存。 mmap的原型如下: void *mmap( void *start, //指定映射的虚拟地址 0由系统指定开始位置 size_t length, //映射空间大小 pagesize倍数 int prot, //映射权限 PROT_NONE | PROT_READ PROT_WRITE PROT_EXEC int flags, //映射方式 int fd, //文件描述符号 offset_t off //文件中的映射开始位置(必须是p... 阅读全文
posted @ 2013-12-08 16:40 LOSER Z 阅读(791) 评论(0) 推荐(0)
摘要:一、为什么要有虚拟内存 虚拟内存的提出,是为了禁止用户直接访问物理存储设备,有助于系统稳定。二、为什么一个程序不能访问另外一个程序的地址指向的空间 1:每个程序的开始地址0x80084000 2:程序中使用的地址不是物理地址,而是逻辑地址(虚拟内存). 逻辑地址仅仅是编号.编号使用int 4字节整数表示. 2^32=4294967296=4G 每个程序提供了4G的访问能力三、内存映射 逻辑地址与物理地址关联的过程是内存映射。 虚拟地址与物理地址映射的时候有一个基本单位:至少会映射4K。 段错误:无效访问. 那段内存没有映射,访问的内存超出了系统所给这个程序的内存空间。 合法访问:... 阅读全文
posted @ 2013-12-07 17:44 LOSER Z 阅读(378) 评论(0) 推荐(0)
摘要:一、函数执行时使用栈空间作为自己的临时栈,3种方式决定编译器清空栈的方式:__stdcall、 __fastcall、__cdecl1、__stdcall表示每个调用者负责清空自己调用的函数的临时栈 __fastcall函数自己在返回前自己清空临时栈,然后返回值退出 __cdecl表示所有调用者只有一个清空函数来负责清空所有被调用函数的临时栈2、这三种方式决定函数栈压栈的参数顺序,都是从右到左.3、在window下,函数名前加_stdcall,它决定了函数的名字转换方式.二、关于临时栈的总结1.函数执行的时候有自己的临时栈(在局部栈里). C++成员函数拥有两个栈空间,一个是函数本身的栈空间, 阅读全文
posted @ 2013-12-07 17:29 LOSER Z 阅读(852) 评论(0) 推荐(0)
摘要:stat 显示指定文件的相关信息,比ls命令显示内容更多who 显示在线登录用户 hostname 显示主机名称 uname显示系统信息 top 显示当前系统中耗费资源最多的进程 ps 显示瞬间的进程状态du 显示指定的文件(目录)已使用的磁盘空间的总量 df 显示文件系统磁盘空间的使用情况free 显示当前内存和交换空间的使用情况 ifconfig 显示网络接口信息 ping 测试网络的连通性 netstat 显示网络状态信息 man 命令帮助信息查询alias 设置命令别名alias [别名]=[指令名]clear 清屏kill 杀死一个进程gzip命令命令格式:gzip [选项] 压缩( 阅读全文
posted @ 2013-12-06 12:51 LOSER Z 阅读(357) 评论(0) 推荐(0)
摘要:ls 显示文件和目录列表-l 列出文件的详细信息-a 列出当前目录所有文件,包含隐藏文件mkdir 创建目录-p 父目录不存在情况下先生成父目录cd 切换目录touch 生成一个空文件echo 生成一个带内容文件cat tac显示文本文件内容cp 复制文件或目录rm 删除文件-r同时删除该目录下的所有文件-f强制删除文件或目录mv 移动文件或目录,文件或mv aaa bbb将aaa改名为bbbfind 在文件系统中查找指定的文件-name 文件名wc 统计文本文档的行数,字数,字符数grep 在指定的文本文件中查找指定的字符串rmdir 删除空目录tree 显示目录目录改名树pwd 显示当前工 阅读全文
posted @ 2013-12-06 12:27 LOSER Z 阅读(460) 评论(0) 推荐(0)
摘要:/ 是根目录~是主目录bin 存放二进制可执行文件(Is,cat,mkdir等)boot 存放用于系统引导时使用的各种文件dev 用于存放设备文件etc 存放系统配置文件home 存放所有用户文件等根目录lib 存放根文件系统中的程序运行所需要的共享库及内核模块mnt 系统管理员安装临时文件系统的安装点opt 额外安装等可选应用程序包所放置的位置proc 虚拟文件系统,存放当前内存的映射root 超级用户目录sbin 存放二进制可执行文件,只有root才能访问tmp 用于存放各种临时文件usr 用于存放系统应用程序,比较重要的目录,/usr/local本地管理员软件安装目录var 用于存放运行 阅读全文
posted @ 2013-12-06 12:25 LOSER Z 阅读(542) 评论(0) 推荐(0)