目的:将生成的mp3列表随机打乱播放~~ 使用:./randomsort list.m3u 4 >> list1.m3u /* * ===================================================================================== * * Filename: randomsort.c * * Description: * * Version: 1.0 * Created: 2011年01月04日 23时32分13秒 * Revision: none * Compiler: gcc * * Author: 齐保元 (qby), qibaoyuan@126.com * Company: ict,gucas * * ===================================================================================== */ #include <stdlib.h> #include <stdio.h> #include <string.h> FILE *file_open(char* file_name,char* mode); char *read_line(FILE*); void print_usage(char* exe_name); void main(int argc,char **argv){ char* exec_name=strchr(argv[0],'/'); if(!exec_name) exec_name=argv[0]; else ++exec_name; if(1==argc) { print_usage(exec_name); exit(0); } int times=0; if(3==argc) { times=atoi(argv[2]); } FILE *fp=file_open(argv[1],"r"); if(NULL==fp) exit(1); //存放所有的行 char line_array[700][400]={'/0'}; char *line; int i=0; while((line=read_line(fp))!=NULL){ //printf("%s/n",line); strcpy(line_array[i++],line); free(line); } int loops=0; int j=0; srand((unsigned)time(NULL)); while((times--)>=0){ for(loops=0;loops<i;loops++){ j=rand()%i; char tmp[400]={'/0'};; strcpy(tmp,line_array[loops]); strcpy(line_array[loops],line_array[j]); strcpy(line_array[j],tmp); } } //printf("random sorts:/n"); for(loops=0;loops<i;loops++){ printf("%s/n",line_array[loops]); } } void print_usage (char *exe_name) { printf("<Usage>:%s file_name [times]/n",exe_name); } /* ----- end of function print_usage ----- */ /*----------------------------------------------------------------------------- * 打开文件,返回句柄 *-----------------------------------------------------------------------------*/ FILE *file_open(char* file_name,char* mode){ FILE *fp; if((fp=fopen(file_name,mode))==NULL){ fprintf(stderr,"无法打开文件:%s./n",file_name); return NULL; } return fp; } /*----------------------------------------------------------------------------- * 返回一行 *-----------------------------------------------------------------------------*/ char* read_line (FILE *fp) { if(feof(fp)) return NULL; char ch; int max_len=100; char *line=(char*)malloc(max_len); char *new_line; int counter=0;//counter while((ch=fgetc(fp))!='/n' && !feof(fp)){ if(counter>=max_len-1){ max_len*=2; new_line=(char*)malloc(max_len); strcpy(new_line,line); free(line); line=new_line; } *(line+(counter++))=ch; } *(line+counter)='/0'; return line; } /* ----- end of function read_line ----- */