【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
- -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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 截图及图片识别