第四章 Linux环境

程序参数

int main(int argc , char *argv[])

argc是程序参数的个数,argv是代表参数的字符串数组。

以下对参数检查:

//args.c#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[]){
    int arg;
    for(arg=0;arg<argc;arg++){
        if(argv[arg][0] == ‘-‘){
            printf("option:%s\n",argv[arg]+1);
        }else{
            printf("argument %d: %s\n",arg,argv[arg]);
        }
    }
    exit(0);
}

带参数执行

[email protected]:~/linux_program/CH04$ ./args -i -lr ‘hi there‘ -f abc
argument 0: ./args
option:i
option:lr
argument 3: hi there
option:f
argument 5: abc

getopt

#include<unistd.h>
int getopt(int agrc,char *const argv[],const char *optstring)
extern char *optarg;
extern int optind,opterr,optopt;

该函数将传递给程序的main函数的argc和argv作为参数,同时接收一个字符串optstring,该字符串告诉getopt哪些选项可用,以及它们是否有关联值。

optstring是一个字符列表,每个字符代表一个单字符选项,如果字符后面跟一个冒号,则说明该选项有一个关联值作为下一个参数。

函数解释:

循环调用getopt可以依次获得所有选项

1. 如果选项有一个关联值,则外部变量optarg指向这个值

2. 如果选项处理结束,getopt返回-1,特殊参数--将使getopt停止扫描选项

3. 若遇到无法识别的选项,getopt返回“?”,并保存到optopt中

4. 如果选项要求有关联值,但用户未提供,getopt返回"?"。如果选项字符串第一个字符为冒号,那么getopt在用户为提供值的情况下返回冒号而不是问号。

5. optind保存待处理参数的索引

以下程序,设选项为‘-i’,‘-l‘,‘-r‘,‘-f‘,其中f选项后面需要一个参数,并设置未提供参数时,返回“:”

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc,char *argv[]){
    int opt;
    while((opt = getopt(argc,argv,":if:lr")) !=-1 ){
        switch(opt){
            case ‘i‘:
            case ‘l‘:
            case ‘r‘:
                printf("option:%c\n",opt);
                break;
            case ‘f‘:
                printf("filename:%s\n",optarg);
                break;
            case ‘:‘:
                printf("option needs a value\n");
                break;
            case ‘?‘:
                printf("unknown option:%c\n",optopt);
                break;
        }
    }
    for(;optind<argc;optind++){
        printf("argument:%s\n",argv[optind]);
    }
    exit(0);
}

执行

[email protected]:~/linux_program/CH04$ ./argopt -i -lr ‘hi here‘ -f fred.c -q
option:i
option:l
option:r
filename:fred.c
unknown option:q
argument:hi here

环境变量

#include<stdlib.h>
char *getenv(const char *name);
int putenv(const char *string);

getenv函数以给定的名字搜索,返回字符串。如果变量不存在,返回null,如果存在但无关联值,返回空字符串。

putenv参数以“名=值”的字符串给定。失败返回-1。

时间

#include<time.h>
time_t time(time_t *tloc);

如果tloc不是空指针,time还会把返回值写入tloc。

#include<time.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(){
    time_t timeNow = time((time_t *)0);
    printf("Current time is %ld;\n",timeNow);
}

执行

[email protected]:~/linux_program/CH04$ ./time
Current time is 1476760726;

用户信息

#include<sys/types.h>
#include<unistd.h>
uid_t getuid(void);
char *getlogin(void);

getuid返回程序关联的UID,一般为当前用户的UID。

getlogin返回当前用户的登录名。

#include<sys/types.h>
#include<pwd.h>

struct passwd *getpwuid(uid_t uid);
struct passwd *getpwnam(const char *name);

passwd结构体如下:

char *pw_name:用户登录名

uid_t pw_uid:UID

gid_T pw_gid:GID

char *pw_dir:用户家目录

char *pw_gecos:用户全名

char *pw_shell:用户默认shell

主机信息

#include<unistd.h>
int gethostname(char *name,size_t namelen);

把机器的网络名写入name中,该字符串至少有namelen个字符长。

时间: 2024-10-25 03:36:19

第四章 Linux环境的相关文章

第四章 Linux命令

第四章 Linux命令 第一节 常用命令 ls    列出当前目录下的内容 参 数 : -1          列出文件或目录的详细信息(不包括以.开头的隐藏文件) -a或--all   列出所有文件和目录(包括以.开头的隐藏文件) --help      在线帮助    --version   显示版本信息 ll    列出文件或目录的详细信息 cd    切换目录 cd          切换到当前用户主目录 cd /home    切换到home目录 cd ..       切换到上一级目

第十四章 掌握环境

1.获取环境变量 $env:USERNAME $env:USERNAME=1 2.获取脚本调用的信息 $MyInvocation $MyInvocation.ScriptName   #获取正在执行的脚本名称 3.获取常见系统路径 [System.Environment]::GetFolderPath("system") 4.获取当前路径 Get-Location Join-Path(Get-Location)newfile.txt   #获取当前不存在的路径 第十四章 掌握环境

第0章Linux环境到内核基础知识

#include<stdio.h> int main(void) { printf("hello world\n"); return 0; } gcc -g -wall helloworld.c -o hello_world 生成可执行文件,其过程 涉及预处理,编译,汇编,链接等多个步骤 预处理:用于处理预处理命令,上面helloworld代码的预处理就是#include,该头文件所有源码将在第一行展开,可使用 gcc -E helloworld.c > hellow

《Linux Device Drivers》第十四章 Linux 设备模型

简介 2.6内核的设备模型提供一个对系统结构的一般性抽象描述,用以支持多种不同的任务 电源管理和系统关机 与用户空间通信 热插拔设备 设备类型 对象生命周期 kobject.kset和子系统 kobject是组成设备模型的基本结构 对象的引用计数 sysfs表述 数据结构关联 热插拔事件处理 kobject基础知识 <linux/kobject.h> 嵌入的kobject 内核代码很少去创建一个单独的kobject对象,kobject用于控制对大型域相关对象的访问 kobject的初始化 首先

Linux第三章-Linux环境部署

一.安装jdk1.8 1.先将软件通过 xftp 上传到 /opt 下 2.解压缩到 /usr/local/jdk 3.配置环境变量的配置文件:vim /etc/profile(下面路径与jdk版本号一定要与真实内容保持一致) export JAVA_HOME=/usr/local/java/jdk1.8.0_231 export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin 4.测试是否安装成功:s

第十四章 LINUX新安全FIREWALLD-CENTOS7.5知识

一.FIRWALLDFilewalld(动态防火墙)作为redhat7系统中变更对于netfilter内核模块的管理工具:iptables service 管理防火墙规则的模式(静态):用户将新的防火墙规则添加进 /etc/sysconfig/iptables 配置文件当中,再执行命令 /etc/init.d/iptables reload 使变更的规则生效.在这整个过程的背后,iptables service 首先对旧的防火墙规则进行了清空,然后重新完整地加载所有新的防火墙规则,如果加载了防火

linux程序设计——linux环境(第四章)

linux环境 这篇为linux环境,代码在linux环境代码下载.当为linux编写程序时,必须考虑到程序将在一个多任务环境中运行.这意味着在同一时间会有多个程序运行,它们共享内存.磁盘空间和CPU周期等机器资源.甚至同一程序也会有多个实例同时运行.最重要的是,这些程序能够互不干扰,能够了解它们的环境,并且能够正确运行,不产生冲突. 这章介绍程序运行的环境,程序如何通过环境来获得有关其运行条件的信息,以及用户怎样改变程序的行为. 4.1 程序参数 当一个用C语言编写的linux程序运行时,它是

linux第四章实验报告

Linux第四章 用户和文件权限管理 实验环境 公司的linux主机即将提供给技术部作为开发服务器使用,根据部门内项目组的构成情况,首先需要建立相应的组账号.用户账号,并作为目录设置权限,还需要设置一个共用的数据存储目录,便于同事之间的数据交换. 需求描述 1.建立用户目录 创建目录/tech/benet和/tech/accp,分别用于存放各项目组中用户账号的宿主文件夹.例如,kylin用户的宿主目录应位于/tech/benet/kylin. 2.添加组账户 为两个项目组添加组账号benet,a

第四章 初步进入linux世界

第四章 初步进入linux世界 [Linux 系统启动过程] Linux的启动其实和windows的启动过程很类似,不过windows我们是无法看到启动信息的,而linux启动时我们会看到许多启动信息,例如某个服务是否启动. Linux系统的启动过程大体上可分为五部分:内核的引导:运行init:系统初始化:建立终端 :用户登录系统. A 内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动.紧接着由启动设备上的grub程序开始引导linux,当引