linux c语言程序,ubuntu编译c程序

其实linux c语言程序的问题并不复杂,但是又很多的朋友都不太了解ubuntu编译c程序,因此呢,今天小编就来为大家分享linux c语言程序的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

Linux中,运行一个C语言程序如何运行

1、打开kali linux的终端。创建一个文件并命名为test.c。在终端输入:touch test.c。

2、可以看到已经生成了一个后缀为test.c的源文件。然后用vim工具打开这个文件并编写代码。在终端中输入:vim test.c或者gvim test.c打开这个文件并编写代码。

3、编写完了这个代码。现在开始编译源文件。在终端中输入:gcc test.cgcc是linux自带的c语言编译器。如果是windows则要用ide工具来编译。linux系统一般写C语言用gcc+vim+gdb三个自带的工具就可以了。

4、打完gcc test.c编译完C源文件。然后就可以看见a.out的文件。一般linux系统就默认为a.out为编译完的文件。现在运行a.out文件。在a.out文件的目录下打开终端并输入./a.out就是运行文件了。

5、如果想要编译完的文件名不要用a.out文件。就可以在编译时打入.gcc test.c-o test.out然后就可以看见有一个test.out.文件了。-o后面跟着的编译生成的文件名。

6、再运行test.out在终端中输入./test.out结果如图。这样在linux系统下编译并运行C语言就完成了。

linux下,编写一个c语言程序实现...(详细见正文)!急!

//没有统计功能,要的话再Hi我

/*

程序功能:查询IP

使用方法:

将IP库保存为c:\data.txt,将要查询的IP保存为c:\ip.txt;编译好本程序后,运行后产生c:\result.txt结果文件

程序BUG:data文件最后需要以两个换行结束

*/

#include<stdio.h>

#include<string.h>

#include<windows.h>

#include<stdlib.h>

#define TOTAL_INFO 100

extern void str_init(char* str1, char* str2, char* str3, char* str4);//字符串初始化函数

extern void str_init_total_info(char*str);

extern int read_file(FILE*fp, char*str);//读取IP

extern void read_dt2_next(FILE*fp, char*str);//单独保存数据库中第二IP段,最大IP范围

extern void next_line_data(FILE*fp);//专用:跳到下一行

extern void next_line_ip(FILE*fp);

extern int total_line(FILE*fp);//检测文件总行数

int main(int argc, char*argv[])

{

FILE*fp_data,*fp_ip,*fp_result;

char t_dt1[5], t_dt2[5], t_dt3[5], t_dt4[5];

char t_ip1[5], t_ip2[5], t_ip3[5], t_ip4[5];//4个IP段,便于比较和保存

char t_dt2_next[5];//保存数据库中同一行第二IP段,最大IP范围

char addr_ip[50];//输出处理后的IP归属地

char temp;

char ip_total_info[30];

int flag_loop_ip=1, flag_loop_data=1;

int i=0, j=0, k=0, flag_complete=0;

int len_dt1, len_dt2;

int len_ip1, len_ip2;

int total_line_nu=0;

str_init(t_dt1, t_dt2, t_dt3, t_dt4);//初始化:将字符串以'\0'填充

str_init(t_ip1, t_ip2, t_ip3, t_ip4);

str_init_total_info(ip_total_info);

fp_data=fopen("c:\\data.txt","r");

fp_ip=fopen("c:\\ip.txt","r");

fp_result=fopen("c:\\result.txt","a+");//追加文件,若存在

total_line_nu=total_line(fp_ip);//获取ip.txt文件的总行数

fseek(fp_ip, 0, SEEK_SET);//将fp_ip移动到文件开头

for(i=0; i<total_line_nu; i++)//外层总循环,由ip.txt文件的总行数控制

{

flag_complete=0;

len_ip1=read_file(fp_ip, t_ip1);

len_ip2=read_file(fp_ip, t_ip2);

read_file(fp_ip, t_ip3);

read_file(fp_ip, t_ip4);

for(j=0; flag_complete== 0; j++)//内层总循环,控制条件:是否完成一次比较

{

len_dt1=read_file(fp_data, t_dt1);//读取各段IP,并保存各段IP长度

len_dt2=read_file(fp_data, t_dt2);

read_file(fp_data, t_dt3);

read_file(fp_data, t_dt4);

read_dt2_next(fp_data, t_dt2_next);//单独保存数据库中第二IP段,最大IP范围

fseek(fp_data,9,SEEK_CUR);//文件指针后移9位,指向汉字将要出现的地方

fgets(addr_ip, 20, fp_data);//单独保存IP信息(汉字)

for(k=0;(temp=fgetc(fp_data))!='\n'; k++)//此处为了使主程序的内层循环自动换行

{

}

// fseek(fp_data,2,SEEK_CUR);//使fp_data指向下一行

// next_line(fp_data);

if(len_dt1==len_ip1&& len_dt2==len_ip2)//如果各段IP都一样长,则比较

{

if(!strcmp(t_dt1, t_ip1))//如果第一段的IP内容一样,比较第二段

{

if(((strcmp(t_dt2, t_ip2))<= 0)&&((strcmp(t_dt2_next, t_ip2))>= 0))

{//如果要查询IP在这个IP段(BUG为:最小范围和最大范围个数不一样)

flag_complete= 1;//完成一次循环

strcpy(ip_total_info,t_ip1);//整理要输出的信息

strcat(ip_total_info,".");

strcat(ip_total_info,t_ip2);

strcat(ip_total_info,".");

strcat(ip_total_info,t_ip3);

strcat(ip_total_info,".");

strcat(ip_total_info,t_ip4);

strcat(ip_total_info,"\t");

strcat(ip_total_info,addr_ip);

fputs(ip_total_info, fp_result);

fseek(fp_data, 0, SEEK_SET);//将fp_data移动到文件开头

}

}

}

//不满足条件时返回循环,因为readfile函数的设置,不用再重置到下一行

}

}

// printf("ftell:%d\n",ftell(fp_data));//获取文件流的读取位置

// fseek(fp,2,SEEK_CUR);//

fclose(fp_data);

fclose(fp_ip);

fclose(fp_result);

return 0;

}

void str_init(char*str1, char*str2, char*str3, char*str4)

{

int i;

for(i=0; i<5; i++)

{

str1[i]='\0';

str2[i]='\0';

str3[i]='\0';

str4[i]='\0';

}

}

///////////////////////////////////////////////////////////////////////////////////////////////////

int read_file(FILE*fp, char* str)

{

int i, len;

char t;

for(i=0;((str[i]=fgetc(fp))>='0')&&(str[i]<='9'); i++)//从文件中读取字符串,直到非数字结束

{

}

str[i]='\0';//将最后读取的非数字填充掉

len=strlen(str);

return len;

}

void read_dt2_next(FILE*fp, char*str)//单独保存数据库中第二IP段,最大IP范围

{

char temp;

int flag=0,i;

for(i=0; flag!= 1; i++)//直到找到第二段最大范围IP

{

temp= fgetc(fp);

if(temp=='.')//第二段IP以第一段的.开始

{

flag= 1;

}

}

//保存找到的第二段最大范围IP

for(i=0;((str[i]=fgetc(fp))>='0')&&(str[i]<='9'); i++)//从文件中读取字符串,直到非数字结束

{

}

str[i]='\0';//将最后读取的非数字填充掉

}

void next_line_data(FILE*fp)//使文件指针指向下一行

{

char t;

t=fgetc(fp);

while(t!='\n')

{

// printf("temp t:%c\n", t);

// system("pause");

t=fgetc(fp);

}

t=fgetc(fp);

if(t!='\n')

{

fseek(fp,-1,SEEK_CUR);

}

else

{

t=getc(fp);

if(t!='\n')

{

fseek(fp,-1,SEEK_CUR);

}

}

//fseek(fp,4,SEEK_CUR);//精确定位到下下一行,因为两行之间有一个空白行

//t=fgetc(fp);//读取换行符,使文件指针指向下一行

}

void next_line_ip(FILE*fp)//使文件指针指向下一行

{

char t;

t=fgetc(fp);

while(t!='\n')

{

// printf("temp t:%c\n", t);

// system("pause");

t=fgetc(fp);

}

fseek(fp,2,SEEK_CUR);//精确定位到下下一行,因为两行之间有一个空白行

//t=fgetc(fp);//读取换行符,使文件指针指向下一行

}

int total_line(FILE*fp)//检测总行数

{

char t1, t2;

int flag=0, flag2=0;

t1= fgetc(fp);

t2= fgetc(fp);

while(t1!= EOF)//到达文件尾或出错返回EOF

{

if((t1=='\n')&&(t1=fgetc(fp)!= EOF))

{

flag2=0;

flag+=1;

}

else flag2=1;

t1= fgetc(fp);

}

flag=flag+flag2;

return flag;

}

void str_init_total_info(char*str)

{

int i;

for(i=0; i<TOTAL_INFO; i++)

{

str[i]='\0';

}

}

在Linux系统中,如何运行一个C语言程序

1、打开kali linux的终端。创建一个文件并命名为test.c。在终端输入:touch test.c。

2、可以看到已经生成了一个后缀为test.c的源文件。然后用vim工具打开这个文件并编写代码。在终端中输入:vim test.c或者gvim test.c打开这个文件并编写代码。

3、编写完了这个代码。现在开始编译源文件。在终端中输入:gcc test.cgcc是linux自带的c语言编译器。如果是windows则要用ide工具来编译。linux系统一般写C语言用gcc+vim+gdb三个自带的工具就可以了。

4、打完gcc test.c编译完C源文件。然后就可以看见a.out的文件。一般linux系统就默认为a.out为编译完的文件。现在运行a.out文件。在a.out文件的目录下打开终端并输入./a.out就是运行文件了。

5、如果想要编译完的文件名不要用a.out文件。就可以在编译时打入.gcc test.c-o test.out然后就可以看见有一个test.out.文件了。-o后面跟着的编译生成的文件名。

6、再运行test.out在终端中输入./test.out结果如图。这样在linux系统下编译并运行C语言就完成了。

阅读剩余
THE END