06 2015 档案
摘要:转自 http://blog.csdn.net/todd911/article/details/43493847 make包含两种语言。第一种语言用来描述工作与必要条件所组成的依存图。第二种语言是宏语言,用来进行文字替换。像C预处理器,m4以及宏汇编器。 一个变量名称几乎可以由任何字符自称。包括大部
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/442379591.何时扩展变量当make在处理递归变量或define指令的时候,会将变量里的每一行或宏的主体存储起来,包括换行符号,但不会予以扩展。宏定义里的最后一个换行符号并不会被存储称宏的一部分,...
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/427502331.通配符当你有一长串文件要制定时,为了简化此过程,make提供了通配符(wildcard),此功能也被称为文件名模式匹配。make的通配符如同Bourne shell的~、*、?、[....
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/42717995make定义了一种语言,可用来描述源文件、中间文件以及可执行文件之间的关系。它还提供了一些功能,可用来管理各种候选配置、实现可重用程序库的细节以及让用户自定义宏将过程参数化。简言之,ma...
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/36190953 1.调试多线程程序 下面是于线程相关的GDB命令用法汇总: info threads:给出关于当前所有线程的信息。 thread 3:改成线程3. break 88 thread 3 :
阅读全文
摘要:使用print命令(简写为p)可以查看变量值。 使用如下的程序1进行测试。 (gdb) b main Breakpoint 1 at 0x804839a: file a.c, line 10.(gdb) rStarting program: /root/a.outBreakpoint 1, main
阅读全文
摘要:创建的每个断点(包括断点、监视点和捕获点)都标识为从1开始的唯一整数标识符。这个标识符用来执行该断点上的各种 操作。调试器还包含一种列出所有断点及其属性的方法。 调试下面的代码:(代码1) 以下操作演示,设置断点--显示断点列表--删除断点--显示删除后断点列表: (gdb) break mainB
阅读全文
摘要:如果要使用gdb进行调试,必须在编译时在gcc中加入-g选项,使用参数 -g 表示将源代码调试信息编译到可执行文件中。 如果使用-g选项: gcc -g main.c $ gdb a.out (gdb) b mainBreakpoint 1 at 0x4004fc: file main.c, lin
阅读全文
摘要:上面的代码执行的结果是:0xbfc094b8240xbfc094c440xbfc094c412a是一个常量指针,sizeof(a)得到的是整个数组的大小,2*3*4=24个字节a+1是一个“指向包含3个整形元素的数组的指针”,所以sizeof(a+1)只是获得一个普通整型指针的大小,在我的系统中,为
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/8943149 方法一: 运行结果: the value is 8 方法二: 运行结果: the value of x+2 is 8 代码中的#将变量转换成了字符串后输出。 最后再介绍一种#号的用法: 输
阅读全文
摘要:本文章基于http://jesserei.blog.163.com/blog/static/121411689200983081421390/ ,稍微进行了修改 通常 Linux 下的各种命令都有许多的命令行参数可以选择,比如:gcc -g -lm foo.c -o foo getopt()就是用来
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/8976543 r 打开只读文件,该文件必须存在。 r+具有读写属性,从文件头开始写,保留原文件中没有被覆盖的内容。该文件必须存在。 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/8952565 输入输出函数家族 家族名 目的 可用于所有的流 只用于stdin和stdout getchar 字符输入 fgetc,getc getchar putchar 字符输出 fputc,put
阅读全文
摘要:本文章基于:http://www.cnblogs.com/QLinux/articles/2465329.html,稍作了修改。 大师级经典的著作,要字斟句酌的去读,去理解。以前在看K&R的The C Programming Language(Second Edition)中第1.5节的字符输入/输
阅读全文
摘要:VA_LIST 是在C语言中解决变参问题的一组宏,定义在<stdarg.h>头文件下。 VA_LIST的用法: (1)首先在函数里定义VA_LIST型的变量,这个变量是指向参数的指针 (2)然后用VA_START宏初始化刚定义的VA_LIST变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/8851475 书中有如下描述: \ddd ddd表示1~3个八进制数字,这个转义符表示的字符就是给定的八进制值所代表的字符 \xddd 与上例类似,只是八进制数换成了16进制数。 注意,任何十六进制数都
阅读全文
摘要:上面的编译时会出现一下错误: aplus2.c:6:6: error: lvalue required as left operand of assignmentaplus2.c:7:6: error: lvalue required as left operand of assignment 意思
阅读全文
摘要:本文转载于:http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html 函数指针是指向函数的指针变量,即本质是一个指针变量。 指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下: 类型说明符 (*指针变量)(参数)这个特
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/9132095 很多库函数,特别是那些与操作系统有关的,当执行失败时会通过一个名称为errno的外部变量,通知程序该函数调用失败。 下面的代码利用这一特性进行错误处理: 上面的处理是错误的。 要理解这一点
阅读全文
摘要:本文转载于:http://blog.sina.com.cn/s/blog_6f5c63ff0100tucb.html 我们知道,在不同的语言中,对负数执行取模运算,结果有可能会是不同的。例如,(-11)%5在python中计算的结果是4,而在C(C99)中计算的结果则是-1。 truncate除法
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/9148351 如果要自己实现一个获取绝对值的函数,应该都没有问题,我这边也自己写了一个: 但是,这个函数真的没有问题吗?如果i的值为-2147483648,会怎样,我们来试下: 上面代码编译后出现如下w
阅读全文
摘要:转自 http://www.cppblog.com/snailcong/archive/2009/03/16/76705.html 程序的输出结果为: sizeof(st1) is 12 sizeof(st2) is 8 问题出来了,这两个一样的结构体,为什么sizeof的时候大小不一样呢? 本文的
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/6643627 C语言规定,不同类型的数据需要转换成同一类型后才可进行计算,在整型、实型和字符型数据之间通过类型转换便可以进行混合运算(但不是所有类型之间都可以进行转换)。当混合不同类型的变量进行计算时,
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/7911995 const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 Bjarne在他的The C++ Programming Langu
阅读全文
摘要:将数组放到结构体中,直接使用“=”就能将数组中的值全部拷贝到其他相同类型的数组中。 运行结果为: 1 2 3 4 5 6 7 8 9 01 2 3 4 5 6 7 8 9 0 注意:如果结构体中包含指针,则意味着任何指针成员的副本都和原指针指向同一地方(浅拷贝)。换言之,任何指针指向的内容都没有复制
阅读全文
摘要:用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; PCHAR pa, pb; 这种
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/8813321 在《C专家编程》中提到了总线错误bus error(core dumped)。 总线错误几乎都是由于未对齐的读或写引起的。它之所以称为总线错误,是因为出现未对齐的内存访问请求时,被堵塞的组
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/8831963 实参 所匹配的形式参数
阅读全文
摘要:多个线程共享相同的内存时,需要确保每个线程看到一致的数据视图。 1.互斥量 可以通过使用pthread的互斥接口保护数据,确保同一时间只有一个线程访问数据,互斥量(mutex)从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁后,任何其他试图再次对互
阅读全文
摘要:1.线程标识 就像每个进程都有一个进程ID一样,每个线程都有一个线程ID。进程ID在整个系统中是唯一的,但线程ID只在它所属的进程环境中有效。 线程ID使用pthread_t数据类型来表示,实现的时候可以使用一个结构来表示pthread_t数据类型,所以可移植的操作系统实现不能将它比作整数处理。因此
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/17319591 更改进程的信号屏蔽字可以阻塞所选择的信号,或解除对它们的阻塞,使用这种技术可以保护不希望由信号中断的代码临界区。如果希望对一个信号解除阻塞,然后pause等待以前被阻塞的信号发生,将如何
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/17121241 在产生信号时,内核通常在进程表中设置某一种形式的标志。当对信号采取了这种动作时,我们说向进程递送了一个信号。在信号产生和递送之间的时间间隔内,称信号是未决的。进程可以选用信号递送阻塞。如
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/17115365 早期的UNIX系统的一个特性是:如果进程在执行一个低速系统调用而阻塞,期间捕捉到一个信号,该系统调用就被中断,不再继续执行。该系统调用返回出错,其errno被设置为EINTR。为了支持这
阅读全文
摘要:每个进程都属于一个进程组。进程组通常是与同一个作业相关联的,可以接受来自同一个终端的各种信号。每个进程组都有一个唯一的进程组ID。进程组ID类似于进程ID,可以存放在pid_t数据类型中。函数getpgrp返回调用进程的进程组ID。 每个进程组都可以有一个组长进程,组长进程的标识是:进程组ID等于其
阅读全文
摘要:所有的UNIX系统都支持解释器文件,这种文件是文本文件,其起始行的形式是: #! pathname [ optional-argument ] 常见的解释器文件以下列行开始: #! /bin/sh pathname通常是绝对路径名,对它不进行什么特殊的处理。内核调用exec函数的进程实际执行的并不是
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/16370577 在unix系统中,特权是基于用户和组ID的,当程序需要增加特权,或需要访问当前并不允许访问的资源时,我们需要更换自己用户ID或组ID,使得新ID具有合适的特权或访问权限。与此类似,当程序
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/15028511 1.wait函数和waitpid函数 当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号。因为子进程终止是个异步事件,所以这种信号也是内核向父进程发的异步通知。父进程可以
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/14062103 1.fork函数 一个现有的进程可以调用fork函数创建一个新的子进程。 关于fork函数的常规用法这边不说了,下面说明下父子进程的文件共享。子进程是父进程的副本,例如,子进程获得父进程
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/12909685 有三种方法可以定位流。 1.ftell函数和fseek函数 这两个函数自V7以来就存在了。但是它们假定文件的位置可以存放在一个长整型中。 函数声明如下: #include <stdio.
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/12884735 一旦打开了流,则可以对流进行读写:每次一个字符,每次一行,二进制。 1.每次一个字符 使用下面三个函数用于一次读一个字符。 #include <stdio.h> int getc(FIL
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/12749765 1.mkdir函数 使用mkdir函数创建目录。 如果成功返回0,失败返回-1 此函数创建一个新的空目录,其中.和..目录是自动创建的,所指定的访问权限由mode指定。目录至少设置一个执
阅读全文
摘要:每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向想要读取的文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。也就是说,其实文件名只与目录有关,但是文件内容则与 inode 有关。那么想一想, 有没有可能有多个档名对应到同一个 inode 号码呢?有的!
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/12068105 1.文件长度 stat结构的st_size成员以字节为单位表示文件的长度,此字段只对普通文件,目录文件和符号链接有意义。stat结构的st_blksize成员是对文件IO较合适的块长度,
阅读全文
摘要:access函数是按照实际用户ID和实际组ID进行访问测试的。函数的定义如下: 其中mode是下面所列常量的按位或。 实践: 运行结果: $ ll a -rwsr--r-- 1 root root 0 Apr 24 23:49 a* $ ./a.out access: Permission deni
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/11747097
阅读全文
摘要:转自 http://blog.csdn.net/todd911/article/details/11701847传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘 I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其...
阅读全文
摘要:每个打开的文件都有一个关联的“当前偏移量”,用于记录从文件到当前当前位置的偏移字节数,lseek函数是设置这个当前偏移量的函数,函数的声明如下:
阅读全文
摘要:下面的常量是可选的: O_APPEND 每次写操作都写入文件的末尾。 O_CREAT 如果指定文件不存在,则创建这个文件。如果存在则直接打开文件。如果创建新文件,而mode参数没有指定,则创建的文件权限不定。 O_EXCL 如果文件不存在,则返回错误。如果同时指定了O_CREAT,而文件已经存在,则
阅读全文
摘要:本文转载于:http://www.360doc.com/content/11/0521/11/5455634_118306098.shtml首先,先稍微了解系统调用的概念:系统调用,英文名systemcall,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的...
阅读全文
摘要:转自 http://blog.chinaunix.net/uid-26983585-id-3315953.html 其实在写上一篇日志的时候,由于我把创建线程的返回值的判断条件写错了,程序每次运行的时候都是显示创建线程失败,我就百度了一下,有人说是桟资源不足引起的,要调用一个pthread_attr
阅读全文
摘要:转自 http://blog.csdn.net/elbort/article/details/7594772 sigprocmask函数:功能描述:设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)。用法:#include <signal.h>int sigprocmask(int how, con
阅读全文
摘要:转自 http://blog.csdn.net/gzzheyi/article/details/7739556 表格可以参见APUE 第三版 P61. 文件描述符(进程级别): 1)、在每个进程表中都有一个记录项,记录项中包含有一张打开文件描述符表,可将其视察为一个矢量(数组),每个描述符占用一项。
阅读全文
摘要:转自 http://www.cnblogs.com/benio/archive/2010/10/13/1849946.html df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。 du可以查看文件及文件夹的大小。 两者配合使用,非常有效。比如用df查看哪个一级目录过大,然
阅读全文
摘要:转自 http://www.cnblogs.com/hjslovewcl/archive/2011/03/14/2314333.html 有三种不同的文件锁,这三种都是“咨询性”的,也就是说它们依靠程序之间的合作,所以一个项目中的所有程序封锁政策的一致是非常重要的,当你的程序需要和第三方软件共享文件
阅读全文
摘要:转自 http://www.cnblogs.com/Anker/p/3271773.html 1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感
阅读全文
摘要:1)在父进程中,fork返回新创建子进程的进程ID; 2)在子进程中,fork返回0; 3)如果出现错误,fork返回一个负值; 创建新进程成功后,系统中出现两个基本完全相同的进程,这两个进程执行没有固定的先后顺序,哪个进程先执行要看系统的进程调度策略。此时,两个进程都从fork开始往下执行,只是p
阅读全文
摘要:#include <iostream> using namespace std ; void Swap(int x, int y) ; int main(void) { int a = 1 ; int b = 2 ; cout << "a = " << a << ", " << "b = " <<
阅读全文
浙公网安备 33010602011771号