mp3信息读取

有点想编写一个播放MP3的歌曲,当然网上很多播放器,但是那些开源的代码太多看起来就头大了,我只想要简单的播放功能而且是dos界面下的,不过那貌似很麻烦,要自己编写解码的程序,还没有头绪(当然那些调用上层库函数的很多,我不想用)现在从网上枪来了一点东西,希望做个铺垫......MP3标签1(放在文件尾部128字节) offset type len name -------------------------------------------- 0 char 3 "TAG " 3 ...
默认分类 | 2010-12-23 22:05 | 阅读 1109 次 | 评论 1 条

AT&T汇编与8086汇编区别(转的)

在阅读linux内核源代码的时候,必须先掌握汇编,大家都知道,内核代码用的编译器是gcc,而gcc采用的是AT&T的汇编格式,与MS的intel有些区别。一 AT&T的基本语法 语法上主要有以下几个不同. ★ 寄存器命名原则 AT&T: %eax Intel: eax ★ 源/目的操作数顺序 AT&T: movl %eax,%ebx Intel: mov ebx,eax ★ 常数/立即数的格式 AT&T: movl $_value,%ebx Intel: mov eax,_value 把_value的地址放入eax寄存器 AT&T: ...
默认分类 | 2010-12-03 20:57 | 阅读 1129 次 | 评论 0 条

linux应用程序编程之tcp

基础编程(1)函数说明 进行socket编程的基本函数有socket、bind、listen、accept、send、sendto、recv、recvfrom这几个,其中对于客户端和服务器端以及 TCP 和 UDP 的操作流程都有所区别,这里先对每个函数进行一定的说明,再给出不同情况下使用的流程图。 socket:该函数用于建立一个socket连接,可指定socket类型等信息。在建立了socket连接之后,可对socketadd或sockaddr_in进行初始化,以保存所建立的 socket信息。 bind:该函数是用于将本地 IP 地址绑定端口号的,若绑定其他地址则不能成功。另外...
默认分类 | 2010-10-15 12:49 | 阅读 1186 次 | 评论 1 条

linux应用程序编程之网络(用域名取得主机的ip地址)

gethostbyname的用法使用这个东西,首先要包含2个头文件:#include <netdb.h>#include <sys/socket.h>struct hostent *gethostbyname(const char *name);这个函数的传入值是域名或者主机名,例如"www.google.com","wpc"等等。传出值,是一个hostent的结构(如下)。如果函数调用失败,将返回NULL。struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_le...
默认分类 | 2010-10-14 16:29 | 阅读 1043 次 | 评论 1 条

linux应用程序之线程

这里要讲的线程相关操作都是用户空间线程的操作。在Linux中,一般Pthread线程库是一套通用的线程库,是由POSIX提出的,因此具有很好的可移植性。 为什么要用线程:(其实现在我用不到,哈哈)进程是系统中程序执行和资源分配的基本单位。每个进程都拥有自己的数据段、代码段和堆栈段,这就造成了进程在进行切换等操作时都需要有比较负责的上下文切换等动作。为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销,进程在演化中出现了另一个概念——线程。它是一个进程内的基本调度单位,也可以称为轻量级进程。线程是在共享内存空间中并发的多道执行路径,它们共享一个进程的资源,如文件描述和信号处理...
默认分类 | 2010-10-13 19:54 | 阅读 980 次 | 评论 0 条

linux应用程序编程之消息队列

消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。①消息队列的创建与打开#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>int msgget(key_t key,int msgflg);返回值:– 如果成功,返回消息队列标识符– 如果失败,则返回-1 在以下两种情况下,该调用将创建一个新的消息队列:– 如果没有消息队列与健值key相对应,并且msgflg中包含了IPC_CR...
默认分类 | 2010-10-13 15:44 | 阅读 1127 次 | 评论 1 条

linux应用程序编程之命名管道

#include<errno.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/stat.h>#include<sys/sysmacros.h>#include<unistd.h>/** As for the fifo we can creat it use both* mkfifo(const char *pathname,mode_t mode);* and * mknod(); to realize it*/void usage(void){ fprintf(stderr...
默认分类 | 2010-10-13 11:48 | 阅读 1013 次 | 评论 1 条

linux应用程序之共享内存

/* 共享内存的写程序1.首先调用ftok()函数将一个路径名转化为key2.调用shmget();函数,来返回一个共享内存地址3.调用shmat()函数映射共享内存到本进程内存空间4.调用shmdt()函数删除共享内存.*/#include<sys/ipc.h>#include<sys/shm.h>#include<sys/types.h>#include<unistd.h>#include<stdlib.h>#include<stdio.h>#include<sys/stat.h>#include<fcntl.h>#define SIZE 4096typedef struct...
默认分类 | 2010-10-13 11:44 | 阅读 1258 次 | 评论 1 条

关于守护进程

守护进程,也就是通常所说的 Daemon 进程,是 Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的。守护进程的创建步骤:1.创建子进程并且父进程退出2.创建新会话3.改变当前目录为根目录(估计是为了安全,不做也可以吧)4.重设文件权限掩码5.关闭文件描述符1)用fork()即可,不多说.2)在子进程中创建新会话 (setsid函数)这个步骤是创建守护进程中最重要的一步进程组:进程组是一个或多个进程的集...
默认分类 | 2010-10-12 13:34 | 阅读 1193 次 | 评论 2 条

linux应用程序编程---信号

信号#include <signal.h>int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set);int sigaddset(sigset_t *set, int signo);int sigdelset(sigset_t *set, int signo);int sigismember(const sigset_t *set, int signo);函数sigemptyset初始化set所指向的信号集,使其中所有信号的对应bit清零,表示该信号集不包含任何有效信号。函数sigfillset初始化set所指向的信号集,...
默认分类 | 2010-10-11 15:20 | 阅读 723 次 | 评论 0 条

呵呵,弄着玩的

#include<stdio.h>#include<stdlib.h>int main(void){ int flag=-1; if((flag=system("C:\\Progra~1\\Tencent\\QQ\\bin\\qq.exe"))==-1) { printf("Check your qq install path!\n"); exit(-1); } else { printf("Your qq is unsafe!\n"); printf("Send your qq passwd ...
默认分类 | 2010-10-03 16:41 | 阅读 842 次 | 评论 1 条

TX面试题(转的)

自我介绍说说你的优点 l 一面问题总结:1) 只有一个5L的杯子和一个3L的杯子,如何从一缸水中准确的量出4L的水?解答:(1)先用5L的杯子装满水,将其倒入空的3L杯子中,直至3L的杯子注满,此时5L的杯子中剩余2L;(2)将3L杯子清空,将5L杯子中剩余的2L水倒入3L的杯子;(3)将5L的杯子注满,再将其倒入3L的杯子,使得3L的杯子注满,此时5L的杯子中将剩余4L水。 2) 有64匹马,怎么样安排比赛,可以挑出其中最快的8匹,比赛规则只记录名次而不记录成绩,且是八赛道的赛场,一个赛道一次只能有一匹马。哥不会。抓瞎:( 3) 从N(相当大,比如:10^10)个整数中...
默认分类 | 2010-09-28 00:42 | 阅读 1080 次 | 评论 0 条

从一个文件里面读取数据并累加

#include<stdio.h>int add(int x,int y,int z);int total;int sum=0;int main(void){ FILE *fp; int i,j,k,n,x,y,z; fp=fopen("data.dat","r"); if(fp==NULL) { printf("open file failed!\n"); exit(1); } while (!feof(fp)) { n=fscanf(fp,"%d %d %d",&amp;x,&amp;y,&am...
默认分类 | 2010-09-18 18:24 | 阅读 875 次 | 评论 0 条

我建立了一个C语言学习的qq群:116838192

我建立了一个C语言学习的qq群:116838192,共同学习,一起进步吧!!
默认分类 | 2010-09-15 23:05 | 阅读 777 次 | 评论 0 条

linux下动态链接库的使用方法

/*sintest.c计算一个数的sin值*/ #include<stido.h>#include<math.h>#define pi 3.1415926int main(void){ double x; printf("Input a number for calculate:\n"); scanf("%lf",&amp;x); //这个一定要用 %lf printf("%f",sin(pi*x/180);//这个一定要用%f,printf家族里面没有lf} /*到了这里你用gcc -o sintest sintest...
默认分类 | 2010-09-14 23:54 | 阅读 797 次 | 评论 0 条

一段诡异的程序

/*为什么(int)p=p;(int)q=q;(int)q-(int)p!=q-p*//*同时推荐一本书<<C语言解析教程>>*/#include<stdio.h>int main(void){ int a[2],*p,*q; p=&amp;a[0]; q=p+1; printf("q-p=%d\n",q-p); printf("q=%d\n",q); printf("p=%d\n",p); printf("(int)q=%d\n",(int)q); printf("(int)p=%d\n",(int)p); pri...
默认分类 | 2010-09-11 22:54 | 阅读 974 次 | 评论 4 条

子父进程

#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<stdlib.h>int main(void){ pid_t pid; char *message; int n; pid=fork(); if(pid<0) { perror("fork failed!"); exit(1); } if(pid==0) { message="This is the child!\n"; n=6; pri...
默认分类 | 2010-09-09 11:38 | 阅读 779 次 | 评论 0 条

static 的用法

#include <stdio.h>int selfplus(void);int main(void){ int a,i; for(i=0;i<3;i++) { a=selfplus(); printf("The %dth times a=%d\n",i+1,a); } return 0;}int selfplus(void){ static int a=0; //int a=0; //上面改成这句就可以发现区别 return (++a);}
默认分类 | 2010-09-09 00:27 | 阅读 720 次 | 评论 0 条

c语言程序段分类大全

根据C语言的特点,每一个源程序生成的目标代码将包含源程序所需要表达的所有信息和功能。目标代码中各段生成情况如下: 1.代码段(Code) 代码段由程序中的各个函数产生,函数的每一个语句将最终经过编译和汇编生成二进制机器代码(具体生成哪种体系结构的机器代码由编译器决定)。 ? 顺序代码 基本数学运算(+,-),逻辑运算(&amp;&amp;,||),位运算(&amp;,|,^)等都属于顺序代码。 ? 选择代码 if,if…else语句等将由编译器生成选择代码。 ? 循环代码 w...
默认分类 | 2010-09-07 08:41 | 阅读 1357 次 | 评论 0 条

结构化设计思想

/*1.头文件;文件名:myheadfile.h*/ #include<stdio.h>#include<string.h>#define MAX 100char *fun1(char *s);void fun2(char *s); /**********************************************************/ /*2.子函数1:fun1.c 实现功能从键盘读入一字符串*/ #include "myheadfile.h"char *fun1(char *s){ printf("%s","Please Input a strin...
默认分类 | 2010-09-06 09:32 | 阅读 878 次 | 评论 0 条
浏览48198次
文章分类