Linux_C
文章平均质量分 63
JoeBlackzqq
爱好网络软件的开发,更喜欢结交志同道合的朋友!
展开
-
Linux下计算程序运行时间的两种方法
Linux下计算程序运行时间的两种方法 1.以下是我在网上看到的:有时候我们要计算程序执行的时间.比如我们要对算法进行时间分析..这个时候可以使用下面这个函数. #include int gettimeofday(struct timeval *tv,struct timezone *tz); strut timeval { long tv_sec; /* 秒数 */原创 2011-06-25 17:18:00 · 1274 阅读 · 0 评论 -
Linux下检测网络状态是否正常
// Linux下检测网络状态是否正常#include #include #include #include #include #include #include struct ethtool_value { __uint32_t cmd; __uint32_t data;};int原创 2011-06-26 10:41:00 · 4399 阅读 · 0 评论 -
用GDB调试程序(一)
GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺转载 2011-09-17 17:55:54 · 717 阅读 · 0 评论 -
gcc -D选项的作用
gcc -D选项在man中的说明如下: -D name Predefine name as a macro, with definition 1. -D name=definition The conte原创 2011-09-17 16:50:51 · 13985 阅读 · 0 评论 -
gcc -fPIC选项
使用 -fPIC 选项,会生成 PIC 代码。.so 要求为 PIC,以达到动态链接的目的,否则,无法实现动态链接。non-PIC 与 PIC 代码的区别主要在于 access global data, jump label 的不同。比如一条 access glo转载 2011-09-19 14:30:22 · 764 阅读 · 0 评论 -
fork()使用(一)
第一贴:cu上关于fork()函数的精辟分析 声明:在别人的博客上看到这篇文章,真的很精辟,把问题一下子讲清楚了。所以,特意转贴在此,向各位高人致敬,也向原贴主致谢!本人不改变原贴的风貌。 查看原文转载 2011-09-21 11:07:59 · 639 阅读 · 0 评论 -
进程初学(二)
首先,来看一下下面的源程序吧:#include #include int main(){ pid_t pid; printf("Now only one process\n"); printf("Calling fork...\n");原创 2011-09-21 11:18:19 · 570 阅读 · 0 评论 -
对进程个数计数
在linux怎么知道一个指定的“进程名”有几个在运行了呢?下面这下例子演示了这个过程,计数函数为:getProcessCount() #include #include #include // 获取进程数量int getProcessCount原创 2011-09-20 10:54:18 · 1344 阅读 · 0 评论 -
[Linux C]递归遍历指定目录,以目录树形式展示
/* 功能:演示了利用C语言递归遍历指定目录下的子目录(不含隐藏目录)和文件,并以目录树形式展示! 其中编译命令为:gcc -o travel travel.c -std=c99*/#include #include #include #include原创 2011-10-14 10:21:05 · 2680 阅读 · 1 评论 -
ftw遍历目录树
表头文件:#include 定义函数:int ftw(const char *dir, int (*fn) (const *file, const struct stat *sb, int flag), int depth)函数说明:ftw() 会从参数dir指定的 目原创 2011-10-13 11:32:29 · 1299 阅读 · 0 评论 -
[Linux C]列出指定目录下的所有文件(夹)
在Linux下,用C语言实现列出指定目录下的所有文件和文件夹:#include #include #include int main(){ DIR *dirp; struct dirent *direntp; dirp = opendir("/原创 2011-10-13 14:29:35 · 5219 阅读 · 0 评论 -
[Linux C]递归遍历指定目录下的子目录和文件
/* 功能:演示了在Linux下利用C语言递归遍历指定目录下的子目录(不含隐藏目录)和文件*/#include #include #include void List(char *path){ struct dirent *ent = NULL原创 2011-10-14 16:24:25 · 7997 阅读 · 3 评论 -
显示当前行号、文件名和函数名
在编程时,有时需要知道当前的代码是在第几行,当前文件名是什么,以及当前执行的是哪个函数?下面的代码可以轻松地完成这种功能:#include void test(){ printf("Line:%d, File:%s, Function:%s\n", __LINE__, __FILE__, __FUNCTION__);}int main(){ printf("原创 2011-10-21 13:41:44 · 1257 阅读 · 1 评论 -
单词统计程序
一个简单的单词统计程序, 问题来源: http://topic.csdn.net/u/20111114/10/2e439bbf-04c5-4042-9905-ece0bf008b97.html /* 功能:实现单词统计功能*/#include #include main(){ char *t[20]; // 声明一个指针数组,长度为20 char (*t2)[原创 2011-11-14 13:32:40 · 947 阅读 · 0 评论 -
求一个整数的阶乘结果中后缀0的个数
问题描述:给一个整数,请输出该数字阶乘的后缀0的个数,例如:数字7,它的阶乘为5040,后面有一个0,则输出1;还有数字10,它的阶乘为3628800,后面有两个0,则输出2。/* 功能:求一个整数的阶乘含有多少个0 如 5! = 120(1个0) 8! = 40320(1个0) 10! = 3628800(2个0) 15! = 1307原创 2011-11-14 17:06:11 · 1822 阅读 · 1 评论 -
共享内存---shmget shmat shmdt
From: http://fengxue103.blog.hexun.com/32303320_d.html 要使用共享内存,应该有如下步骤:1.开辟一块共享内存 shmget()2.允许本进程使用共某块共享内存 shmat()3.写入/读出4.禁止本进程使用这块共享内存 shmdt()5.删除这块共享内存 shmctl()或者命令行下ipcrmftok()。它转载 2011-11-16 14:46:59 · 756 阅读 · 0 评论 -
本地套接字示例[来源:Advanced Linux Programming]
本地套接字示例[来源:Advanced Linux Programming] 要通过套接字连接同一台主机上的进程,可以使用符号常量 PF_LOCAL 和 PF_UNIX所代表的本地命名空间。它们被称为本地套接字(local sockets)或者 UNIX 域套接字(UNIX-domain sockets)。它们的套接字地址用文件名表示,且只在建立连接的时候使用。 套接字的名字在 str原创 2011-11-18 00:18:27 · 1633 阅读 · 0 评论 -
从printf谈可变参数函数的实现
作者:戎亚新摘要:一直以来都觉得printf似乎是c语言库中功能最强大的函数之一,不仅因为它能格式化输出,更在于它的参数个数没有限制,要几个就给几个,来者不拒。printf这种对参数个数和参数类型的强大适应性,让人产生了对它进行探索的浓厚兴趣。关键字:printf, 可变参数 1. 使用情形 int a =10;double b = 20.0;char *str = "He转载 2011-11-01 10:14:51 · 551 阅读 · 0 评论 -
设置STDIN_FILENO为非阻塞模式
Linux C: #include #include #include #include int main(void){ char tmp[100]; memset(tmp,0,sizeof(tmp)); char str[] = "welcome to the linux world!"; int len = strlen(str); printf("len =原创 2011-11-21 13:35:48 · 3598 阅读 · 0 评论 -
解析可变参数函数的实现原理(printf,scanf)
From: http://hi.baidu.com/huifeng00/blog/item/085e8bd198f46ed3a8ec9a0b.html 学习C的语言的时候,肯定接触到标准输出和标准输入函数。这个函数给人的感觉很强大,因为它很另类,就是这个函数的参数是可变的。下面是一个自己编写的可变参数的函数,它的功能是求和。如下#include #include i转载 2011-11-01 10:43:25 · 775 阅读 · 0 评论 -
我的C语言可变参数的实现
实现环境:Fedora12 + gcc任务:用C语言实现一个参数可变的函数,以方便输出。源代码如下:#include #include #include int sum(int data, ...){ int i = data, s = 0; va_list vl; va_start(vl, data); while(i != -1) {原创 2011-11-01 12:54:47 · 621 阅读 · 0 评论 -
linux下exec系列(一)
fork()是用于建立进程的手段之一,但是fork()只能建立相同程序的副本。幸运的是,Linux系统还提供了系统调用exec系列。它可用于新程序的运行。如果exec调用成功,调用进程将被覆盖,然后从新程序的入口开始执行。这样就产生了一个新的进程,但是它的进程标识符与调用进程相同。这就是说,exec没有建立一个与调用进程并发的新进程,而是用新进程取代了原来的进程。所以,对exec调用成功后,没原创 2011-11-02 16:36:17 · 4278 阅读 · 2 评论 -
我的makefile写法(一)
程序演示了一个通过tcp/ip通讯的server/client程序,都是简单的C程序。源码:server.c#include #include #include #include #include #include #includeint readline(int fd, void *pbuf, int maxlen);int main(int ar原创 2011-11-03 14:05:19 · 692 阅读 · 0 评论 -
perror的特殊输出
写了一个非常简单的C语言程序,为了测试perror会把数据输出到哪里。但它的运行结果让我无法理解,望高人解答:源码:#include int main(){ printf("Hello\n"); perror("Hello world\n"); return 0;}1. 首先在windows xp(vc6.0) 上编译运行,结果如下:He原创 2011-11-03 09:37:49 · 1121 阅读 · 0 评论 -
[Linux] undefined reference to `itoa'
在linux写了个简单的C程序,里面用到了itoa,但是编译时提示“undefined reference to `itoa'”,本以为加上-lc就行了,可结果还是一样。上网发现,有人说这个函数在linux中是不存在的,一般用sprintf来代替。看下面代码及注释吧:#include #include //#include #include int num = 0;ch原创 2011-11-04 11:14:20 · 21143 阅读 · 2 评论 -
显示环境变量的值
/* 功能:显示环境变量的值*/#include extern char **environ;// 查找环境变量的值,与系统调用getenv()功能相同char* findenv(char *name) // 在环境变量中查找指定的变量名,如找到,则返回其值('='后的字符串){ int len; char **p; for(p = envi原创 2011-11-04 13:15:14 · 944 阅读 · 0 评论 -
WWW超文本源码浏览器
Linux下的C程序:读取远程服务器上的网页源码。/* 功能:WWW超文本源码浏览器*/#include #include #include #include #include #include #include // connect to domain at portint htconnect(char *domain, int port){ int white原创 2011-11-04 15:08:22 · 1839 阅读 · 0 评论 -
整型数组的循环右移
/* 实现整型数组的循环右移 cycleMoveR1:临时空间比较大,但是时间复杂度为O(1) cycleMoveR2:临时空间比较小,时间复杂度为O(n)*/#include #include #include #include // 数组循环右移moveLen个int cycleMoveR1(int arr[], int len, int mov原创 2011-11-06 23:20:12 · 976 阅读 · 0 评论 -
TCP文件传输
下面是一个简单的TCP文件传输的例子,实现环境:Linux CServer.c// 向客户端发送文件#include #include #include #include #include #include #include #include #include #define MAXBUFF 1024// 通过sock来发送指定的文件原创 2011-11-08 13:44:31 · 928 阅读 · 0 评论 -
exit(),_exit()的区别
Linux的源码#define __NR_exit 1#define __NR__exit __NR_exit /* 摘自文件include/asm-i386/unistd.h*/ "__NR_"是在Linux的源码中为每个系统调用加上的前缀,请注意第一个exit前有2条下划线,第二个exit前只有1条下划线。Linux核心还提供了一些C语言函数转载 2011-11-08 15:30:47 · 586 阅读 · 0 评论 -
数据报套接字服务端和客户端
这里练习用数据报套接字来通讯。listener.c// 数据报套接字服务器(listener.c):在指定端口监听,收到数据报后关闭连接#include #include #include #include #include #include #include #include #define MYPORT 5000#define MAXBU原创 2011-11-07 22:13:09 · 1051 阅读 · 0 评论 -
输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据
C程序,功能如题,代码如下:/* 功能:输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据 基本思路:产生一个长度为n的二维数组,将它作为一个循环队列来看待*/#include #include #include #define BUFLEN 256// 显示一个文件的最后len行数据void run(char *filename原创 2011-11-08 15:06:27 · 783 阅读 · 0 评论 -
输出上下对称的星型
输出星型,如: ******* ***** *** * *** ************C code:// 用法如:a.exe 7#includeint main(int argc, char *argv[]){ if(argc < 2) { printf("Usage: %s \n", argv[0]);原创 2011-11-08 22:30:45 · 1242 阅读 · 0 评论 -
signal函数说明
c traps and pitfalls 对signal函数解释得非常详细。 中void ( *signal( int sig, void (* handler)( int ))) ( int );int (*p)();这是一个函数指针, p所指向的函数是一个不带任何参数, 并且返回值为int的一个函数.int (*fun())();这个式子与上面式子的区别在于用fun()转载 2011-11-09 11:23:32 · 983 阅读 · 0 评论 -
利用ioctl获取本机指定设备的MAC地址
// 利用ioctl获取本机指定设备的MAC地址#include#include#include#include#include#include#include#include#include#include#include#include#include#includeint main(int argc, char **argv原创 2011-11-09 16:07:09 · 6828 阅读 · 2 评论 -
OOB套接字传输实例(达不到预期结果)
参考资料:>page119-205代码本来是全照书上抄的,后来发现编译不成功,所以就稍微改了下。下面是我修改后的代码:server.c// OOB套接字传输服务端(Server.c)#include #include #include #include #include #include #include #include #include原创 2011-11-09 11:47:43 · 1484 阅读 · 2 评论 -
linux下gdb常用的调试命令
From: http://blog.csdn.net/schoolers/article/details/6743223 用gdb调试程序时,常常很困惑一些命令的使用,要么是不知道这个命令,要么忘了命令的使用方法。呵呵,有时迷茫了自己处在什么堆栈的深处,这是使用where命令能够清晰的看到自己的位置,有时在循环太多让人受不了了,可使用u或者finish或者jump命令来跳出去。gd转载 2011-11-10 11:15:02 · 1050 阅读 · 0 评论 -
一个很有深度的C++内存问题---GDB调试(一)
先看代码(a.c):#include int main(int argc, char* argv[]){ int a[4]={1,2,3,4}; int *ptr1=(int*)(&a+1); int *ptr2=(int*)((int)a+1); int *ptr3=(int*)(a+1); printf("a = %x, &a = %x, &a+1 = %x原创 2011-11-10 11:32:11 · 1130 阅读 · 0 评论 -
使用临时文件mkstemp和输出errno对应的错误描述信息strerror
/* > page24-25: temp_file.c mkstemp: 从一个文件名模板(结尾是:XXXXXX)生成临时文件名,创建这个临时文件,将模式设置为仅当前用户可以访问,并且以读写权限打开这个文件。 mkstemp函数用其他字符替换这些X以得到一个不重复的文件名,函数返回已经打开的文件描述符。 由mkstemp创建的临时文件是不会被自动删除的。原创 2011-11-11 14:09:26 · 2417 阅读 · 0 评论 -
wait系统调用
/* > page46 wait系统调用: 宏WIFEXITED和WEXITSTATUS的定义一般在/usr/include/sys/wait.h*/#include #include #include #include #include #include // 包含对宏WIFEXITED和WEXITSTATUS的定义int spa原创 2011-11-11 17:31:40 · 1131 阅读 · 0 评论