【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\n", 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
- -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.
【412】Linux 系统编译 C 程序的更多相关文章
- 在Linux系统如何让程序开机时自动启动
在Linux系统如何让程序开机时自动启动 核心提示:系统的服务在开机时一般都可以自动启动,那在linux系统下如果想要程序在开机时自动启动怎么办?我们知道在 windows系统“开始”--& ...
- Ubuntu系统---编译opencv程序的几种方式g++、Makefile、Cmake
Ubuntu系统---编译opencv程序的几种方式g++.Makefile.Cmake 先建立一个工程(一个文件夹),写好xxx.cpp文件,可以是多个: //----------opencv.cp ...
- 如何选择合适的Linux系统进行桌面程序开发?
32 or 64 ? 众所周知,64位的Windows系统可以近乎完美地运行32位的应用程序,微软出于商业考虑做了这样一个兼容层.而Linux系统则划分的很清楚,默认情况下64位的Linux系统无法运 ...
- linux 系统shell运行程序不退出
如果通过ssh远程连接到linux系统终端,在shell下执行程序.假如程序名称为app,且程序本身会一直执行不退出,程序执行需要参数文件paramfile. 当我们用 ./app paramfile ...
- 在linux下编译线程程序undefined reference to `pthread_create'
由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误:undefined reference to 'pthread_create'u ...
- 如何使Linux系统上的程序开机后自动运行 (转)
Linux有自己一套完整的启动体系,抓住了Linux启动的脉络,Linux的启动过程将不再神秘. 阅读之前建议先看一下附图. 本文中假设inittab中设置的init tree为: /etc/rc.d ...
- linux系统编译安装软件的通用步骤
编译安装的步骤: 1.下载源代码,并解压 tar -xf package-version.tar.{gz|bz2|xz} 注意:展开后的目录通常为package-version 2.切换至源码 ...
- LFS,编译自己的Linux系统 - 编译临时系统
编译GCC-4.8.2 PASS 1 解压并重命名 cd /mnt/lfs/sources tar -Jxf ../mpfr-3.1.2.tar.xz mv mpfr-3.1.2 mpfr tar - ...
- Linux下编译C++程序遇到错误:undefined reference to `*::*
“undefined reference to”的意思是,该函数未定义. 如果使用的是g++,有以下检查方案: 如果提示未定义的函数是某个库的函数.检查库是否已经安装,并在编译命令中采用-l和-L参数 ...
随机推荐
- 《effective C++》:条款36——绝不重新定义继承而来的非虚函数
(1)当派生类中重写了基类的非虚函数时,这个时候这个函数发生的是静态绑定 下面中的代码中: 定义一个基类B,基类定义了函数fcm,fcm是非虚的函数. 定义一个派生类D,派生类重新定义了fcm. 当用 ...
- python学习之-- importlib模块
importlib 模块 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外,importlib允许程序员 ...
- 转 asterisk app命令中文翻译
常规指令 Authenticate:鉴别用户 VMAuthenticate:根据“voicemail.conf”鉴别用户 Curl:接受外接URLs的修复.支持POSTing DUNDiLookup: ...
- Fortinet网络接入及安全方案配置步骤
http://sec.chinabyte.com/200/12553700.shtml 1.概述: Fortinet无线接入及方案由以下两类设备组成: AC(Wifi接入控制器)及安全网关:Forti ...
- ExpandableListView的使用以及信息的高亮显示
ExpandableListView是ListView控件的延伸,它能够对数据进行分组显示和隐藏,并统计总数量.可进行滚动,对某一内容高亮显示. <1>编写xml布局文件,用于获取Expa ...
- Codeforces Round #277 (Div. 2)---C. Palindrome Transformation (贪心)
Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes input sta ...
- [wxWidgets]_[0基础]_[不常见但有用的类wxCmdLineParser]
场景: 1. 有时候须要构造命令行字符串传递給函数调用,比方CreateProcess,假设參数是动态的,那么就得使用类似std::vector<string>加入单个參数,之后拼接为一个 ...
- ZOJ 3316 Game 一般图最大匹配带花树
一般图最大匹配带花树: 建图后,计算最大匹配数. 假设有一个联通块不是完美匹配,先手就能够走那个没被匹配到的点.后手不论怎么走,都必定走到一个被匹配的点上.先手就能够顺着这个交错路走下去,最后一定是后 ...
- dva/dynamic
1.安装: yarn add dva 2.引入: import dynamic from 'dva/dynamic'; * dva路由跳转 * dynamic(app, model, componen ...
- C#趣味程序---百鸡百钱
问题:公鸡一仅仅5元,母鸡一仅仅3元,小鸡三仅仅1元.问100元能够买多少仅仅鸡? using System; namespace ConsoleApplication1 { class Progra ...