首页 > 系统相关 >Unix/Linux系统编程学习笔记-1

Unix/Linux系统编程学习笔记-1

时间:2022-09-04 19:45:24浏览次数:58  
标签:初始化 局部变量 文件 编程 Unix Linux 全局变量

笔记

第一章 引言

一、概述:

在第一章引言里,简单介绍了Unix的历史,包括贝尔实验室开发的Unix早期版本、AT&T System V以及Unix的其他版本,如BSD、HP UX、IBM AIX和Sun/SolarisUnix。此外,还介绍了Linux的开发及其各种发行版(包括Debian、Ubuntu、 Mint、 RedHat和Slackware),列出了适用于Linux的各种硬件平台和虚拟机,并展示了如何将UbuntuLinux同时安装到Microsoft Windows中的VirtualBox 虚拟机和VMware虚拟机上。本章还解释了Linux的启动过程(从Linux内核启动到用户登录和命令执行),描述了UaixLiun文件系统组织、文件类型和常用的Unx/Linux命令。最后,本章介绍了用户管理和维护Linu系统需执行的一些系统管理任务。

二、本书目的:

  • 1.强化学生的编程背景知识
  • 2.动态数据结构的应用
  • 3.进程概念和进程管理
  • 4.并行编程
  • 5.定时器和定时功能
  • 6.信号、信号处理和进程间通信
  • 7.文件系统
  • 8.TCP/IP和网络编程

三、Unix与Linux

Unix是一种通用操作系统,Linux是一个类Unix系统,第一章分别介绍了两者的历史和分别基于两者发展到现在的成果。
学习如何下载并使用Linux
ls:ls dirname:列出CWD或目录的内容
cd dirname:更改目录
pwd:打印CWD的绝对路径名
touch filename:更改文件名时间戳
cat filename:显示文件内容
cp src dest:复制文件
mv src dest:移动或重命名文件
mkdir dirname:创建目录
rmdir dirname:移除目录
In oldfile newfile:在文件之间创建链接
find:搜索文件
grep:搜索文件中包含模式的行
ssh:登录到远程主机
gzip filename:将文件压缩为.gz文件
gunzip file.gz:解压.gz文件
tar -zcvf file.tgz:从当前目录创建压缩tar文件
tar -zxvf file.提供者:从.tgz文件中解压文件
man:显示在线手册

四、文件类型:

  • 特殊文件:

1.字符特殊文件:字符I/O,如/dev/tty0、/dev/pts/1等。
2.块特殊文件:块I/O,如/dev/had、/dev/sda等。
3.其他类型,如网络(套接字)特殊文件、命名管道等。

符号链接文件:属于常规文件,其内容为其他文件的路径名。
如 ln -s aVeryLongFileName myLink

五、文件路径名

用“/”符合表示为根目录。
以“/”开头的路径名为绝对路径名,反之则为相对于进程当前工作目录(CWD)的相对路径名。

六、Ubuntu Linux系统管理

对于sudo命令:
出于安全原因,Ubuntu禁用了根或超级用户账户,这可防止任何人以根用户身份登录(其实也不完全是;有一个方法可杜绝这种情况,但不便透露)。sudo(“超级用户执行”)允许用户以另一个用户(通常是超级用户)的身份执行命令。
为确保用户可发出sudo,只需在sudoers文件加一行,如:username ALL(ALL) ALL





第二章 编程背景

一、了解并使用文本编辑器

三种文本编辑器

  • 1.vim(Linux的标准内置编辑器)
    vim有三种不同的操作模式:命令模式、插入模式和末行模式
    命令模式
    默认状态,用来输入命令一般,大部分按键都有特定的功能。
    比如hjkl这四个键,依次表示将光标向左、下、右、上移动一个字符或一行。
    通过vim filename`进入文本后就是这个状态了
    插入模式
    用来输入和编辑文本,对应的按键是i(insert插入)和a(add追加)
    末行模式
    用来退出或保存文件。
    :w:保存文件;
    :q:退出vim
    :wq:保存并退出
    :q!:强制退出,不保存,这个选择因为vim的保护机制,基本没用,想要强制退出还需要一些 WYSIWYG编辑器中常见的快捷键。
    WYSIWYG(所见即所得)快捷键
    Ctrl+C:终止或退出,最有用,可以代替:!q了;
    Ctrl+K:删除行到缓冲区,暂时不知道怎么用这个;
    Ctrl+Y:从缓冲区内容中复制或粘贴,与Ctrl+K配合使用的吧;
    Ctrl+S:保存文件,大部分编辑器都有类似功能,保存。
  • 2.gedit(GNOME桌面环境默认的文本编辑器)
  • 3.emacs(可以在多个不同平台上运行)
    了解如何使用emacs

二、编程

了解全局变量、局部变量、静态变量、自动变量和寄存器变量等等的作用:
全局变量在函数外定义。局部变量在函数内定义。全局变量具有唯一性,并且只有一个副本。静态全局变量仅对定义它们的文件可见。非静态全局变量则对同一程序的所有文件都可见。全局变量可以初始化,也可以不初始化。初始化的全局变量在编译时赋值。未初始化的全局变量在程序执行开始时清零。局部变量只对定义它们的函数可见。默认情况下,局部变量是自动变量,它们在函数调用时出现,按逻辑在函数退出时消失。对于寄存器变量,编译器试图把它们分配在CPU寄存器中。由于自动局部变量在函数调用前没有分配内存空间,因此在编译时不能初始化。静态局部变量具有永久性和唯一性,可以初始化。此外,C语言还支持易失性变量,这些变量用作内存映射I/O的地址,或者通过中断处理程序或多个执行线程来访问的全局变量。易失性关键字可阻止C编译器优化用这些变量进行操作的代码。
汇编代码与目标代码
静态与动态链接
静态库和共享库;动态链接库。
静态链接库:
gcc -c mysum.c
ar rcs libmylib.a mysum.o
gcc -static t.c -L. -lmylib
a.out
以上代码是一个使用静态库的过程,-L.表示指定当前目录,可修改为其它,-l表示指定链接库mylib,其中,并未指定前缀lib和后缀.a。
动态链接库:
gcc -c -fPIC mysum.c
gcc -shared -o linmylib.so mysum.o
gcc t.c -L -mylib
export LD_LIBRARY_PATH=./
a.out

  • 可执行文件格式:
    1.二进制可执行平面文件:
    2.a.out可执行文件:
    3.ELF可执行文件:
  • a.out相关知识点:
    1.文件头:包含了a.out文件的加载信息和大小,tsize表示代码段大小,dsize表示包含初始化的全局变量和初始化的静态局部变量数据段的大小,bsize表示了未初始化的全局变量和未初始化的静态局部变量的bss段的大小,total_size表示加载的a.out文件的总大小。
    2.代码段:也叫正文段,包含了程序的可执行代码。从标准的C启动代码crt0.o开始,这一代码调用的是main()函数,这也是为啥一个C程序只能有一个main()函数。
    3.数据段:包含了初始化全局变量和初始化静态局部变量的数据。
    4.符号表:可选部分,仅在运行调试时有用。

32位,64位GCC在运行时堆栈使用情况
C语言程序中的函数调动
这部分主要作为知识拓展,可以简单的概括为crt0.o -> main() -> A(par_a) -> B(par_b) -> C(par_c)

三、GDB调试工具

GNU调试工具(GDB)是一个交互式调试工具,可以调试用C、C++和其他几种语言编写的程序
在程序执行时,GDB以一个黑色三角标志显示执行进度

关于使用调试工具的建议:
程序开发的最佳方法是仔细设计程序的算法,然后根据算法编写程序代码。过度依赖调试工具通常和适得其反,因为这可能浪费更多的时间。

对于我来说最有收获的就是学会了如何使用vim,emacs,以及如何编译代码,增强了我的动手能力。

问题与解决思路

1.VirtualBox调整分辨率

问题:
在使用虚拟机过程中,根据教材指导对VirtualBox分辨率的调整,发现输入“xdiagnose”后没有成功。
解决思路:
我认为可能是整个过程中有步骤没有完善,所以重复实验,发现任然不行,我就去网上查找资料,发现首先要先输入sudo apt-get install xdiagnose安装xdiagnose,因为首次安装系统大部分没有这个软件。安装完了之后输入sudo xdiagnose并输入密码,会出来几个选项,勾选之后点击apply,再输入sudo reboot重启才算真正的完成。

2.虚拟机的Ubuntu安装

问题:安装出现错误

解决办法:
重启电脑,按下F2快捷键进入BIOS界面;
按下F7
选择 高级/advanced
选择CPU配置/CPU Configuration
找到 Intel Virtualization Technology,Disabled->Enabled(禁用->开启)
按F10保存重启

3.虚拟机内vim,gcc,emacs的安装

问题:安装出现错误,安装不了。
解决办法:上网查询发现需要先输入sudo apt-get install ctags代码,安装成功后再依次安装其余程序即可。

实践内容与截图,代码链接

ubunt的下载:

1.用户的创建:

2.构建二叉搜索树(注p74,示例程序C2.7)

3.openeuler系统:

标签:初始化,局部变量,文件,编程,Unix,Linux,全局变量
From: https://www.cnblogs.com/wu-zhuohang/p/16655024.html

相关文章

  • 《Unix/Linux系统编程》第一、二章读书笔记
    自学教材1、2章学习笔记一、任务要求学教材第1,2章,提交学习笔记(10分)知识点归纳以及自己最有收获的内容(3分)问题与解决思路(2分)实践内容与截图,代码链接(3分)知识的结构......
  • 《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏
    一.知识点归纳第一章引言1.本书目标编程背景知识详细介绍了程序开发步骤,包括汇报器、编译器、链接器等。动态数据结构的应用字符串标记化、搜索树节点、插入和......
  • Linux中 .gzip .tar .zip的区别
    目录.gzip.tar.zip引用gzip:一般是用于单文件的压缩。zip/tar:一般是用于整个目录/多文件的压缩.gzip不能保存原文件,不能压缩文件夹输入gzip1.txt后,原文件1.txt变为1.......
  • Linux基础——tmux&vim基础操作
    tmux&vimtmux分屏tmux可以开很多session,每个session可以开很多window,每个windo可以开很多panetmux功能:(1)分屏。(2)允许断开Terminal连接后,继续运行进程。......
  • docker序列之 linux namespace机制
    linuxnamespace机制linuxnamespace机制提供一种资源隔离和虚拟化特性,PID,IPC,Network等系统资源不再是全局性的,而是属于某个特定的namespace。每个namespace下的资源对......
  • Linux系统如何查看版本信息
    Linux系统如何查看版本信息-百度经验 https://jingyan.baidu.com/article/7908e85c725159af481ad2f7.html方法/步骤 输入"uname-a",可显示电脑以及操作系统的......
  • 《Java编程思想》读书笔记(四)
    前言:三年之前就买了《Java编程思想》这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十......
  • Linux常用基础命令二
    查看命令帮助信息man[命令]help[命令]----英文帮助文档[命令]--help----部分汉化帮助信息清屏Ctrl+l-----快捷键清屏clear或者res......
  • Linux常用基础命令一
    一、目录操作进入路径cd[目录地址]切换回主目录cd返回上一个路径cd-打印当前路径pwd列出目录下文件ls---查看只包含非隐藏文件ls......
  • Linux上安装tomcat
    参考https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-centos-7,原文中是单独创建了tomcat账号来运行tomcat,我这边因为自己使用,为方便......