Linux怎么能生成一个可执行文件file, 可以 运行命令。/file<input>o

Linux怎么能生成一个可执行文件file, 可以 运行命令。/file<input>output

linux下可否执行,取决于当前用户对此文件 是否具有 x 权限,至于能否运行成功还得取决于文件中的内容。

执行方法(文件中的内容是可以执行的):

1、bash  filename  (没有 x 权限)

2、加上执行权限

chmod +x filename
./filename

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-14

假设C源文件为file.c,且在/tmp目录下,则在命令行下依次执行:

    cd /tmp

    gcc -o file file.c

即可生成名称为file的可执行文件。

楼主可以看看《linux程序设计》这本书。

追问

不止是生成文件,是在运行执行文件的时候加入其他文件,比如。/file in.c out.u

追答

以C语言编程为例,要让可执行文件(即程序)能够处理其他文件,你在编写那个file.c的时候,就应该加入你想要的针对其他文件的操作。

举例,在file.c中写入如下代码:

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include <string.h>

int main(int argc,char *argv[])
{
FILE *fp;
char tmp[100]={1,2,3,4,5};

fp=fopen(argv[1],"w+"); //以写方式打开一个文件,argv[1]中存放文件名
fprintf(fp,"%s",tmp);   //将tmp中的数据写入文件里
fclose(fp);
exit(0);
}

再执行前面的1、2步,生成file后,执行./file my.txt ,就会往my.txt里存入12345

追问

我在linux里面运行了,在输出output.txt的时候 会多出个数字0,比如 输入  3 2 1的时候 输出是 0 1 2 3,,,,,,这个怎么办?在vc里面运行正常呀

追答while(count<MAX_LEN && !feof(in))    //<——问题出在这个feof()函数
{
    printf("feof(): %d\n",feof(in));   //为了查找问题添加的语句
    fscanf(in,"%d",&arr[count]);
    printf("arr[%d]: %d\n",count,arr[count]);  //为了查找问题添加的语句
    count++;
}

      当你在in.txt存入321(数之间以空格隔开)时,上面的while循环读完1后,count变成了3,再次进入循环判断中的feof(in)部分时,feof(in)返回的值依旧是0,即!feof(in)依旧为真,故循环体继续执行,fscanf(in,"%d",&arr[count]);将会再读入一个数到arr[]中,这样arr[]中就有4个元素,但这第四个数并非来自in.txt(因为它已经读完了),似乎是in.txt文件末尾相邻空间的值。

       再下一次进入循环判断中的feof(in)部分时,feof(in)返回的值才不是0,从而!feof(in)为假,循环不再进行。

        我在本机运行的结果:


3个数,但是feof()总共有4次返回值为0,arr[]中存入了4个元素。

解决方法:

在qsort(arr,count,sizeof(int),comp);前面加一条语句count--;

从而把最后一个非法的数据去除,不对它进行排序操作。

追问

谢谢您的解答
为什么按您的方法加了count--;之后还是有垃圾值,input里面有0的时候就在后面,input里面没有0的话就会出现整数在前面

追答

 下面是我在本机测试的代码,不存在你说的问题。

/*
  此程序用于对in.txt文件的数字进行排序,并将结果保存到out.txt中。
  in.txt中数字的格式: 3 4 7 88 99 00 77 11 ...(相邻之间以空格分隔)
*/

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include <string.h>

int comp(const void *a,const void *b) //字符排序函数qsort中将要调用的比较函数
{
return *(int *)a - *(int *)b;
}

int main()
{
     #define MAX_LEN 100
int arr[MAX_LEN];
int count,i;

FILE *in=fopen("in.txt","r");
FILE *out=fopen("out.txt","w");

if(in==NULL || out==NULL)
{
printf("open failed.\n");
exit(1);
}
count=0;
while(count<MAX_LEN && !feof(in))
{
printf("feof(): %d\n",feof(in));
fscanf(in,"%d",&arr[count]);
printf("arr[%d]: %d\n",count,arr[count]);
count++;
}

count--;
qsort(arr,count,sizeof(int),comp);
for(i=0;i<count;i++)
{
fprintf(out,"%d",arr[i]);
}
fclose(in);
fclose(out);
return 0;
}

测试结果如下图:

追问

太谢谢你了,前两天考试没做这个作业,今天从新拿起来。希望您能抽出时间继续为我解答万分感谢。sort那部分已经完成了,下一步在利用多线程算时间,。time ./sort后面加数字,可是不论加几input写多少行real都是001用户和系统都是零

追答

不清楚你要做什么,最好贴一下代码,再说明一下你在做什么东西,做成什么样,你目前是怎么做的。

追问

代码还是上面的代码,利用多进程
作业要求分别用多进程和线程计算快速排列所需要的时间

追答

要计算快速排列所需要的时间,建议在代码中使用gettimeofday( )函数,可以获得毫秒级的精度。(不需要使用多进程、多线程。)

示例:

#include <stdio.h>
#include <sys/time.h>        //<——需要新增的头文件
int main()
{
   struct  timeval  start,end;    //定义两个timeval结构体
   float   timeuse;               //定义用来保存时间差的变量

   gettimeofday(&start,NULL);    //获取硬件时钟的当前时间
   /*这里是你的快速排列的代码*/
   gettimeofday(&end,NULL);    //获取硬件时钟的当前时间
   
   timeuse=1000000*(end.tv_sec-start.tv_sec)+end.tv_usec-start.tv_usec;  //秒
   timeuse/=1000000; //毫秒
   printf("Used Time: %f 毫秒\n",timeuse);
   return 0;
}

原理:在进行快速排列之前、之后各获取一次时间,中间的差值就是快速排列消耗的时间。

追问

时间time ./文件名就可以了。比较时间是次要的,主要是刚学完进程线程,好难呀,大哥帮人帮到底吧,分全给你

时间time ./文件名就可以了。比较时间是次要的,主要是刚学完进程线程,好难呀,大哥帮人帮到底吧,分全给你

老师给的菲波拉奇数列的例子,照着做就可以,可我还是不会

本回答被提问者采纳
第2个回答  2013-12-14
脚本第一行用#!/bin/sh -e
第二行开始你的命令
存起来~更改挡案权限为755(chmod 755)
第3个回答  2013-12-14
你需要什么“可执行文件”?追问

可执行文件生成好了,可是老师要求是命令./file n input.txt output.txt中n 代表程序中进程的数

权限Linux下让文件具有可执行权限的方法linux设置文件可执行
1. 打开终端,输入chmod命令行。你可以使用如下代码:chmod u+x file_name 2. 其中u表示user,表示文件所有者,+x表示将文件设置为可执行状态。如果没有指定文件所有者,则默认为当前登录用户。3. 另外,还可以使用chmod命令修改文件的权限,如果要使所有用户都拥有文件的可执行权限,则可以使用如下代码...

LinuxC程序可执行文件的编译与生成linuxc执行文件
首先,用户需要先使用一种C语言编译器,例如gcc编译器,来编译源程序,使它们成为中间语言。然后用GNU Linker(ld)链接中间语言程序,从而生成可执行文件。编译器和链接器是操作系统提供的两个功能,需要两个步骤才能完成编译和生成可执行文件的过程,如下所示:编译:gcc source.c -ooutput 生成可执行文...

linux下多个.o文件如何链接生成可执行程序
1、第一步,找到需要打开的.o后缀文件,见下图,转到下面的步骤。2、第二步,执行完上面的操作之后,打开编译器,并在此处使用c-free5,选择新文件,并将其保存为cpp格式,见下图,转到下面的步骤。3、第三步,执行完上面的操作之后,单击“运行”,发现在文件末尾出现了一个具有相同名称.o后缀的文...

linux下如何运行可执行文件
1、打开kali linux的终端。创建一个文件并命名为dutest.c。在终端输入:touch test.c。2、可以看到已经生成了一个后缀为test.c的源文件。然后用vim工具打开这个文件并编写代码。在终端中输入:vim test.c或者gvim test.c打开这个文件并编写代码。3、编写完了这个代码。现在开始编译源文件。在终端中输入...

Linux运行可执行文件的简单方法linux运行可执行文件
最后,就可以使用Linux系统运行该可执行文件了。通常可使用`.\/` 命令运行可执行文件,其中 `.\/` 是活动位置符号,而`filename.out` 则是需要运行的文件名,如`.\/filename.out ` 。另外,也可以使用 `chmod` 命令修改可执行文件的权限,其中 `+x` 是标识添加可运行该文件的权限,下面是...

linux系统怎样安装可执行文件?
3、用file命令查看文件信息,发现是一个32位可执行文件。4、要想在64位系统上与运行32位程序,则需要安装32位lib库。 对于Ubuntu用户可以使用下面的命令安装。5、过程中有可能找不到需要的库,但是会有几个替代包,选择安装其中一个。6、然后就可以正常运行之前的可执行文件了。遇到这种问题其实还有...

linux给执行权限命令linux给执行权限
不需要什么命令,在Linux上面只要是有可执行权限的文件都可以运行(当然前提是这个文件有代码逻辑,能运行的起来)。给一个文件添加可执行权限的命令是这样执行的:chmoda+x文件名。当给文件赋予了可执行权限后,可以这样运行它:在终端中先用cd命令切换到这个文件所在的目录,再用.\/文件名的方式运行它(...

linux下用什么命令来运行可执行文件
不需要什么命令,在Linux上面只要是有可执行权限的文件都可以运行(当然前提是这个文件有代码逻辑,能运行的起来)。给一个文件添加可执行权限的命令是这样执行的:chmod a+x 文件名。当给文件赋予了可执行权限后,可以这样运行它:在终端中先用cd命令切换到这个文件所在的目录,再用.\/文件名的方式运行...

linux可写权限linux可写
linux可以运行哪些软件啊?1、对于开源软件,一般需要编译、链接、安装几个步骤编译就是将源代码转换为二进制的中间代码,链接就是进一步生成可执行文件。步骤如下:解压:tarzxvffilename.tar.gz配置:.\/configure编译:make安装:makeinstall\/\/这一步就是将执行文件拷贝到系统环境目录,便于执行。经过这三...

Linux如何运行文件linux怎么运行文件
1.打开文件夹:Linux操作系统有一个叫做“文件”的默认程序,用户可以使用它来浏览文件夹,然后找到所需要的文件,并双击运行它。2.终端命令:如果要运行文件,用户可以使用Linux的终端实用程序,这是一种提示型用户界面,使用者可以在其中输入命令,运行特定的文件。该命令的一般格式为:.\/filename 3.使用...

相似回答