随笔分类 -  C

摘要:最近在开发项目的时候遇到一个问题,当使用 sleep(2) 的时候,程序居然没有按照指定的时间去休眠,但是连续执行两次 sleep(2) 的时候,程序可以正常的休眠 2 秒。真是见鬼了。最后查看了以下 sleep 函数的 man 手册,找到了原因。 man 手册如下: SYNOPSIS #inclu 阅读全文
posted @ 2016-08-03 15:10 net小伙 阅读(2953) 评论(0) 推荐(1) 编辑
摘要:一、幻方按照阶数可分成了三类,即奇数阶幻方、双偶阶幻方、单偶阶幻方。 二、奇数阶幻方(劳伯法) 奇数阶幻方最经典的填法是罗伯法。填写的方法是: 把1(或最小的数)放在第一行正中;按以下规律排列剩下的(n×n-1)个数:(1)每一个数放在前一个数的右上一格; (2)如果这个数所要放的格已经超出了顶行那 阅读全文
posted @ 2016-03-14 17:41 net小伙 阅读(2366) 评论(0) 推荐(0) 编辑
摘要:在大部分的linux系统中有一个很好用的命令——tree,就是显示目录的结构,但是发现在FreeBSD中没有这个命令,因此自己实现了一个简单的tree。代码如下:主要利用了递归的思想。 1 #include <stdio.h> 2 #include <sys/types.h> 3 #include 阅读全文
posted @ 2016-02-26 13:33 net小伙 阅读(2951) 评论(0) 推荐(0) 编辑
摘要:net小伙曾在文章【数据结构】双向链表的创建和读取和【数据结构】链式线性表的几种常用用法中写过关于线性表的操作方法,重新阅读发现代码很是稚嫩,现重新整理。 一般情况下我们会使用一个结构体head来作为双向链表的头部,head有两个指针域,一个指向链表的开始,一个指向链表的末尾。双向链表的指针域也有两 阅读全文
posted @ 2016-02-23 14:47 net小伙 阅读(666) 评论(0) 推荐(0) 编辑
摘要:利用工作之余为小伙伴写了份作业,关于进程间通信的。题目如下:父进程从键盘上接受1000个数据,对其求和sum1,子进程对这1000个数平方和sum2,结果传给父进程,父进程将sum1+sum2后,打印结果。要求:用大小为10的共享区传递1000个数据;子进程用消息机制将sum2传给父进程。主要利用共... 阅读全文
posted @ 2015-10-27 18:14 net小伙 阅读(886) 评论(0) 推荐(0) 编辑
摘要:如何生成动态库 net小伙 已经在此文中说明——【C】——如何生成静态库和动态库;接下来就要看看动态库中函数的作用范围; 首先我们使用命令 gcc -fPIC -shared -o libtest.so test.c 生成一个动态库 —— libtest.so。 test.c 代码如下(一个很... 阅读全文
posted @ 2014-12-11 21:41 net小伙 阅读(399) 评论(0) 推荐(0) 编辑
摘要:对于一个编译型语言,编译器工作时总要经过预处理、编译、链接等几个过程。以 C/C++ 为例:预处理器(cpp)将每个 .c/.cpp 文件中 #include 的头文件都合并到 .c/.cpp 文件中,并且对其进行宏扩展,由此生成数个编译单元。一般来说每个 .c/.cpp 文件对应一个编译单... 阅读全文
posted @ 2014-12-11 21:17 net小伙 阅读(793) 评论(0) 推荐(0) 编辑
摘要:c语言字符串函数详解void *memset(void *dest, int c, size_t count);将dest前面count个字符置为字符c.返回dest的值.void *memmove(void *dest, const void *src, size_t count);从src复制c... 阅读全文
posted @ 2014-05-22 10:18 net小伙 阅读(10849) 评论(1) 推荐(1) 编辑
摘要:案例: 功能:可以根据用户输入的命令完成相应的功能; 例如: 用户输入 hello 完成输出 hello的功能。 用户输入 hi 完成输出 hi 的功能。一般的写法可能会写两个函数来实现 输出 hello 和 hi 的功能,然后在根据用户输入的字符串与 hello 和 hi 比较,然后执行相应的函数。代码如下: 1 //回调函数的用处 2 #include 3 #include 4 5 void hello(void); 6 int my_strcmp(char* des, char* src); 7 void hi(void); 8 9 int main(void){... 阅读全文
posted @ 2014-03-24 23:31 net小伙 阅读(3549) 评论(1) 推荐(0) 编辑
摘要:itoa函数的实现,函数实现功能:输入一个 int 型的数据然后修改成 十六进制的字符串。 例如: 输入 100 输出 0x64主函数:1 int main(void){2 char val[12];3 my_atoi(val,43983);4 printf("%s\n",val);5 return 0;6 }正常的情况下就是使用 传入的num 除以 16,得到余数,然后循环除。但是得到的数据是反的,所以需要再把字符串逆序一下;char change(int num){ if(num > 9) return num+'A'-10; ... 阅读全文
posted @ 2014-03-20 22:54 net小伙 阅读(1970) 评论(0) 推荐(0) 编辑
摘要:功能介绍: 此demo是基于TCP套接字编程,目的是实现一个聊天室效果。类似于QQ群效果,如果上线可以通知其他好友,下线也会通知其他好友。 需要用的技术: 一、socket编程。 1> socket 网络编程常识:既要考虑客户端 又要考虑服务器端。 2>TCP 一对多开发步骤: 服务端: ①:创建s 阅读全文
posted @ 2014-01-22 16:26 net小伙 阅读(7864) 评论(0) 推荐(2) 编辑
摘要:信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号量不一定是锁定某一个资源,而是流程上的概念,比如:有A,B两个线程,B线程要等A线程完成某一任务以后再进行自己下面的步骤,这个任务并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。而线程互斥量则是 阅读全文
posted @ 2014-01-15 21:22 net小伙 阅读(7748) 评论(0) 推荐(2) 编辑
摘要:功能描述:1:开户;2:销户;3:存钱;4:取钱;5:查询;6:转账;主要用的技术: 一:消息队列: 1)key_t key = ftok(".",100); //获取key 2)msgid = msgget(key,IPC_CREATE|0666); //创建 msgid = msgget(key,0); //获取 3)msgsnd = msgsnd = (msgid,&msg,sizeof(msg),0); //发送 4)msgrcv = msgrcv = (msgid,&msg,sizeof(msg),0,0); //获取 5)msgt = msgc. 阅读全文
posted @ 2014-01-12 22:29 net小伙 阅读(1406) 评论(0) 推荐(1) 编辑
摘要:直接上代码: 1 #include 2 #include 3 4 struct val{ 5 int num1; 6 int num2; 7 }; 8 9 //send a int to arg10 void *text(void *arg)11 {12 int *p = (int *)arg;13 printf("arg is %d\n",*p);14 pthread_exit(NULL);15 }16 17 //send char to arg18 void *text2(void *arg)19 {20 char *d = (cha... 阅读全文
posted @ 2013-10-27 22:46 net小伙 阅读(9993) 评论(0) 推荐(0) 编辑
摘要:函数名pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock - lock and unlock a mutexSYNOPSIS概要#include int pthread_mutex_lock(pthread_mutex_t *mutex);int pthread_mutex_trylock(pthread_mutex_t *mutex);int pthread_mutex_unlock(pthread_mutex_t *mutex);描述pthread_mutex_lock()函数锁住由mutex指定的mutex对象。 阅读全文
posted @ 2013-10-25 21:13 net小伙 阅读(2195) 评论(0) 推荐(0) 编辑
摘要:1、引入pthread_equal的原因:在线程中,线程ID的类型是pthread_t类型,由于在Linux下线程采用POSIX标准,所以,在不同的系统下,pthread_t的类型是不同的,比如在ubuntn下,是unsigned long类型,而在solaris系统中,是unsigned int类型。而在FreeBSD上才用的是结构题指针。所以不能直接使用==判读,而应该使用pthread_equal来判断。2、引入pthread_self的原因: 在使用pthread_create(pthread_t *thread_id,NULL,void* (*fun) (void *),void * 阅读全文
posted @ 2013-10-24 21:07 net小伙 阅读(1491) 评论(0) 推荐(0) 编辑
摘要:1 #include2 int sigsuspend(const sigset_t *sigmask);3 返回值:-1,并将errno设置为EINTR 将进程的信号屏蔽字设置为由sigmask指向的值,在捕捉到一个信号或发生了一个会终止该进程的信号之前,该进程被挂起。例子: 利用sigsuspend函数阻塞子进程; 1 #include 2 #include 3 #include 4 #include 5 6 sig_atomic_t sigflag; 7 sigset_t newmask,oldmask,zeromask; 8 9 void sig_int(... 阅读全文
posted @ 2013-10-21 16:56 net小伙 阅读(1116) 评论(0) 推荐(0) 编辑
摘要:1、有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。这种情况是通过阻塞信号实现的。2、信号阻塞和忽略信号的区别。阻塞的概念和忽略信号是不同的。操作系统在信号被进程解除阻塞之前不会讲信号传递出去,被阻塞的信号也不会影响进程的行为,信号只是暂时被阻止传递。当进程忽略一个信号时,信号会被传递出去但进程会将信号丢弃。3、信号阻塞系统调用,它们的都起到阻塞的作用,它们不是协作使用的。[cpp]view plaincopyprint?#includeintsigprocmask(ubthow,constsigset_t*set,sigse 阅读全文
posted @ 2013-10-19 11:08 net小伙 阅读(1445) 评论(0) 推荐(0) 编辑
摘要:1 #include2 3 int setjmp(jmp_buf env);4 返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值5 6 void longjmp(jmp_buf env, int val); 在希望返回的位置调用setjmp,直接调用该函数返回值为0;参数env的类型是一个特殊类型jmp_buf。这一数据类型是某种形式的数组,其中存放在调用longjmp时能用来恢复栈状态的所有信息。 longjmp的两个参数,第一个是在调用setjmp时所用的env;第二个参数是具有非零值的val,它将成为从setjmp处返回的值。使用第二个参数的原因是对于一个s... 阅读全文
posted @ 2013-10-10 16:09 net小伙 阅读(335) 评论(0) 推荐(0) 编辑
摘要:下面设置了一个长度为20的缓存区,循环对value进行赋值并输出; 1 #include 2 3 #define BUFSIZE 20 4 5 int main(int argc, char *argv[]) 6 { 7 char value[5]; 8 char buf[BUFSIZE]; 9 10 setvbuf(stdin,buf,_IOFBF,20);11 12 while(scanf("%s",value), value != NULL){13 puts(value);14 }1... 阅读全文
posted @ 2013-10-04 15:07 net小伙 阅读(1748) 评论(0) 推荐(0) 编辑