Linux程序设计01:开发工具和开发平台

1.SecureCRT

   1.1SecureCRT支持SSH*(SSH1和SSH2),安装的过程不在赘述

   1.2与SecureCRT相关的Linux命令

     rz和sz是Linux同windows进行ZModem文件传输的命令行工具。

    sz命令利用ZModem协议来从Linux服务器传送文件到本地,一次可以传送一个或者多个文件

    rz命令从本地上传到Linux服务器。

    要使用rz和sz命令需要查看是否 有lrzsz软件包。

       

     如果没有则需要利用yum进行安装

   

   快捷键:复制命令:Ctrl+Insert,粘贴命令:Shift+Insert

2.gcc编译四个阶段

 预处理阶段。去掉注释,进行宏替换(#define 相关),头文件(#include)包含等工作。
  gcc  -E test.c -o test.i
编译阶段。编译器将文本文件.i翻译成文本文件test.s,他包含一个汇编语言。汇编语言程序中的每一条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令。
它可以为不同的高级语言的不同编译器提供通用的输出语言。
gcc -S test.o -o test.s
 汇编阶段。汇编器将.s翻译成机器语言指令,吧这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件test.o中。
gcc -c test.c -o test.o    
链接阶段。包含各函数库的入口,得到可执行代码。
gcc  test.c -o test.o    

3.Linux文件后缀名

.c   c源代码
.C  .cc C++源代码
.h  头文件

4.gcc选项

优化:目标是使代码性能更有,去掉冗余代码。
-O(0/1/2/3)
gdb调试:-g(0/1/2/3)
提示警告:-Wall
将警告当成错误:-Werror
在命令中指定宏:-D
指定头文件位置:-I
使用C版本:-std=c99等等

5.小常识

1.系统定义的头文件路径:
/usr/include
/usr/local/include
/usr/target/include
库文件:
/lib
查看库文件:ldd 
ldd ./test

2.  编译时默认链接 c 库,如果要全用其它的库,编译时要用-l
例如:gcc o test test.c –lm -lc
其中m表示math库,c表示c函数库
3.命令行参数
选项:-l -a -i
如果命令行的选项很多,怎么来提取这些选项呢?不需要我们知道命令行参数的顺序。此时应该首先提取命令工行参数列表。
getopt:短选项,只有一个字符
getlongopt:长选项,一个字符串
#include <unistd.h>
   int getopt(int argc, char * const argv[], const char *optstring); 
一下全局变量配合getopt函数
extern char *optarg;
  extern int optind;
  extern int optopt;
  extern int opterr;
实际上,在命令行中,可以支持这样命令输入的信息:
 选项:一个选项一般完成不同的功能的操作。
 参数:在执行相应选项功能操作时输入的信息。
 -a:选项:表示所有。
 -h host_id: h 就是一个选项,但 host_id 实际上是一个 IP,也就是 h 的参数。
为了识别命令行的输入信息,第 1 个参数为 main 的 argc,第 2 个参数为 main 提供的 argv[],getopt
   函数第三个参数约定:
 (1)如果就是一个字符,表示某个选项。
 (2)如果一个字符后有 1 个冒号,表示选项后面一定要跟一个参数。参数可以紧跟选项或者与选
  项相隔一个空格。
 (3)如果一个字符后有 2 个冒号,表示选项后面可有有一个参数,也可以没有参数,在选项后的
  参数一定不能跟它以空格间隔。
例如 getopt 函数第三个参数为以下值:
   “ab:c::d::”
   a 后面 没有冒号,是一个选项。
   b 后面有冒号,其后的内容一定要有理解为参数。
   c 和 d 双冒号,其后的内容可以有,也可以没有,但如果有,则这个参数一定坚挨着。
   因此如下:
   ./getopt –a –b host –chello –d world
   具体 getopt 怎么来解释我们的选项和参数。
  每成功执行一次,将返回当前的一个选项。并且
  extern char *optarg; //指向下一个要扫描的参数。
  extern int optind; //索引为下一个要处理的指针的下标。
  extern int optopt; //用于存储可能的错误或不可知的信息
  extern int opterr; //opterr== 0,不将错误输出的标准错误输出设备。
长选项:这个选项由一个字符串组成,在选项很多的时候更容易记忆。getopt_long extern char *optarg; extern int optind, opterr, optopt; #include int getopt_long(int argc,     char * const argv[], const char *optstring, //当前支持的短选项列表,同 getopt const struct option *longopts, //长选项列表信息 int *longindex); struct option { const char *name;    //长选项名 int has_arg; //是否有参数 int *flag; int val; //返回值,短选项值 }; 

例如期望当前进程支持以下选项方式:
短选项 长选项
-h --help
-o filename --output filename
-v --version
第三个参数:
ho:v
第四个参数
strcut option my_option=
{ {“help”,0,NULL,’h’}, 
{“output”,1,NULL,’o’}, 
{“version”,0,NULL,’v’}}

要求:
写一个命令行选项解析的程序。支持以下功能:
(a) -a 选项(--all 长选项),后面可以跟参数
(b)-d 选项(--dir 长选项),后面不跟参数
(c)-h 选项(--help 长选项),后面不跟参数
(d)-o 选项(--output 长选项),后面必须跟一个参数


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fork、vfork、clone

1. 概念 写时复制技术最初产生于Unix系统&#xff0c;用于实现一种傻瓜式的进程创建&#xff1a;当发出fork( )系统调用时&#xff0c;内核原样复制父进程的整个地址空间并把复制的那一份分配给子进程。这种行为是非常耗时的&#xff0c;因为它需要&#xff1a; 为子进程的页…

Linux02进程内存管理

1.进程地址空间 1.1程序的结构与进程的结构 [rootlocalhost demo]# size testtext data bss dec hex filename 1193 492 16 1701 6a5 test 一个可执行程序包含三个部分&#xff1a; 代码段&#xff1a;主要存放指令&#xff0c;操作以及只读的常量数据例…

epoll

开发高性能网络程序时&#xff0c;windows开发者们言必称iocp&#xff0c;linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术&#xff0c;可以非常高效的处理数以百万计的socket句柄&#xff0c;比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽…

剑指offer目录

序号题目1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

基于升序链表的定时器

#ifndef LST_TIMER#define LST_TIMER#include <time.h>#define BUFFER_SIZE 64class util_timer;//用户数据结构&#xff1a;客户端地址、客户端的socket、socket文件描述符、读缓存和定时器struct client_data{sockaddr_in address;int sockfd;char buf[ BUFFER_SIZE ];…

SIGCHLD信号使用和注意事项

1.SIGCHLD简介 SIGCHILD是指在一个进程终止或者停止时&#xff0c;将SIGCHILD信号发送给其父进程&#xff0c;按照系统默认将忽略此信号&#xff0c;如果父进程希望被告知其子系统的这种状态&#xff0c;则应捕捉此信号。注意&#xff1a;SIGCLD信号与其长得非常相似。SIGCLD是…

08-图7 公路村村通 (30 分

现有村落间道路的统计数据表中&#xff0c;列出了有可能建设成标准公路的若干条道路的成本&#xff0c;求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N&#xff08;≤&#xff09;和候选道路数目M&#xff08;≤&#xff09;&#xff1b;随…

【Leetcode】33. 搜索旋转排序数组

假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如&#xff0c;数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值&#xff0c;如果数组中存在这个目标值&#xff0c;则返回它的索引&#xff0c;否则返回 -1 。 你可以假设数组中不存在重…

08-图9 关键活动 (30 分

假定一个工程项目由一组子任务构成&#xff0c;子任务之间有的可以并行执行&#xff0c;有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。 比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成…

【Leetocde | 10 】54. 螺旋矩阵

解题代码&#xff1a; class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {if (matrix.empty() || matrix[0].empty()) return {};int m matrix.size(), n matrix[0].size();vector<int> res;int up 0, down m …

09-排序1 排序 (25 分)

给定N个&#xff08;长整型范围内的&#xff09;整数&#xff0c;要求输出从小到大排序后的结果。 本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下&#xff1a; 数据1&#xff1a;只有1个元素&#xff1b; 数据2&#xff1a;11个不相同的整数…

网络层

1. 简单解释一些ARP协议的工作过程

【Leetocde | 24 】152. 乘积最大子序列

这道题最直接的方法就是用DP来做&#xff0c;而且要用两个dp数组&#xff0c;其中f[i]表示子数组[0, i]范围内并且一定包含nums[i]数字的最大子数组乘积&#xff0c;g[i]表示子数组[0, i]范围内并且一定包含nums[i]数字的最小子数组乘积&#xff0c;初始化时f[0]和g[0]都初始化…

【Leetcode | 1】3. 无重复字符的最长子串

这里我们可以建立一个HashMap&#xff0c;建立每个字符和其最后出现位置之间的映射&#xff0c;然后我们需要定义两个变量res和left&#xff0c;其中res用来记录最长无重复子串的长度&#xff0c;left指向该无重复子串左边的起始位置的前一个&#xff0c;由于是前一个&#xff…

【Leetcode | 】93. 复原IP地址

class Solution { public:vector<string> strs;//用于存放临时的四个段vector<string> result;//存放结果void dfs(string &s, int beginIndex, int step) {if (step 4 && beginIndex s.size()) //搜索成功{string temRec strs[0] "." …

海量数据(一)

1. 有1亿个浮点数&#xff0c;如果找出期中最大的10000个&#xff1f; 最容易想到的方法是将数据全部排序&#xff0c;然后在排序后的集合中进行查找&#xff0c;最快的排序算法的时间复杂度一般为O&#xff08;nlogn&#xff09;&#xff0c;如快速排序。但是在32位的机器上&a…

1018 锤子剪刀布 (20 分)

大家应该都会玩“锤子剪刀布”的游戏&#xff1a;两人同时给出手势&#xff0c;胜负规则如图所示&#xff1a; 现给出两人的交锋记录&#xff0c;请统计双方的胜、平、负次数&#xff0c;并且给出双方分别出什么手势的胜算最大。 输入格式&#xff1a; 输入第 1 行给出正整数 N…

1019 数字黑洞 (20 分)

给定任一个各位数字不完全相同的 4 位正整数&#xff0c;如果我们先把 4 个数字按非递增排序&#xff0c;再按非递减排序&#xff0c;然后用第 1 个数字减第 2 个数字&#xff0c;将得到一个新的数字。一直重复这样做&#xff0c;我们很快会停在有“数字黑洞”之称的 6174&…

61. 旋转链表

给定一个链表&#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: 1->2->3->4->5->NULL, k 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3->4->NULL…

1020 月饼 (25 分)

月饼是中国人在中秋佳节时吃的一种传统食品&#xff0c;不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量&#xff0c;请你计算可以获得的最大收益是多少。 注意&#xff1a;销售时允许取出一部分库存。样例给出的情形是这样的&#x…