• 【412】Linux 系统编译 C 程序


    1. 直接编译,会自动生成 a.out 文件,此文件即为可执行文件

    # 编译 *.c 文件,生成可执行文件 a.out
    gcc euclide.c
    
    # 直接运行如下,如果没有输入和输出文件的话
    # < input.txt
    # > output.txt
    # 可以增加参数值 
    ./a.out
    

    下面代码可以生成相同用户名的 .o 文件,生成 getchar.o 文件

    # -c - Compile and assemble, but do not link.
    gcc -c getchar.c
    

    下面代码可以生成指定名称的 executable,生成 getchar 文件

    # -o <file> - Place the output into <file>.
    gcc getchar.c -o getchar
    
    # 也可以
    gcc -o getchar getchar.c
    

    2. 运行时间计算,使用 time 命令

    The time command returns:

    • real = time you wait (not useful, systems multitask), also called clock time
    • user = CPU time when your program is actually running
    • sys = CPU time taken in system calls (your program is not running but is still using time)

    Hence the user + sys time is the actual time taken by the program.

    代码如下

    alex@alex-VirtualBox:~/Documents/COMP9024/Lectures/Week01$ gcc euclid.c
    alex@alex-VirtualBox:~/Documents/COMP9024/Lectures/Week01$ ./a.out
    1
    alex@alex-VirtualBox:~/Documents/COMP9024/Lectures/Week01$ time ./a.out
    1
    
    real	0m0.002s
    user	0m0.001s
    sys	0m0.001s
    alex@alex-VirtualBox:~/Documents/COMP9024/Lectures/Week01$ date
    Mon 24 Jun 15:38:06 AEST 2019
    alex@alex-VirtualBox:~/Documents/COMP9024/Lectures/Week01$ time date
    Mon 24 Jun 15:38:08 AEST 2019
    
    real	0m0.001s
    user	0m0.000s
    sys	0m0.001s
    alex@alex-VirtualBox:~/Documents/COMP9024/Lectures/Week01$ time sleep 3
    
    real	0m3.015s
    user	0m0.002s
    sys	0m0.000s
    

    3. 写的话就正常写,跟 Windows 也没啥区别,虽然 gedit 显示的很舒服,但是没有语法提示。。

    编译的话就通过命令实现:

    # 编译使用 gcc
    # fgets.c 为 源代码
    # -o
    # fgets 为可执行文件
    gcc fgets.c -o fgets
    

    程序运行如下:

    # fgets 为可执行文件,注意调用的时候需要添加 ./ 的部分
    # < test.txt 表示文件内容标准输入,注意此时没有 ./ 的部分
    # 不造为什么哈,也懒得查啦。。
    ./fgets < test.txt
    

    Ubuntu 运行效果:

    4.  echo 输出内容

    Reminder: the echo command just sends the string arguments to stdout (i.e. the screen here)

    alex@alex-VirtualBox:~/Documents/COMP9024/Lectures/Week01$ echo love is blind
    love is blind
    

    作为输入参数,echo 输出的 owl,作为 后面程序的输入参数

    // prog.c
    #include <stdio.h>
    
    int main(){
    	char a[10];
    	fgets(a, 10, stdin);
    	
    	printf("%s
    ", a);
    	
    	return 0;
    }
    

    编译效果如下,如果直接运行文件,会提示字符串输入

    # 编译
    gcc prog.c
    # 输出 owl 作为 后面可执行文件的输入参数
    echo owl | ./a.out
    # input 里面存储的就是 owl,可以实现与上面一样的效果
    ./a.out < input
    

    5. 获取帮助

    可以通过 命令名称 --help

    或者 help 命令名称 来实现

    gcc --help
    
    help echo
    

    6. There are many ways to 'test' a program that reads stdin.

    • scanf()
    • getchar()
    • Using the keyboard
      直接输入相应的内容
    • Using a data file
      将内容写入到文件中,通过小于号实现导入文件内容
    • Using a pipe command. A pipe command joins the stdout of a program to the stdin of another program.
      通过竖线隔开,左边为输出,然后将其输入到右边
    # Using the keyboard
    
    prompt$ dcc -o counts counts.c
    prompt$ ./counts
    10
    1 2 3 4 5 6 7 8 9 10
    
    #where the integer 10 was typed on the keyboard by the user, and the program generates #the count from 1 to 10.
    
    #Using a data file, input.txt say, which contains the integer 10 (followed by a newline).
    
    prompt$ more input.txt
    10
    
    prompt$ ./counts < input.txt
    1 2 3 4 5 6 7 8 9 10
    
    #Using a pipe command. A pipe command joins the stdout of a program to the stdin of #another program. If we have a program called write10.c:
    #then we can pipe its stdout to the stdin of our counting program
    
    prompt$ dcc -o write10 write10.c
    prompt$ dcc -o counts counts.c
    prompt$ ./write10 | ./counts
    1 2 3 4 5 6 7 8 9 10
    
    #But you can actually generate a string much more easily in UNIX using echo
    
    prompt$ echo "10" | ./counts
    1 2 3 4 5 6 7 8 9 10
    

    7. shell 命令

    • more:用来查看文件内容
    • zip:用来压缩文件
      • -r Option:【文件夹】 To zip a directory recursively, use the -r option with the zip command and it will recursively zips the files in a directory. This option helps you to zip all the files present in the specified directory.
         $zip –r filename.zip directory_name 
      • 参考:ZIP command in Linux with examples
  • 相关阅读:
    将本地sql文件导入到mysql中
    eclipse注释乱码问题
    导入import com.sun.image.codec.jpeg.JPEGCodec出错
    cmd启动和停止tomcat
    Tomcat修改端口
    ==和equals
    多态
    关键字——this,super,static,final
    方法重载、方法重写、四种权限修饰、JavaBean、代码块
    异常
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/11073119.html
Copyright © 2020-2023  润新知