Linux编程-回忆录三

====系统环境====
#include <unistd.h>
pid_t getpid(void);
得到当前进程的进程ID号,永远成功

#include <stdlib.h>
char *getenv(const char *name);
得到给定环境变量名称的值,如果没有该变量,返回NULL值

#include <stdlib.h>
int putenv(char *string);
添加一个新的环境变量,传入的字符串格式为: "name=value"
传入的string会成为系统环境变量的一部分,也就是说,string不能是局部变量
或者是自动变量,错误返回-1值,添加成功返回0

#include <stdlib.h>
int setenv(const char *name, const char *value, int overwrite);
作用同上,不过比putenv更安全,该函数会在环境变量表分配空间,添加该
环境变量,如果overwrite非0,已有同名的环境变量会被覆盖,返回0表示
成功,-1表示错误

#include <stdlib.h>
int unsetenv(const char *name);
删除一个环境变量,返回0表示删除成功,-1表示删除失败,或者没有该环境变量

====内存分配====
#include <stdlib.h>
void *malloc(size_t size);
分配size大小的内存,并返回指向该内存的地址指针,返回NULL表示分配出错

#include <stdlib.h>
void free(void *ptr);
释放内存,同一指针不能释放两次,否则段错误

include <stdlib.h>
void *calloc(size_t numitems, size_t size);
分配并返回numitems个size大小的连续内存,并清空内存,字节全置
为0值,返回NULL表示分配出错

include <stdlib.h>
void *realloc(void *ptr, size_t size);
重新设置已经分配的ptr内存的大小为size,返回新的内存地址
指针,返回NULL表示出错

====用户和组====
/etc/passwd     用户密码文件
/etc/shadow     用户影子密码文件
/etc/group      用户分组信息文件

#include <pwd.h>
struct passwd *getpwnam(const char *name);
struct passwd *getpwuid(uid_t uid);
使用用户名或是用户ID号获取系统用户的账号信息, 成功都返回
一个指针,返回NULL表示出错,获取的信息来自/etc/passwd文件

#include <grp.h>
struct group *getgrnam(const char *name);
struct group *getgrgid(gid_t gid);
使用组名,或是组ID号获取系统用户组的信息,成功都返回一个
指针,返回NULL表示出错

#include <pwd.h>
struct passwd *getpwent(void);
void setpwent(void);
void endpwent(void);
getpwent从/etc/passwd文件中按序获取用户的信息,成功返回一个
指针,返回NULL表示获取完毕,需要循环调用该函数
getpwent获取完毕后,调用endpwent函数关闭清理资源
setpwent函数用来重置当前的用户信息为文件的第一条用户记录

#include <shadow.h>
struct spwd *getspnam(const char *name);
获取一个账户的shadow密码信息

struct spwd *getspent(void);
void setspent(void);
void endspent(void);
作用同getpwent函数系列,一个个获取账户的密码信息

#include <unistd.h>
uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid(void);
gid_t getegid(void);
获取账户的用户ID,组ID,有效用户ID,有效组ID
用户ID是指运行该程序的实际拥有者
组ID是指运行该程序的实际用户组
有效用户ID是指执行一定权限任务的用户ID
有效组ID是指执行一定权限任务的用户组ID

include <unistd.h>
int setuid(uid_t uid);
int setgid(gid_t gid);
设置用户ID/组ID,成功返回0,错误返回-1

#include <unistd.h>
int seteuid(uid_t euid);
int setegid(gid_t egid);
设置有效权限的用户ID/组ID,成功返回0,错误返回-1

时间: 2024-10-07 04:50:17

Linux编程-回忆录三的相关文章

Linux编程-回忆录二

====文件IO====Linux系统IO操作都是使用文件描述符来代表打开的文件,一个非负的的整数,它被用来指所有类型的打开的文件,包括管道,FIFO,网络套接字,终端,设备和一般文件.每个进程都有自己的一套文件描述符 经常使用的三个文件描述符是:标准输入(stdin,  STDIN_FILENO,  0)标准输出(stdout, STDOUT_FILENO, 1)标准错误(stderr, STDERR_FILENO, 2) #include <sys/stat.h>#include <

Linux编程-回忆录一

====系统调用====是应用程序和系统内核之间的API接口是系统内核对外提供的一系列功能服务系统调用的基本要点:    a.CPU从用户模式切换到内核模式    b.系统调用被优化了下,使用的是函数名称,而非调用数字号    c.系统调用可以从用户模式传递参数到内核模式,反之亦然如果想要通过函数调用号使用系统调用,可以看看syscall函数的说明系统调用看起来跟使用C函数差不多,使用函数名称来使用的系统调用实际它的步骤比较多:1.使用函数名的调用,实际是C语言库里面的wrapper函数2.传递

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mysql 二.MySQLdb模块: MySQLdb模式是Python中专门连接MySQL数据库的模块,另外Python开发环境的搭

嵌入式 Linux网络编程(三)——UDP编程模型

嵌入式 Linux网络编程(三)--UDP编程模型 UDP编程模型: UDP循环服务器模型为: socket(...); bind(...); while(1) {    recvfrom(...);    process(...);    sendto(...); } server.c代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #inc

嵌入式 Linux系统编程(三)——标准IO库

嵌入式 Linux系统编程(三)--标准IO库 与文件IO函数相类似,标准IO库中提供的是fopen.fclose.fread.fwrite等面向流对象的IO函数,这些函数在实现时本身就要调用linux的文件IO这些系统调用. 一.标准IO库函数的缓冲机制 由于IO设备的访问速度与CPU的速度相差好几个数量级,为了协调IO设备与CPU的速度的不匹配,对于块设备,内核使用了页高速缓存,即数据会先被拷贝到操作系统内核的页缓存区中,然后才会从操作系统内核的缓存区拷贝到应用程序的地址空间. 当应用程序尝

Linux - Unix环境高级编程(第三版) 代码编译

Unix环境高级编程(第三版) 代码编译 本文地址:http://blog.csdn.net/caroline_wendy 时间:2014.10.2 1. 下载代码:http://www.apuebook.com/code3e.html 2. 安装依赖库:sudo apt-get install libbsd-dev  3. 进入下载目录make 4. 复制头文件和动态链接库 sudo cp ./include/apue.h /usr/include/ sudo cp ./lib/libapue

Linux编程---信号处理

信号是一种异步的进程间通信的方式.但是这种通知方式能交换的信息很少.只能说给一个事件的标志.类似单片机中的中断,强迫进程停止做当前应当做的事情,而去执行中断执行程序. 信号的产生有如下几种: 1.用户按下了某个终止键,如ctrl-\或ctrl-c.是由终端程序向当前进程发送一个中断信号. 2.程序异常.比如除零错误. 3.kill函数向其发送了一个终止信号 4.进程向自己发送信号.如进程调用alarm函数. 5.企图读写终端的后台进程会得到作业的控制信号SIGTTIN或SIGTOU. 6.当进程

Linux编程---I/O部分

非常多函数都能够在网上找到,也比較基础,所以原型仅仅给出了函数名.详细用到再man吧. 输入输出是个非常重要的一块内容.差点儿网络相关的东西基本都是靠底层IO调用来实现的. 好吧.还是先踏踏实实的介绍一下C标准库中的IO函数吧.个别函数我也是第一次见.对于不太常见的我就多解释一下,反正通常这些函数百度一下就清楚了,我就不多解释了~ 1.C标准库IO函数 1.1流的关闭开启与重定向 fopen:打开一个流 fclose:关闭一个流 freopen:又一次打开一个流 1.2 读与写 读: fgetc

【Linux编程】XSI IPC

三种IPC被称作XSI IPC,分别是: 消息队列 信号量 共享存储器 下面分别介绍三种IPC的用法. 1.消息队列 消息队列是消息的链接表,具有如下函数接口: msgget:创建一个新队列或打开一个现存的队列. msgsnd:将消息添加到队列尾端. msgrcv:从队列中取消息. 我们可以自行定义一个表示消息的结构体,它由类型字段和实际数据组成: struct mest_t { long type; // 消息类型 char text[512]; // 消息内容 }; 有了消息类型,当我们用m