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语言就完成了。