C代码记录一

来源:互联网 发布:通联数据 编辑:程序博客网 时间:2024/05/17 19:15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int copy_str_from_stdin();
int getline_from_stdin();
void print_EOF();
int getline_from_file(char* line, FILE *fp);
int setline_file(char *line, FILE *fp);
int file_op(char *fname);


//打印EOF
void print_EOF()
{//EOF表示end of file,定义在stdio.h头文件中,是一个整数
printf("EOF = %d\n", EOF);
}


//从标准输入获取字符串,在标准输出上展示
//返回从标准输入获取字符个数
int copy_str_from_stdin()
{
int c, cnt = 0;
while((c = getchar()) != '\n'){//从标准输入获取单个字符,并判断是否换行符结尾
putchar(c); //将单个字符输出到标准输出
cnt ++;
}
putchar('\n');//添加换行符
cnt ++;//为字符个数添加换行符


//通过上述计数,可以看出,一个汉字算作两个char
printf("The length of string that dealed with is %d!\n", cnt);
return cnt;
}


//从标准输入读取一行字符串,输入字符数组用来存储读入的字符串,返回字符串实际长度
int getline_from_stdin(char* line)
{
int c, cnt;
for(cnt=0; (c = getchar()) != '\n'; cnt++)
*line++ = c;
*line++ = '\n';
return cnt;
}


//从一个文件中读取一行信息
int getline_from_file(char* line, FILE *fp)
{
int c, cnt=0;
for(cnt=0; (c = getc(fp)) != EOF && c != '\n'; cnt++)
*line++ = c;
*line++ = '\n';
return cnt;
}
//将一行数据写入到文件fp中
int setline_file(char *line, FILE *fp)
{
int cnt;
for(cnt=0; line[cnt] != '\n'; cnt++)
putc(line[cnt], fp);
putc('\n', fp);


return ++cnt;
}
//打开一个文件,复制文件内容到新增文件中
int copy_file(char *fname)
{
//定义读文件指针并打开读文件
FILE *rfp;
if((rfp = fopen(fname, "r")) == NULL) {
printf("打开读文件出错!");
return (-1);
}


//获取写文件文件名
char fname2[100];memset(fname2, 0, sizeof(fname2));
strncpy(fname2, fname, sizeof(fname2)-1);
strcat(fname2, "_my");
//定义写文件指针并打开写文件
FILE *wfp;
if((wfp = fopen(fname2, "w")) == NULL) {
printf("打开写文件%s出错!", fname2);
return (-1);
}


//获取读文件内容,写入到写文件中
char sLine[200];memset(sLine, 0, sizeof(sLine));
getline_from_file(sLine, rfp);
while(feof(rfp) == 0){//eof(FILE *fp)函数可用于测试流是否到文件尾
setline_file(sLine, wfp);
memset(sLine, 0, sizeof(sLine));
getline_from_file(sLine, rfp);
}
fclose(wfp);


////调用系统读写函数,复制文件
//获取写文件文件名
memset(fname2, 0, sizeof(fname2));
strncpy(fname2, fname, sizeof(fname2)-1);
strcat(fname2, "_sys");
//定义写文件指针并打开写文件
if((wfp = fopen(fname2, "w")) == NULL) {
printf("打开写文件%s出错!", fname2);
return (-1);
}
//fseek函数可以重定位文件指针指向流的位置
//第二个参数表示相对于第三个参数的偏移量
//第三个参数:SEEK_SET  :文件首;SEEK_CUR  :当前位置;SEEK_END  :文件末尾
fseek(rfp, 0, SEEK_SET);
//获取读文件内容,写入到写文件中
memset(sLine, 0, sizeof(sLine));
while(fgets(sLine, 100, rfp) != NULL){//eof(FILE *fp)函数可用于测试流是否到文件尾
if(fputs(sLine, wfp) == EOF) {
printf("拷贝内容到写文件%s出错!", fname2);
fclose(rfp);
fclose(wfp);
return 0;
}
memset(sLine, 0, sizeof(sLine));
}

//关闭读、写文件
fclose(rfp);
fclose(wfp);


return 0;
}


main(int argc, char **argv)
{
if(argc < 2) {
printf("输入参数个数不对:命令 文件名 文件打开模式!");
return -1;
}
copy_file(argv[1]);


//声明于stdlib.h头文件,用于执行dos或者unix命令
system("date");


return 0;
}
原创粉丝点击