
C/C++
文章平均质量分 59
wsllq334
这个作者很懒,什么都没留下…
展开
-
全局变量与静态变量区别
全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数原创 2011-11-14 00:19:29 · 329 阅读 · 0 评论 -
多线程与fork
前言:exce调用并不创建新进程,所以前后的进程ID并未改变,exec只是用一个全新的程序替换了当前进程的正文、数据、堆和栈段多线程程序里不准使用fork :为什么???UNIX上C++程序设计守则3准则3:多线程程序里不准使用fork在多线程程序里,在”自身以外的线程存在的状态”下一使用fork的话,就可能引起各种各样的问题.比较典型的例子就是,fork出来的子进程可转载 2012-01-02 10:36:43 · 447 阅读 · 0 评论 -
Linux线程同步之条件变量
与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。条件的检测是在互斥锁的保护下进行的。如果一个条件为假,一个转载 2011-12-30 01:11:32 · 422 阅读 · 0 评论 -
UNIX文件:硬链接和符号链接
UNIX目录中有2中类型的链接——硬链接和符号链接。 硬链接本身就是一个目录项,(比如文件名+索引节点号),可以将文件名与文件的位置关联起来;符号链接也称软链接,是指存储了一个字符串的文件。这个字符串可以在路径名解析的过程中,用于修改路径名。 ----------------------------------------------------转载 2012-01-04 23:17:37 · 518 阅读 · 0 评论 -
孤儿进程组和终端会话
孤儿进程: 即一个其父进程已经终止的进程。 孤儿进程由 init 进程“收养”,init 进程ID为1,因此被收养的孤儿进程的父进程便更新为1。孤儿进程组: 一个进程组中的所有进程的父进程要么是该进程组的一个进程,要么不是该进程组所在的会话中的进程。 一个进程组不是孤儿进程组的条件是,该组中有一个进程其父进程在属于同一个会话的另一个组中。GNU解释了为什么会提出孤儿进程组的概念转载 2012-01-04 19:59:36 · 390 阅读 · 0 评论 -
IPC备忘录
一 看如下代码,有若干需要注意的地方 14 int CreateSem(key_t key,int value) 15 { 16 union semun sem; 17 sem_t semid; 18 sem.val=value; 19 20 semid=semget(key,1,IPC_CREAT|0666); 21 if(sem原创 2011-12-28 12:15:21 · 399 阅读 · 0 评论 -
Unix Programming之abort
决定写一下这个系列,仅当学习过程中的一个总结,无论涉及的内容或深或浅,是对是错,有机会希望以后能慢慢深化。abort函数原型:void abort(void) 函数说明:1)无返回值2)无视信号的阻塞和忽略并向进程发送SIGABRT信号3)若捕获SIGABRT而不调用exit等函数程序依然会异常终止4)abort使程序终止后,关闭打开的文件并flush小小测试代码:原创 2011-12-13 21:43:31 · 446 阅读 · 0 评论 -
stdout,stdin和STDOUT_FILENO,STDIN_FILENO
在unix系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FILENO,标准出错用STDERR_FILENO.他们的区别:stdin等是FILE *类型,属于标准I/O,在。使用stdin的函数主要有:fread、fwrite、fclose等,基本上都以原创 2011-12-07 21:16:35 · 337 阅读 · 0 评论 -
c语言中volatile关键字的作用
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short fla转载 2011-12-07 20:38:13 · 349 阅读 · 0 评论 -
linux重定向
基本概念 (这是理解后面的知识的前提,请务必理解) a、 I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9; b、 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor有关; c、 用 < 来改变读进的数据信道(stdin),使之从指定的档案读进转载 2011-12-06 23:57:44 · 291 阅读 · 0 评论 -
typedef & #define的问题
有下面两种定义pStr数据类型的方法,两者有什么不同?哪一种更好一点? typedef char* pStr; #define pStr char*; 答案与分析: 通常讲,typedef要比#define要好,特别是在有指针的场合。请看例子: typedef char* pStr1; #define pStr2 char *转载 2011-11-30 01:48:57 · 306 阅读 · 0 评论 -
getsockname与getpeername
getsockname与getpeername是返回套接口关联的本地协议地址和远程协议地址。int getsockname(int sockfd, struct sockaddr * localaddr, socken_t * addrlen);int getpeername(int sockfd, struct sockaddr * peeraddr, socken_t * ad转载 2011-11-26 09:19:26 · 2692 阅读 · 0 评论 -
网络编程中wait与waitpid的区别
问题: 一个unp中第五章的例子:有5个客户端几乎同时向服务器发送终止连接,这时在服务器端将几乎同时产生SIGCHILD信号,然而信号在内核中是不排队的,信号处理函数只执行一次(我的理解是5个信号几乎同时到达,当第一个信号被处理时,其他4个信号是未决的,当信号处理函数处理完第一个到达的信号后,由于没有产生信号,信号处理函数将不会被再次调用)。那么在目前情况下,父进程怎样才能捕获转载 2011-11-24 20:51:08 · 1519 阅读 · 0 评论 -
read/write,readn/writen
下面是read和write的函数原型#include ssize_t read(int fd, void *buf, size_t count); //count通常取sizeof(buf)返回值:若成功,返回读取的字节数(不一定是count),出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0。文件的当前读写位置向后移。#include转载 2011-11-23 15:19:04 · 943 阅读 · 0 评论 -
一个简单C程序的问题
以下的C程序或者是初学者比较容易出现的问题:#includevoid main(){char str[3]={'1','2','3'};printf("%c",*str++);}初看起来没太大问题,但是运行结果会提示“++”需要左值。什么意思呢?也就是参数P不是“++”的左值,为什么呢?原因是str是一个数组指针,指向str[3]第一个元素的位置,也就是说,它是一个原创 2011-11-17 00:55:51 · 811 阅读 · 0 评论 -
linux线程备忘录
一 条件变量1 int pthread_cond_init(pthread_cond_t *cond,pthread_condattr_t *cond_attr); 2 int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);3 int pthread_cond_timewait(pthread_cond_t原创 2011-12-31 09:49:22 · 392 阅读 · 0 评论