alex_bn_lee

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

【412】Linux 系统编译 C 程序

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

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

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

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

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

1
2
3
4
5
# -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.

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 显示的很舒服,但是没有语法提示。。

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

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

程序运行如下:

1
2
3
4
# 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)

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

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

1
2
3
4
5
6
7
8
9
10
11
// prog.c
#include <stdio.h>
 
int main(){
    char a[10];
    fgets(a, 10, stdin);
     
    printf("%s\n", a);
     
    return 0;
}

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

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

 

5. 获取帮助

可以通过 命令名称 --help

或者 help 命令名称 来实现

1
2
3
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.
    通过竖线隔开,左边为输出,然后将其输入到右边
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 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

posted on   McDelfino  阅读(430)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2018-06-23 【327】Python 中 PIL 实现图像缩放
2018-06-23 【326】PIL 截图及图片识别
点击右上角即可分享
微信分享提示