C语言上机实习报告

时间:2019-05-14 01:16:13下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言上机实习报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言上机实习报告》。

第一篇:C语言上机实习报告

一、实验目的

1.能够描述VC++6.0开发平台的使用过程,学会运行一个C程序的基本步骤,包括编辑、编译、链接和运行。

2.能够使用算术表达式和赋值表达式书写正确的语句。3.能够使用输入/输出函数编写简单的程序。

二、实验环境

(调试程序所使用的软硬件环境)软件环境:VC++6.0 硬件环境:宏基

Intel 奔4 主频 2.8GHz,内存256MB

三、实验内容、结果及分析

1、题目1)求华氏温度150°F对应的摄氏温度。计算公式如下: 55cf32

其中:c表示摄氏温度,f表示华氏温度。源程序清单:(调试好的源程序代码)// work1.cpp : Defines the entry point for the console application.//

#include “stdafx.h” #include using namespace std;int main(int argc, char* argv[]){

} 主要标识符说明:(源程序中主要标识符含义说明)Double为双精度类型变量名表

实验结果:(程序运行结果)double f,c;cout<<“输入华氏温度,按Enter执行”<>f;c=5*(f-32)/9.0;cout<<“华氏温度为”<

实验中遇到的问题及解决的方法 源代码的粘贴出现乱码

解决:从Cpp文件中粘消除格式。

2、题目

已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均分。

源程序清单:(调试好的源程序代码)// work2.cpp : Defines the entry point for the console application.//

#include “stdafx.h” #include using namespace std;int main(int argc, char* argv[]){

double a,b,c,average;cout<<“请按顺序输入数学、英语、计算机三科成绩。”<>a>>b>>c;average=(a+b+c)/3.0;cout<<”数学“<

实验中遇到的问题及解决的方法

3、题目

当n为152时,分别求出n的个位数字(digit1)、十位数字(digit2)和百位数字(digit3)的值。

源程序清单:(调试好的源程序代码)// work3.cpp : Defines the entry point for the console application.//

#include “stdafx.h” #include using namespace std;int main(int argc, char* argv[]){

int n,digit1,digit2,digit3;cout<<“请输入一个三位数n(100﹏999)”<>n;digit1=n%10;

//求个位数字 digit2=n/10%10;

//求十位数字 digit3=n/100%10;

//求百位数字

cout<<“个位数字(digit1)”<

实验中遇到的问题及解决的方法

四、实验体会(心得、收获)

C语言对我们来说是一个崭新的学科。我想学习C语言就像学习其他学科一样,需要我们用心的去学习。它也是我们交流的一种新的方式。只不过是人机之间的。随着科学的进步,与社会的发展,计算机显得尤为重要。C语言又是学习计算机的基础,所以我们更应该该好好的学习C语言。通过这节实验课,我们学到了如何运用6.0来编辑代码,运行我自己编写的程序。虽然过程中会有错误,但在这犯错的过程中我学到了我所不知道的。在这纠错的过程中,我来了解到我还有很多的地方不足。如忘记写分号等。其实就错就是个学习的过程。

对于实验上的问题,如粘源代码时,就应先用记事本打开源代码,就可以。而不是在程序中直接粘,这样就不会出现乱码。还有,就是注意小处的错误,如分号和注意换行的使用。

第二篇:c语言上机实习报告

苏州科技大学上机实习报告 程序设计语言(C语言)

实验一: Visual C++实验环境

一、实验任务

实验一

二、实验目的

1.了解C程序结构,熟悉VC++ 6.0开发环境。

2.熟悉在VC++ 6.0开发环境中编辑、编译、连接、运行和调试C语言程序。3.通过运行简单的C语言程序,初步连接C语言源程序的特点。

三、实验环境

硬件:PC兼容机 CPU Core i5,内存4GB; 操作系统:中文版 Windows 7;

应用软件 Visual C++ 6.0程序开发环境。

四、实验准备及作业提交方法

1.提交位置

在计算机硬盘(E盘)上新建以学生“学号姓名”命名的文件夹,本次实验学生编写的程序文件先保存到上述文件夹中,待上机实验结束时,将文件夹通过校园网络提交到规定服务器位置上。2.提交内容

本次作业需提交2类文件:.c文件、上机实习报告.doc

五、实验内容(因实验内容较多,本实验报告中仅体现部分内容)

1.编写一个程序,输出以下信息:

*****************************

Welcome to the world of C!

***************************** 【源程序代码】

电子与信息工程学院上机实习报告

第1页 2.编写程序求两数之和

【源程序代码】

3. 编写程序。

【源程序代码

六、思考与实践

6.【修改后源程序代

码】 7.【源程序代码】

七、实验分析总结

有时候多个错误只要改第一个就行了。不能忘记尾部的‘;’。C语言要敢于动手尝试,不能逃避困难。

第三篇:c语言上机实习填空题

班级:学号:姓名:

填空题

第一题

题目要求(11)

下列给定程序中,函数fun的功能是:将形参中,各位偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。例如,输入一个整数27638496,中。.

#include #include

int fun(char*source, char*target){FILE*fs,*ft;charch;/**********found**********/if((fs=fopen(source,“w”_))==NULL)return 0;

if((ft=fopen(target, “w”))==NULL)函数返回值为64862

#include

unsigned long fun(unsigned longn){ unsigned longx=0;intt;while(n){ t=n%10;

/**********found**********/if(t%2==0)

/**********found**********/x=10*x+t;

/**********found**********/n=n/10;}returnx;} main()

{ unsigned longn=-1;while(n>99999999||n<0){

printf(“Please

input(0

”);scanf(“%ld”,&n);}

printf(“nThe result is: %ldn”,fun(n));}

1、做题分析: ① 本题考查:已知某数,如何求该数各个

位数值,已知各个位数值,如何表示该数;除法运算。将十位取出数以用于下次运算故改为n/10 第二题(11)

1、题目要求

.给定程序的功能是;调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值是1,失败时返回值为O。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname

return 0;

printf(“nThe data in file :n”);ch=fgetc(fs);

/**********found**********/while(!feof(fs)){putchar(ch);

/**********found**********/fputc(ch,ft);ch=fgetc(fs);}

fclose(fs);fclose(ft);printf(“nn”);return1;} main(){

char

sfname[20]

=“myfile1”,tfname[20]=“myfile2”;

FILE*myf;inti;charc;myf=fopen(sfname,“w”);printf(“nThe original data :n”);for(i=1;i<30;i++){

c='A'+rand()%25;fprintf(myf,“%c”,c);printf(“%c”,c);}

fclose(myf);printf(“nn”);if(fun(sfname,tfname))printf(“Succeed!”);

elseprintf(“Fail!”);}

答案:【1】“r” 【2】fs【3】ft

2、做题分析

① 对数据文件部分的知识掌握不透彻。首

先以读的方式打开文件看看是否有数据在里面,然后再进行操作,故应将“w”改为“r”。第三题

班级:学号:姓名:

1、题目要求

给定程序的功能是:从键盘输入若干行文件(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。#include #include #include void WriteText(FILE *);void ReadText(FILE *);main()

{FILE*fp;

if((fp=fopen(“myfile4.txt”,“w”))==NULL)

{printf(“ open fail!n”);exit(0);}

WriteText(fp);fclose(fp);

if((fp=fopen(“myfile4.txt”,“r”))==NULL)

{printf(“ open fail!n”);exit(0);}

ReadText(fp);fclose(fp);}

/**********found**********/ void WriteText(FILE___1___){charstr[81];

printf(“nEnter string with-1 to end :n”);gets(str);

while(strcmp(str,“-1”)!=0){ /**********found**********/fputs(___2___,fw);fputs(“n”,fw);gets(str);} }

void ReadText(FILE*fr){charstr[81];

printf(“nRead file and output to screen :n”);

fgets(str,81,fr);while(!feof(fr)){ /**********found**********/printf(“%s”,___3___);fgets(str,81,fr);} }

2、做题分析 答案:【1】*fw【2】str【3】str ①本题考查:函数定义以及文件指针;fputs函数的功能是向指定的文件写入一个字符串,其调用形式为: fputs(字符串,文件指针)。

【解题思路】

填空1:定义函数,函数的形参是一个文件类型的指针。

填空2:此处考查fputs函数的形式,应填入str。

填空3:依据printf函数的格式,输出字符串内容,即printf(“%s”,str)。

第四篇:c语言上机实习编程题

班级:姓名:学号:

第一题

一、题目要求(11题)

#include #include #defineN16 typedefstruct {charnum[10];ints;} STREC;

STRECfun(STREC*a, char *b){ int i;

STREC str={“”,-1};/*若没找到指定的学号,在结构体变量中给学号置空串,给成绩置-1*/

for(i=0;i

if(strcmp(a[i].num,b)==0)/*找到指定学号的学生数据*/ str=a[i];

str=a[i];

return str;/*返回学生记录*/ }}

main(){STREC s[N]={{“GA005”,85},{“GA003”,76},{“GA002”,69},{“GA004”,85},{“GA001”,91},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GA015”,85},{“GA013”,91},{“GA012”,64},{“GA014”,91},{“GA011”,77},{“GA017”,64},{“GA018”,64},{“GA016”,72}};STRECh;charm[10];

inti;FILE *out;

printf(“The original data:n”);for(i=0;i

{if(i%4==0)printf(“n”);

printf(“%s %3d”,s[i].num,s[i].s);}

printf(“nnEnter the number:”);gets(m);h=fun(s,m);

printf(“The data :”);

printf(“n%s%4dn”,h.num,h.s);printf(“n”);

out = fopen(“out.dat”,“w”);h=fun(s,“GA013”);

fprintf(out,“%s%4dn”,h.num,h.s);fclose(out);}

第二题

编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程COS(x)-x=O的一个实根。Xn+1=COS(Xn)。迭代步骤如下:(1)取x1初值为0.0;

(2)xO=xl,把xl的值赋给xO:(3)x1=COS(x0),求出一个新的x1;(4)若x0-xl的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);

(5)所求x1就是方程COS(x)-x=0的一个实根,作为函数值返回。程序将输出结果

Root=0.739085。#include #include #include float fun(){} main(){ clrscr();

printf(“Root=%fn”,fun());}

第三题

一、题目要求

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符

串中的前导*号全部移到字符串的尾部。例如,若字符串中的内容为*******A*BC*DEF*G****

移动后,字符串中的内容应当是A*BC*DEF*G***********。在编写函数时,不得使用C语言提供的字符串函数。

#include #include void fun(char *a){} main()

{ char s[81],*p;int n=0;

printf(“enter a string:n”);gets(s);fun(s);

printf(“the string after moving:n”);puts(s);}

一、做题分析

【参考答案】

voidfun(char *a){

int i=0,n=0;char *p;p=a;

while(*p=='*')/*判断*p是否是*号,并统计*号的个数*/{ n++;p++;}

while(*p)/*将前导*号后的字符传递给a*/{

a[i]=*p;i++;p++;}

while(n!=0){

a[i]='*';i++;n--;} a[i]='';}

二、做题分析

【考点分析】

本题考查:移动字符串中指定字符的位置,一般采用while循环语句,通过指针型变量来完成。

【解题思路】 函数fun的功能:将字符串中的前导*号全部移到字符串的尾部。本题解题思路:(1)定义一个指针并指向字符串的首地址;(2)利用循环语句找出字符串的前导*号的个数n;(3)利用循环语句把剩余的字符拷贝到另一个字符串中;(4)在字符串的末尾接上n个*号。

第四题 题目要求

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不只一个,函数返回分数最高的学生的人数。

#include #define N16 typedef struct { char num[10];int s;}STREC;

int fun(STREC *a, STREC *b){ } main(){STREC

s[N]={{“GA05”,85},{“GA03”,76},{“GA02”,69},{“GA04”,85},{“GA01”,91},{“GA07”,72},{“GA08”,64},{“G

A06”,87},{“GA015”,85},{“GA013”,91},{“GA012”,64}, {“GA014”,91},{“GA011”,77},{“GA017”,64}, {“GA018”,64},{“GA016”,72}};

STREC h[N];int i,n;FILE *out;n=fun(s,h);

printf(“the %d highest score :n”,n);for(i=0;i

printf(“%s%4dn”,h[i].num,h[i].s);printf(“n”);

out=fopen(“out15.dat”,“w”);fprintf(out, “%dn”,n);for(i=0;i

二、做题分析

1、应该先用for循环找出这些学生中成绩最高的然后再利用for循环结构把和最高成绩一样的找出来并用j记录最高成绩的个数。注:本题主要考察结构体的应用。故函数如下intfun(STREC*a, STREC *b){

int i,j=0,max=a[0].s;/*找出最大值*/for(i=0;i

if(max

for(i=0;i

if(max==a[i].s)b[j++]=a[i];

/*找出成绩与max相等的学生的记录,存入结构体b中*/return j;

/*返回最高成绩的学生人数*/}

第五题

一、题目要求

#in假定输入的字符串中只包含字母和*号。

请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不得使用c语言提供的字符串函数。例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****ABCDEFG。

#include void fun(char *a){ } main(){ char s[81];

printf(“enter astring:n”);gets(s);fun(s);

printf(“the string after deleted:n”);puts(s);}

二、做题分析

1、首先判断*p前几个字符中中是否含有*,记录*截止的位置,然后再判断字符数组中其他的英文字符。故函数程序如下 Int i=0; char *p=a;

while(*p&&*p==’*’){a[i]=*p;i++;p++;} while(*p){if(*p!=’*’){a[i]=*p;i++;} p++;}

第六题

一、题目要求(18)

请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 0 0O 0 0 O O 0 0 0 0 0 0 0 0 0 0 0 O #include #include

void fun(char *tt, int pp[]){} main()

{char aa[1000];intbb[26], k, n;clrscr();

printf(“nPlease entera char string:”);scanf(“%s”, aa);fun(aa, bb);

for(k = 0;k < 26;k++)printf(“%d ”, bb[k]);

printf(“n”);}

一、做题分析

本题考查:for循环语句,注意循环变量取值范围以及循环体语句作用。数组元素初始化和赋值操作。if语句条件表达式,需注意条件表达式的逻辑运算。字符串结束标识

要求统计在tt所指字符串中'a'到'z'26个小写字母各自出现的次数,并依次放在pp所指数组中。首先for循环语句体中初始化pp数组中分别用来统计26个字母的个数。再使用循环判断语句对tt所指字符串中的字符进行逐一比较操作,同时存入相对应的pp数组中。故程序如下

void fun(char *tt, int pp[]){ int i;

for(i=0;i<26;i++)pp[i]=0;

for(;*tt!='';tt++)

if(*tt>='a'&&*tt<='z')pp[*tt-'a']++;}

第五篇:linux上机实习报告

目 录

Linux 第一次上机(运行环境RedHat)................................................................................1 调试运行CD唱片应用程序.......................................................................................1 运行过程............................................................................................................1 心得体会............................................................................................................3 编写shell脚本,求1到100的和..............................................................................3 运行过程............................................................................................................3 源代码...............................................................................................................4 编写shell脚本,从键盘输入两个数,求这两个数的和.................................................4 运行过程............................................................................................................4 源代码...............................................................................................................5 等待特定用户登录,每30秒确认一次.......................................................................5 运行过程............................................................................................................5 源代码...............................................................................................................6 找出系统中当前消耗磁盘容量最大的前10个用户,并向他们发送警告邮件...............6 运行过程............................................................................................................6 源代码...............................................................................................................8 查找输入文件的路径.................................................................................................8 运行过程............................................................................................................8 源代码...............................................................................................................9 Linux 第二次上机(运行环境RedHat)................................................................................9 定制自己的ls命令。提供至少三种带参数的执行方式................................................9 运行过程............................................................................................................9 源代码..............................................................................................................11 调试编译串行口通信程序p6.5.c...............................................................................16 运行过程..........................................................................................................16 Linux 第三次上机(运行环境RedHat,CentOS)...............................................................16 创建一个系统监听守护进程,一旦接收到其他进程发来的信号,马上给出报告........16 运行过程..........................................................................................................16 源代码.............................................................................................................18 分别利用本地socket套接字和INTENET套接字实现进程间文件传输......................20 本地socket套接字运行过程.............................................................................20 本地socket套接字服务器server1.c源代码........................................................22 本地socket套接字客户端client1.c源代码.........................................................23 INTENET套接字运行过程...............................................................................25 INTENET套接字服务器server2.c源代码..........................................................28 INTENET套接字客户端client2.c源代码...........................................................29 感谢与收获....................................................................................................................30

Linux 第一次上机(运行环境RedHat)调试运行CD唱片应用程序 运行过程

图表 1第一步,使用./CD 命令运行CD脚本

图表 2进入选项界面

图表 3增加CD

图表 4查找CD

图表 5查询数目

图表 6退出

心得体会

通过运行书上的CD唱片应用程序,进一步地了解到shell编程的方法,以及编写程序的思路。

编写shell脚本,求1到100的和 运行过程

图表 7使用./sum1to100运行

源代码

图表 8使用cat sum1to100查看源代码

编写shell脚本,从键盘输入两个数,求这两个数的和

运行过程

图表 9使用./sumAandB 运行

源代码

图表 10使用cat sumAandB查看源代码

等待特定用户登录,每30秒确认一次 运行过程

已知特定用户是zzx,我首先让root用户登录并运行程序,可以发现每隔30s提醒一次

图表 11使用./checkuser运行

当我切换到zzx用户,并再次运行程序,可得如下结果

源代码

图表 12使用cat checkuser查看代码

找出系统中当前消耗磁盘容量最大的前10个用户,并向他们发送警告邮件 运行过程

由于权限等问题,我们使用root用户运行程序

图表 13使用./mymail运行

运行完毕后,我们就可以查看邮件了

图表 14 root用户收到的邮件

图表 15 zzx用户收到的邮件

图表 16 t1用户收到的邮件

源代码

图表 17 使用cat命令查看

查找输入文件的路径 运行过程

由于权限的问题,我们使用root用户运行程序

图表 18 使用./route运行,并按照要求输入文件名

源代码

图表 19 使用cat route查看源代码

Linux 第二次上机(运行环境RedHat)定制自己的ls命令。提供至少三种带参数的执行方式 运行过程

图表 20 使用./ls 运行不带参数ls

图表 21使用./ls-l 运行带参数-l 的ls

图表 22 使用./ls-a运行带参数-a的ls

图表 23使用./ls-al 运行带参数-al的ls 源代码

#include #include #include #include #include #include #include

#include #include #include

int do_ls(char *dir,char *filename,int lflag){

int n;struct stat buf;char out[100];struct passwd *pw;

struct group *gr;struct tm *t;if(lflag == 0){

} {

} return 0;

printf(“%st”,filename);if(lstat(dir,&buf)<0)fprintf(stderr,“stat error:%sn”,strerror(errno));return-1;switch(buf.st_mode & S_IFMT){ case S_IFREG: printf(“-”);break;case S_IFDIR: printf(“d”);break;case S_IFCHR: printf(“c”);break;case S_IFBLK: printf(“b”);break;case S_IFIFO: printf(“p”);break;case S_IFLNK: printf(“l”);break;

case S_IFSOCK:

printf(“s”);} for(n=8;n>=0;n--){

if(buf.st_mode&(1<

break;

}

} else { } { case 2:

printf(“r”);break;case 1:

printf(“w”);break;case 0:

printf(“x”);break;default: break;} printf(“-”);printf(“ %d”,buf.st_nlink);

pw = getpwuid(buf.st_uid);printf(“ %s”,pw->pw_name);gr = getgrgid(buf.st_gid);printf(“ %s”,gr->gr_name);printf(“ %ld”,buf.st_size);t = localtime(&buf.st_atime);printf(“ %d-%d-%d %d:%d”

,t->tm_year+1900 ,t->tm_mon+1 ,t->tm_mday ,t->tm_hour ,t->tm_min);

printf(“ %s ”,filename);

if(S_ISLNK(buf.st_mode)){

printf(“-> ”);if(readlink(filename,out,100)==-1){ } //printf(“readlink errorn”);

} printf(“%s”,out);} printf(“n”);return 0;int ls_prepare(char *w,int aflag,int lflag){

struct stat buf;char name[100];DIR *dir;

struct dirent *pdr;if(lstat(w,&buf)<0){ fprintf(stderr,“stat error:%sn”,strerror(errno));return-1;} if(S_ISDIR(buf.st_mode)){

dir = opendir(w);{

} closedir(dir);

while((pdr = readdir(dir))!=NULL)if(aflag==0){

if(pdr->d_name[0]=='.')

continue;memset(name,0,100);

strcpy(name,w);

strcat(name,“/”);

strcat(name,pdr->d_name);do_ls(name,pdr->d_name,lflag);}else

{

} memset(name,0,100);strcpy(name,w);strcat(name,“/”);strcat(name,pdr->d_name);do_ls(name,pdr->d_name,lflag);}else { do_ls(w,w,lflag);

} {

} }

return 0;int main(int argc,char **argv)int aflag =0;int lflag =0;char c;int i;while((c = getopt(argc,argv,“al”))!=-1){

} switch(c){ case 'a': aflag =1;break;case 'l': lflag =1;break;default: break;}

if(argc == optind){ ls_prepare(“./”,aflag,lflag);} else {

} for(i=optind;i

调试编译串行口通信程序p6.5.c 运行过程

由于权限问题,我们在root用户下运行程序

图表 24 使用./mytrunk不带参数运行

图表 25使用./mytrunk /dev/ttyS0 0带参数运行

Linux 第三次上机(运行环境RedHat,CentOS)创建一个系统监听守护进程,一旦接收到其他进程发来的信号,马上给出报告 运行过程

图表 26首先运行守护进程之后查看 当前进程

图表 27可以发现守护进程-jincheng在后台运行,且 PPID=1,PID=4085

图表 28可以发现守护进程向test.txt发送了start

图表 29向守护进程发送终止信号,终止守护进程

图表 30可以发现后台运行的守护进程没了

图表 31可以发现守护进程又向test.txt发送了end

图表 32具体查看test.txt

图表 33具体查看test.txt的内容

源代码

#include #include #include #include #include #include #include /* Daemonize myself.*/ int fd1;void sigintHandler(int sig){

if(sig==SIGTERM){ write(fd1,“endn”,5);exit(0);} } int daemon(int nochdir, int noclose){

pid_t pid;

pid = fork();

/* In case of fork is error.*/

if(pid < 0)

{

perror(“fork”);

return-1;

}

/* In case of this is parent process.*/

if(pid!= 0)

exit(0);

/* Become session leader and get pid.*/

pid = setsid();

if(pid <-1)

{

perror(“setsid”);

return-1;

}

/* Change directory to root.*/

if(!nochdir)

chdir(“/”);

/* File descriptor close.*/

if(!noclose)

{

int fd;

fd = open(“/dev/null”, O_RDWR, 0);

if(fd!=-1)

{

dup2(fd, STDIN_FILENO);

}

dup2(fd, STDOUT_FILENO);

dup2(fd, STDERR_FILENO);

if(fd > 2)

close(fd);

}

umask(0027);

return 0;

}

int main(void){ fd1=open(“test.txt”,O_RDWR | O_TRUNC);

} write(fd1,“startn”,7);daemon(0,0);signal(SIGTERM,sigintHandler);sleep(1000);return 0;

分别利用本地socket套接字和INTENET套接字实现进程间文件传输

本地socket套接字运行过程

图表 34使用./server1运行服务器,显示服务器等待状态

图表 35当在另外一个终端运行客户端程序时,服务器显示客户连接,并要求输入传输文件名称

图表 36当服务器输入文件名称server1.c后客户端显示接收信息,不过接收到的文件重定向到

test.txt中

图表 37 server1.c的内容

图表 38 客户端接收到显示在test.txt的内容,和server1.c的内容比较,完全一致

本地socket套接字服务器server1.c源代码

#include #include #include #include #include #include #include #include int main(){

int filefd,n;////////////////

char file[100],buf[1024];////////////////

int server_sockfd,client_sockfd;

int server_len,client_len;

struct sockaddr_un server_address;

struct sockaddr_un client_address;

unlink(“server_socket”);

server_sockfd =socket(AF_UNIX,SOCK_STREAM,0);

server_address.sun_family =AF_UNIX;

strcpy(server_address.sun_path,“server_socket”);

server_len =sizeof(server_address);

bind(server_sockfd,(struct sockaddr *)&server_address,server_len);

listen(server_sockfd,5);

while(1)

{

printf(“server waitingn”);

client_len =sizeof(client_address);

client_sockfd=accept(server_sockfd,(struct *)&client_address,&client_len);

if(client_sockfd!=-1)

{

printf(“you have a client ,please put the filename to transport!n”);

scanf(“%s”,file);

if((filefd=open(file,O_RDWR))<0)

{

perror(“can't find the file”);

exit(1);

}

printf(“filefd= %dn”,filefd);

printf(“the file is transported ,please wait...n”);

lseek(filefd,0L,0);//每次接受客户机连接,应将用于读的源文件指针移到文件头

write(client_sockfd,file,sizeof(file));//传送文件名

if((n=read(filefd,buf,sizeof(buf)))>0)

{

}

write(client_sockfd,buf,n);

sockaddr

printf(“you have transport %d bytes and it is end!n”,n);

close(client_sockfd);

}

close(filefd);

} }

本地socket套接字客户端client1.c源代码

#include #include #include #include #include #include

#include #include int main(){

int filefd,n,oldfilefd;/////////////////

char file[100],buf[1024];

int sockfd;

int len;

struct sockaddr_un address;

int result;

sockfd =socket(AF_UNIX, SOCK_STREAM,0);

address.sun_family =AF_UNIX;

strcpy(address.sun_path,“server_socket”);

len=sizeof(address);

result=connect(sockfd,(struct sockaddr *)&address,len);

if(result ==-1)

{

perror(“oops:client1”);

exit(1);

}

if(result!=-1)

{

oldfilefd=open(“test.txt”,O_RDWR);

filefd=dup(oldfilefd);

read(sockfd,file,sizeof(file));

printf(“the filename you receive is:%sn”,file);

if((n=read(sockfd,buf,sizeof(buf)))>0)

{

write(filefd,buf,n);

}

printf(“you have received a file which is %d bytes,but the file's context cover the test.txt,so please check into test.txt!n”,n);

close(sockfd);

}

close(filefd);

exit(0);}

INTENET套接字运行过程

图表 39使用./server2运行服务器,显示服务器等待状态

图表 40当在另外一个终端运行客户端程序时,服务器显示客户连接,并要求输入传输文件名称

图表 41当服务器输入文件名称server2.c后客户端显示接收信息,不过接收到的文件重定向到

test.txt中

图表 42 server2.c的内容

图表 43客户端接收到显示在test.txt的内容,和server2.c的内容比较,完全一致

INTENET套接字服务器server2.c源代码

#include #include #include #include #include #include #include #include #include

int main(){ int filefd,n;////////////////

char file[100],buf[4096];/////////////////// int server_sockfd,client_sockfd;

int server_len,client_len;struct sockaddr_in server_address;struct sockaddr_in client_address;server_sockfd =socket(AF_INET,SOCK_STREAM,0);server_address.sin_family=AF_INET;server_address.sin_addr.s_addr=inet_addr(“127.0.0.1”);server_address.sin_port =9734;server_len=sizeof(server_address);bind(server_sockfd,(struct sockaddr *)&server_address,server_len);listen(server_sockfd,5);while(1)

{

printf(“server waitingn”);

client_len =sizeof(client_address);

client_sockfd=accept(server_sockfd,(struct *)&client_address,&client_len);

if(client_sockfd!=-1)

{

printf(“you have a client ,please put the filename to transport!n”);scanf(“%s”,file);

if((filefd=open(file,O_RDWR))<0){

sockaddr

perror(“can't find the file”);

exit(1);

}

printf(“filefd= %dn”,filefd);

printf(“the file is transported ,please wait...n”);

lseek(filefd,0L,0);//每次接受客户机连接,应将用于读的源>文件指针移到文件头

write(client_sockfd,file,sizeof(file));//传送文件名

if((n=read(filefd,buf,sizeof(buf)))>0)

{

write(client_sockfd,buf,n);

}

printf(“you have transport %d bytes and it is end!n”,n);

close(client_sockfd);

}

close(filefd);

} }

INTENET套接字客户端client2.c源代码

#include #include #include #include #include #include #include #include #include

int main(){

int filefd,n,oldfilefd;//////////////////// char file[100],buf[4096];int sockfd;int len;struct sockaddr_in address;int result;sockfd =socket(AF_INET,SOCK_STREAM,0);address.sin_family =AF_INET;address.sin_addr.s_addr =inet_addr(“127.0.0.1”);address.sin_port =9734;len =sizeof(address);

result=connect(sockfd,(struct sockaddr *)&address,len);

if(result ==-1)

{

perror(“oops:client2”);

exit(1);

}

if(result!=-1){

oldfilefd=open(“test.txt”,O_RDWR);

filefd=dup(oldfilefd);

read(sockfd,file,sizeof(file));

printf(“the filename you receive is:%sn”,file);

if((n=read(sockfd,buf,sizeof(buf)))>0)

{

write(filefd,buf,n);

}

printf(“you have received a file which is %d bytes,but the file's context cover the test.txt,so please check into test.txt!n”,n);

close(sockfd);} close(filefd);

exit(0);}

感谢与收获

通过这几次上机实习,使我更加扎实的掌握了有关Linux C编程方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过编程,使我们掌握的知识不再是纸上谈兵。

过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上披荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!

实践课诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。

我认为,在这学期的课程设计中,不仅培养了独立思考、动手操作的能力,在各种

其它能力上也都有了提高。更重要的是,在课程设计上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。

回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。

下载C语言上机实习报告word格式文档
下载C语言上机实习报告.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    大地测量上机实习报告

    题目: 大地测量学上机实习 学 号: 姓 名: 班 级: 专 业: 测绘工程 课程名称: 大地测量学基础 课程老师: 大地测量学上机实习报告 一、实习目的: 了解大地测量学的定义以......

    计算机上机实习报告

    计算机上机实习报告 姓名:张陆浩 班级:高材11001 学号:201001978 老师:张老师 熊老师 时间:2011年12月24日 一.实验目的: 1. 熟悉VB 6.0的开发环境,掌握基本的编程方法,熟悉用VB......

    上机实习报告格式

    文献检索实习报告(参考格式) 课程名称:文献检索日期:学院:班号:姓名:学号: 实验名称:电子图书等资源检索。 实验目的:掌握图书资源如何检索和利用,熟悉人名录或机构名录的检索。 实验内......

    arcgis上机实习报告

    课程实习报告 实习课程:《ArcGIS专业技能训练实习报告》 姓名: 学号:专业: 班级:2012年 6月 20日 ArcGIS专业技能训练实习报告 实习目的: 通过学习Arcgis这款Gis应用软件熟练......

    会计信息系统上机实习报告

    本次会计信息系统实习,我们主要了解了金蝶软件的具体操作过程和应用。我们在老师的指引下创建模拟的会计电算化工作环境,完成了会计电算化中从建立帐套、系统初始化、基础设置......

    电算化会计上机实习报告

    电算化实习报告 20121001133 084121 于洋 一,实习时间: 1月10日上午、下午 8:30——17:30 1月11日下午、晚上14:00——20:30 1月12日全天 8:30——20:30 1月14日全天 8:30——......

    西南交通大学计算机上机实习报告

    计算机实习报告 一、实习目的 计算机办公软件的使用是交通运输、交通工程等专业学生的基本功,本实习的目的是使学生能够通过短时间的集训式训练,熟练掌握办公软件的使用方法、......

    计算方法与实习上机报告

    计算方法与实习 ——上机报告 学院:电子工程学院 2015.1.4 学号:*** 姓名: 刘 波 习题一: 1 舍入误差及稳定性 一、实验目的 (1)通过上机编程,复习巩固以前所学程序......