Linux系统调用函数列表
Linux系统调用函数列表一、进程控制:fork 创建一个新进程clone 按指定条件创建子进程execve 运行可执行文件exit 中止进程_exit 立即中止当前进程getdtablesize 进程所能打开的最大文件数getpgid 获取指定进程组标识号setpgid 设置指定进程组标志号getpgrp 获取当前进程组标识号setpgrp 设置当前进程组标志号getpid 获取进程标识号getppid 获取父进程标识号getpriority 获取调度优先级setpriority 设置调度优先级modify_ldt 读写进程的本地描述表nanosleep 使进程睡眠指定的时间nice 改变分时进程的优先级pause 挂起进程,等待信号personality 设置进程运行域prctl 对进程进行特定操作ptrace 进程跟踪sched_get_priority_max 取得静态优先级的上限sched_get_priority_min 取得静态优先级的下限sched_getparam 取得进程的调度参数sched_getscheduler 取得指定进程的调度策略sched_rr_get_interval 取得按RR算法调度的实时进程的时间片长度sched_setparam 设置进程的调度参数sched_setscheduler 设置指定进程的调度策略和参数sched_yield 进程主动让出处理器,并将自己等候调度队列队尾vfork 创建一个子进程,以供执行新程序,常与execve等同时使用wait 等待子进程终止wait3 参见waitwaitpid 等待指定子进程终止wait4 参见waitpidcapget 获取进程权限capset 设置进程权限getsid 获取会晤标识号setsid 设置会晤标识号二、文件系统控制1、文件读写操作fcntl 文件控制open 打开文件creat 创建新文件close 关闭文件描述字read 读文件write 写文件readv 从文件读入数据到缓冲数组中writev 将缓冲数组里的数据写入文件pread 对文件随机读pwrite 对文件随机写lseek 移动文件指针_llseek 在64位地址空间里移动文件指针dup 复制已打开的文件描述字dup2 按指定条件复制文件描述字flock 文件加/解锁poll I/O多路转换truncate 截断文件ftruncate 参见truncateumask 设置文件权限掩码fsync 把文件在内存中的部分写回磁盘2、文件系统操作access 确定文件的可存取性chdir 改变当前工作目录fchdir 参见chdirchmod 改变文件方式fchmod 参见chmodchown 改变文件的属主或用户组fchown 参见chownlchown 参见chownchroot 改变根目录stat 取文件状态信息lstat 参见statfstat 参见statstatfs 取文件系统信息fstatfs 参见statfsreaddir 读取目录项getdents 读取目录项mkdir 创建目录mknod 创建索引节点rmdir 删除目录rename 文件改名link 创建链接symlink 创建符号链接unlink 删除链接readlink 读符号链接的值mount 安装文件系统umount 卸下文件系统ustat 取文件系统信息utime 改变文件的访问修改时间utimes 参见utimequotactl 控制磁盘配额三、系统控制ioctl I/O总控制函数_sysctl 读/写系统参数acct 启用或禁止进程记账getrlimit 获取系统资源上限setrlimit 设置系统资源上限getrusage 获取系统资源使用情况uselib 选择要使用的二进制函数库ioperm 设置端口I/O权限iopl 改变进程I/O权限级别outb 低级端口操作reboot 重新启动swapon 打开交换文件和设备swapoff 关闭交换文件和设备bdflush 控制bdflush守护进程sysfs 取核心支持的文件系统类型sysinfo 取得系统信息adjtimex 调整系统时钟alarm 设置进程的闹钟getitimer 获取计时器值setitimer 设置计时器值gettimeofday 取时间和时区settimeofday 设置时间和时区stime 设置系统日期和时间time 取得系统时间times 取进程运行时间uname 获取当前UNIX系统的名称、版本和主机等信息vhangup 挂起当前终端nfsservctl 对NFS守护进程进行控制vm86 进入模拟8086模式create_module 创建可装载的模块项delete_module 删除可装载的模块项init_module 初始化模块query_module 查询模块信息*get_kernel_syms 取得核心符号,已被query_module代替四、内存管理brk 改变数据段空间的分配sbrk 参见brkmlock 内存页面加锁munlock 内存页面解锁mlockall 调用进程所有内存页面加锁munlockall 调用进程所有内存页面解锁mmap 映射虚拟内存页munmap 去除内存页映射mremap 重新映射虚拟内存地址msync 将映射内存中的数据写回磁盘mprotect 设置内存映像保护getpagesize 获取页面大小sync 将内存缓冲区数据写回硬盘cacheflush 将指定缓冲区中的内容写回磁盘五、网络管理getdomainname 取域名setdomainname 设置域名gethostid 获取主机标识号sethostid 设置主机标识号gethostname 获取本主机名称sethostname 设置主机名称六、socket控制socketcall socket系统调用socket 建立socketbind 绑定socket到端口connect 连接远程主机accept 响应socket连接请求send 通过socket发送信息sendto 发送UDP信息sendmsg 参见sendrecv 通过socket接收信息recvfrom 接收UDP信息recvmsg 参见recvlisten 监听socket端口select 对多路同步I/O进行轮询shutdown 关闭socket上的连接getsockname 取得本地socket名字getpeername 获取通信对方的socket名字getsockopt 取端口设置setsockopt 设置端口参数sendfile 在文件或端口间传输数据socketpair 创建一对已联接的无名socket 七、用户管理getuid 获取用户标识号setuid 设置用户标志号getgid 获取组标识号setgid 设置组标志号getegid 获取有效组标识号setegid 设置有效组标识号geteuid 获取有效用户标识号seteuid 设置有效用户标识号setregid 分别设置真实和有效的的组标识号setreuid 分别设置真实和有效的用户标识号getresgid 分别获取真实的,有效的和保存过的组标识号setresgid 分别设置真实的,有效的和保存过的组标识号getresuid 分别获取真实的,有效的和保存过的用户标识号setresuid 分别设置真实的,有效的和保存过的用户标识号setfsgid 设置文件系统检查时使用的组标识号setfsuid 设置文件系统检查时使用的用户标识号getgroups 获取后补组标志清单setgroups 设置后补组标志清单八、进程间通信ipc 进程间通信总控制调用1、信号sigaction 设置对指定信号的处理方法sigprocmask 根据参数对信号集中的信号执行阻塞/解除阻塞等操作sigpending 为指定的被阻塞信号设置队列sigsuspend 挂起进程等待特定信号signal 参见signalkill 向进程或进程组发信号*sigblock 向被阻塞信号掩码中添加信号,已被sigprocmask代替*siggetmask 取得现有阻塞信号掩码,已被sigprocmask代替*sigsetmask 用给定信号掩码替换现有阻塞信号掩码,已被sigprocmask代替*sigmask 将给定的信号转化为掩码,已被sigprocmask代替*sigpause 作用同sigsuspend,已被sigsuspend代替sigvec 为兼容BSD而设的信号处理函数,作用类似sigactionssetmask ANSI C的信号处理函数,作用类似sigaction2、消息msgctl 消息控制操作msgget 获取消息队列msgsnd 发消息msgrcv 取消息3、管道pipe 创建管道4、信号量semctl 信号量控制semget 获取一组信号量semop 信号量操作5、共享内存shmctl 控制共享内存shmget 获取共享内存shmat 连接共享内存shmdt 拆卸共享内存。
简介几种系统调用函数:write、read、open、close、ioctl
简介⼏种系统调⽤函数:write、read、open、close、ioctl 在 Linux 中,⼀切(或⼏乎⼀切)都是⽂件,因此,⽂件操作在 Linux 中是⼗分重要的,为此,Linux 系统直接提供了⼀些函数⽤于对⽂件和设备进⾏访问和控制,这些函数被称为系统调⽤(syscall),它们也是通向操作系统本⾝的接⼝。
⼀、系统调⽤ 系统调⽤就是 Linux 内核提供的⼀组⽤户进程与内核进⾏交互的接⼝。
这些接⼝让应⽤程序受限的访问硬件设备,提供了创建新进程并与已有进程进⾏通信的机制,也提供了申请操作系统其他资源的能⼒。
系统调⽤⼯作在内核态,实际上,系统调⽤是⽤户空间访问内核空间的唯⼀⼿段(除异常和陷⼊外,它们是内核唯⼀的合法⼊⼝)。
系统调⽤的主要作⽤如下:1)系统调⽤为⽤户空间提供了⼀种硬件的抽象接⼝,这样,当需要读写⽂件时,应⽤程序就可以不⽤管磁盘类型和介质,甚⾄不⽤去管⽂件所在的⽂件系统到底是哪种类型;2)系统调⽤保证了系统的稳定和安全。
作为硬件设备和应⽤程序之间的中间⼈,内核可以基于权限、⽤户类型和其他⼀些规则对需要进⾏的访问进⾏判断;3)系统调⽤是实现多任务和虚拟内存的前提。
要访问系统调⽤,通常通过 C 库中定义的函数调⽤来进⾏。
它们通常都需要定义零个、⼀个或⼏个参数(输⼊),⽽且可能产⽣⼀些副作⽤(会使系统的状态发⽣某种变化)。
系统调⽤还会通过⼀个 long 类型的返回值来表⽰成功或者错误。
通常,⽤⼀个负的值来表明错误,0表⽰成功。
系统调⽤出现错误时,C 库会把错误码写⼊ errno 全局变量,通过调⽤ perror() 库函数,可以把该变量翻译成⽤户可理解的错误字符串。
⼆、⼏种常⽤的系统调⽤函数2.1 write 系统调⽤ 系统调⽤ write 的作⽤是把缓冲区 buf 的前 nbytes 个字节写⼊与⽂件描述符 fildes 关联的⽂件中。
它返回实际写⼊的字节数。
如果⽂件描述符有错或者底层的设备驱动程序对数据块长度⽐较敏感,该返回值可能会⼩于 nbytes。
Linux内核中系统调用详解
Linux内核中系统调用详解什么是系统调用?(Linux)内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。
用户可以通过系统调用命令在自己的应用程序中调用它们。
从某种角度来看,系统调用和普通的函数调用非常相似。
区别仅仅在于,系统调用由(操作系统)核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。
随Linux核心还提供了一些(C语言)函数库,这些库对系统调用进行了一些包装和扩展,因为这些库函数与系统调用的关系非常紧密,所以习惯上把这些函数也称为系统调用。
为什么要用系统调用?实际上,很多已经被我们习以为常的C语言标准函数,在Linux 平台上的实现都是靠系统调用完成的,所以如果想对系统底层的原理作深入的了解,掌握各种系统调用是初步的要求。
进一步,若想成为一名Linux下(编程)高手,也就是我们常说的Hacker,其标志之一也是能对各种系统调用有透彻的了解。
即使除去上面的原因,在平常的编程中你也会发现,在很多情况下,系统调用是实现你的想法的简洁有效的途径,所以有可能的话应该尽量多掌握一些系统调用,这会对你的程序设计过程带来意想不到的帮助。
系统调用是怎么工作的?一般的,进程是不能访问内核的。
它不能访问内核所占内存空间也不能调用内核函数。
(CPU)(硬件)决定了这些(这就是为什么它被称作"保护模式")。
系统调用是这些规则的一个例外。
其原理是进程先用适当的值填充(寄存器),然后调用一个特殊的指令,这个指令会跳到一个事先定义的内核中的一个位置(当然,这个位置是用户进程可读但是不可写的)。
在(Intel)CPU中,这个由中断0x80实现。
硬件知道一旦你跳到这个位置,你就不是在限制模式下运行的用户,而是作为操作系统的内核--所以你就可以为所欲为。
进程可以跳转到的内核位置叫做sysem_call。
这个过程检查系统调用号,这个号码告诉内核进程请求哪种服务。
然后,它查看系统调用表(sys_call_table)找到所调用的内核函数入口地址。
Linux系统调用--access函数详解
【access系统调用】功能描述:检查调用进程是否可以对指定的文件执行某种操作。
用法:#include <unistd.h>#include <fcntl.h>int access(const char *pathname, int mode);参数:pathname: 需要测试的文件路径名。
mode: 需要测试的操作模式,可能值是一个或多个R_OK(可读?), W_OK(可写?), X_OK(可执行?) 或F_OK(文件存在?)组合体。
返回说明:成功执行时,返回0。
失败返回-1,errno被设为以下的某个值EINVAL:模式值无效EACCES:文件或路径名中包含的目录不可访问ELOOP :解释路径名过程中存在太多的符号连接ENAMETOOLONG:路径名太长ENOENT:路径名中的目录不存在或是无效的符号连接ENOTDIR:路径名中当作目录的组件并非目录EROFS:文件系统只读EFAULT:路径名指向可访问的空间外EIO:输入输出错误ENOMEM:不能获取足够的内核内存ETXTBSY:对程序写入出错例子:/* test.c */ /* test.c */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>int main(int argc, char *argv[]){if (argc < 2) {printf("Usage: ./test filename\n");exit(1);}if (access(argv[1], F_OK) == -1) {puts("File not exists!");exit(2);}if (access(argv[1], R_OK) == -1)puts("You can't read the file!");elseif (access(argv[1], R_OK | W_OK) != -1) puts("You can read and write the file");elseputs("You can read the file");exit(0);}#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>int main(int argc, char *argv[]){if (argc < 2) {printf("Usage: ./test filename\n");exit(1);}if (access(argv[1], F_OK) == -1) {puts("File not exists!");exit(2);}if (access(argv[1], R_OK) == -1)puts("You can't read the file!");elseif (access(argv[1], R_OK | W_OK) != -1) puts("You can read and write the file");elseputs("You can read the file");exit(0);}。
Linux系统调用--getrlimit()与setrlimit()函数详解
功能描述:获取或设定资源使用限制。
每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。
非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。
授权进程可以任意改变其软硬限制。
RLI M_INFINITY的值表示不对资源限制。
用法:#include <sys/resource.h>int getrlimit(int resource, struct rlimit *rlim);int setrlimit(int resource, const struct rlimit *rlim);参数:resource:可能的选择有RLIMIT_AS//进程的最大虚内存空间,字节为单位。
RLIMIT_CORE//内核转存文件的最大长度。
RLIMIT_CPU//最大允许的CPU使用时间,秒为单位。
当进程达到软限制,内核将给其发送SIGXCPU信号,这一信号的默认行为是终止进程的执行。
然而,可以捕捉信号,处理句柄可将控制返回给主程序。
如果进程继续耗费CPU时间,核心会以每秒一次的频率给其发送SIGXCPU信号,直到达到硬限制,那时将给进程发送SIGKILL信号终止其执行。
RLIMIT_DATA//进程数据段的最大值。
RLIMIT_FSIZE//进程可建立的文件的最大长度。
如果进程试图超出这一限制时,核心会给其发送SIGXFSZ信号,默认情况下将终止进程的执行。
RLIMIT_LOCKS//进程可建立的锁和租赁的最大值。
RLIMIT_MEMLOCK//进程可锁定在内存中的最大数据量,字节为单位。
RLIMIT_MSGQUEUE//进程可为POSIX消息队列分配的最大字节数。
RLIMIT_NICE//进程可通过setpriority() 或nice()调用设置的最大完美值。
RLIMIT_NOFILE//指定比进程可打开的最大文件描述词大一的值,超出此值,将会产生EMFILE错误。
linux命令 调用python文件的函数
linux命令调用python文件的函数在Linux命令行中,你可以使用Python的-c选项来调用Python脚本中的函数。
这是一个简单的示例,假设你有一个Python脚本名为my_script.py,其中包含一个函数my_function():python复制代码# my_script.pydef my_function():print("Hello,World!")你可以在命令行中这样调用它:bash复制代码python -c "import my_script;my_script.my_function()"这将输出"Hello, World!"。
如果你想传递参数给函数,你可以这样做:bash复制代码python -c "import my_script;my_script.my_function('argument')"请注意,这种方法只适用于在命令行中直接运行的情况。
如果你想要在一个脚本或程序中使用Python,你应该考虑使用模块和函数调用的常规方式,例如使用import语句。
当然可以!以下是一些关于Python函数调用的示例:1.基础示例:2.python复制代码# 定义一个函数def greet(name):return f"Hello, {name}!"# 调用函数print(greet("Alice")) # 输出: Hello,Alice!1.默认参数:2.python复制代码def greet_with_default(name="World"):return f"Hello, {name}!"print(greet_with_default()) # 输出: Hello, World!print(greet_with_default("Bob")) # 输出: Hello,Bob!1.可变参数:2.python复制代码def sum_numbers(*args):return sum(args)print(sum_numbers(1, 2, 3)) # 输出: 6print(sum_numbers(10, 20)) # 输出:301.关键字参数:2.python复制代码def greet_with_title(name, title="Mr."):return f"{title} {name}!"print(greet_with_title("John")) # 输出: Mr. John!print(greet_with_title("Jane", "Ms.")) # 输出: Ms.Jane!1.使用lambda函数:2.python复制代码# 使用lambda函数定义一个函数,该函数将两个数字相加并返回它们的和。
LinuxC函数库大全
LinuxC函数库⼤全(1)字符测试函数isalnum(测试字符是否为英⽂字母或数字)isalpha(测试字符是否为英⽂字母)isascii(测试字符是否为ASCII码字符)isblank(测试字符是否为空格字符)iscntrl(测试字符是否为ASCII码的控制字符)isdigit(测试字符是否为阿拉伯数字)isgraph(测试字符是否为可打印字符)islower(测试字符是否为⼩写英⽂字母)isprint(测试字符是否为可打印字符)isspace(测试字符是否为空格字符)ispunct(测试字符是否为标点符号或特殊符号)isupper(测试字符是否为⼤写英⽂字母)isxdigit(测试字符是否为16进制数字)(2)数据转换函数atof(将字符串转换成浮点型数)1atoi(将字符串转换成整型数)atol(将字符串转换成长整型数)ecvt(将浮点型数转换成字符串,19取四舍五⼊)fcvt(将浮点型数转换为字符串,20取四舍五⼊)gcvt(将浮点型数转换为字符串,21取四舍五⼊)(3)内存配置函数alloca(配置内存空间)brk(改变数据字节的范围)calloc(配置内存空间)free(释放原先配置的内存)getpagesize(取得内存分页⼤⼩)malloc(配置内存空间)mmap(建⽴内存映射)munmap(解除内存映射)realloc(更改⼰配置的内存空间)sbrk(增加程序可⽤的数据空间)(4)时间函数asctime(将时间和⽇期以字符串格式表⽰)clock(取得进程占⽤CPU的⼤约时间)ctime(将时间和⽇期以字符串格式表⽰)difftime(计算时间差距)ftime(取得⽬前的时间和⽇期)gettimeofday(取得⽬前的时间)gmtime(取得⽬前的时间和⽇期)localtime(取得当地⽬前的时间和⽇期)mktime(将时间结构数据转换成经过的秒数)settimeofday(设置⽬前的时间)strftime(格式化⽇期和时间)time(取得⽬前的时间)tzset(设置时区以供时间转换)(5)字符串处理函数bcmp(⽐较内存内容)bcopy(拷贝内存内容)bzero(将⼀段内存内容全清为零)ffs(在⼀整型数中查找第⼀个值为真的位)memchr(在某⼀内存范围中查找⼀特定字符) memcmp(⽐较内存内容)memcpy(拷贝内存内容)memfrob(对内存区域编码)memmove(拷贝内存内容)memset(将⼀段内存空间填⼊某值)rindex(查找字符串中最后⼀个出现的指定字符) strcasecmp(忽略⼤⼩写⽐较字符串)strcat(连接两字符串)strchr(查找字符串中第⼀个出现的指定字符)strcmp(⽐较字符串)strcoll(采⽤⽬前区域的字符排列次序来⽐较字符串) strcpy(拷贝字符串)strcspn(返回字符串中连续不含指定字符串内容的字符数) strdup(复制字符串)strfry(随机重组字符串内的字符)strlen(返回字符串长度)strncasecmp(忽略⼤⼩写⽐较字符串)strncat(连接两字符串)strncmp(⽐较字符串)strncpy(拷贝字符串)strpbrk(查找字符串中第⼀个出现的指定字符)strrchr(查找字符串中最后⼀个出现的指定字符)strspn(返回字符串中连续不合指定字符串内容的字符数) strstr(在⼀字符串中查找指定的字符串)strtok(分割字符串)(6)数学计算函数abs(计算整型数的绝对值)acos(取反余弦函数值)asin(取反正弦函数值)atan(取反正切函数值)atan2(取得反正切函数值)ceil(取不⼩于参数的最⼩整型数)cos(取余弦函数值)cosh(取双曲线余弦函数值)div(取得两整型数相除后的商及余数)exp(计算指数)fabs(计算浮点型数的绝对值)frexp(将浮点型数分为底数与指数)hypot(计算直⾓三⾓形斜边长)labs(计算长整型数的绝对值)ldexp(计算2的次⽅值)ldiv(取得两长整数相除后的商及余数)log(计算以e为底的对数值)log10(计算以10为底的对数值)modf(将浮点型数分解成整数与⼩数)pow(计算次⽅值)sin(取正弦函数值)sinh(取双曲线正弦函数值)sqrt(计算平⽅根值)tan(取正切函数值)tanh(取双曲线正切函数值)(7)⽤户和组函数cuserid(取得⽤户帐号名称)endgrent(关闭组⽂件)endpwent(关闭密码⽂件)fgetgrent(从指定的⽂件来读取组格式) fgetpwent(从指定的⽂件来读取密码格式) getegid(取得有效的组识别码)geteuid(取得有效的⽤户识别码)getgid(取得真实的组识别码)getgrent(从组⽂件⽂件中取得帐号的数据) getgrgid(从组⽂件中取得指定gid的数据) getgrnan(从组⽂件中取得指定组的数据) getgroups(取得组代码)getlogin(取得登录的⽤户帐号名称)getpw(取得指定⽤户的密码⽂件数据) getpwent(从密码⽂件中取得帐号的数据) getpwnam(从密码⽂件中取得指定帐号的数据) getpwuid(从密码⽂件中取得指定uid的数据) getuid(取得真实的⽤户识别码)getutent(从utmp⽂件中取得帐号登录数据) getutid(从utmp⽂件中查找特定的记录) getutline(从utmp⽂件中查找特定的记录) initgroups(初始化组清单)logwtmp(将⼀登录数据记录到wtmp⽂件) pututline(将utmp记录写⼊⽂件)setegid(设置有效的组识别码)seteuid(设置有效的⽤户识别码)setfsgid(设置⽂件系统的组识别码)setfsuid(设置⽂件系统的⽤户识别码)setgid(设置真实的组识别码)setgrent(从头读取组⽂件中的组数据) setgroups(设置组代码)setpwent(从头读取密码⽂件中的帐号数据) setregid(设置真实及有效的组识别码) setreuid(设置真实及有效的⽤户识别码) setuid(设置真实的⽤户识别码)setutent(从头读取utmp/⽂件中的登录数据) updwtmp(将⼀登录数据记录到wtmp⽂件) utmpname(设置utmp⽂件路径)(8)数据加密函数crypt(将密码或数据编码)getpass(取得⼀密码输⼊)(9)数据结构函数bsearch(⼆元搜索)hcreate(建⽴哈希表)hdestory(删除哈希表)hsearch(哈希表搜索)insque(加⼊⼀项⽬⾄队列中)lfind(线性搜索)lsearch(线性搜索)qsort(利⽤快速排序法排列数组)rremque(从队列中删除⼀项⽬)tdelete(从⼆叉树中删除数据)tfind(搜索⼆叉树)tsearch(⼆叉树)twalk(⾛访⼆叉树)(10)随机数函数drand48(产⽣⼀个正的浮点型随机数)erand48(产⽣⼀个正的浮点型随机数)jrand48(产⽣⼀个长整型数随机数)lcong48(设置48位运算的随机数种⼦) lrand48(产⽣⼀个正的长整型随机数) mrand48(产⽣⼀个长整型随机数)nrand48(产⽣⼀个正的长整型随机数) rand(产⽣随机数)random(产⽣随机数)seed48(设置48位运算的随机数种⼦) setstate(建⽴随机数状态数组)srand(设置随机数种⼦)srand48(设置48位运算的随机数种⼦) srandom(设置随机数种⼦)(11)初级I/O函数close(关闭⽂件)creat(建⽴⽂件)dup(复制⽂件描述词)dup2(复制⽂件描述词)fcntl(⽂件描述词操作)flock(锁定⽂件或解除锁定)fsync(将缓冲区数据写回磁盘)lseek(移动⽂件的读写位置)mkstemp(建⽴唯⼀的临时⽂件)open(打开⽂件)read(由⼰打开的⽂件读取数据)sync(将缓冲区数据写回磁盘)write(将数据写⼊已打开的⽂件内) (12)标准I/O函数clearerr(清除⽂件流的错误旗标)fclose(关闭⽂件)fdopen(将⽂件描述词转为⽂件指针)feof(检查⽂件流是否读到了⽂件尾) fflush(更新缓冲区)fgetc(由⽂件中读取⼀个字符)fgetpos(取得⽂件流的读取位置)fgets(由⽂件中读取⼀字符串)fileno(返回⽂件流所使⽤的⽂件描述词) fopen(打开⽂件)fputc(将⼀指定字符写⼊⽂件流中)fputs(将⼀指定的字符串写⼊⽂件内) fread(从⽂件流读取数据)freopen(打开⽂件)fseek(移动⽂件流的读写位置)fsetpos(移动⽂件流的读写位置)ftell(取得⽂件流的读取位置)fwrite(将数据写⾄⽂件流)getc(由⽂件中读取⼀个字符)getchar(由标准输⼊设备内读进⼀字符) gets(由标准输⼊设备内读进⼀字符串) mktemp(产⽣唯⼀的临时⽂件⽂件名) putc(将⼀指定字符写⼊⽂件中)putchar(将指定的字符写到标准输出设备) puts(将指定的字符串写到标准输出设备) rewind(重设⽂件流的读写位置为⽂件开头) setbuf(设置⽂件流的缓冲区)setbuffer(设置⽂件流的缓冲区) setlinebuf(设置⽂件流为线性缓冲区)tmpfile(建⽴临时⽂件)ungetc(将⼀指定字符写回⽂件流中)(13)进程及流程控制abort(以异常⽅式结束进程)assert(若测试的条件不成⽴则终⽌进程)atexit(设置程序正常结束前调⽤的函数)execl(执⾏⽂件)execle(执⾏⽂件)execlp(从PATH环境变量中查找⽂件并执⾏) execv(执⾏⽂件)execve(执⾏⽂件)execvp(执⾏⽂件)exit(正常结束进程)_exit(结束进程执⾏)fork(建⽴⼀个新的进程)getpgid(取得进程组识别码)getpgrp(取得进程组识别码)getpid(取得进程识别码)getppid(取得⽗进程的进程识别码)getpriority(取得程序进程执⾏优先权)longjmp(跳转到原先setjmp保存的堆栈环境) nice(改变进程优先顺序)on_exit(设置程序正常结束前调⽤的函数) ptrace(进程追踪)setjmp(保存⽬前堆栈环境)setpgid(设置进程组识别码)setpgrp(设置进程组识别码)setpriority(设置程序进程执⾏优先权) siglongjmp(跳转到原先sigsetjmp保存的堆栈环境) sigsetjmp(保存⽬前堆栈环境)system(执⾏shell命令)wait(等待⼦进程中断或结束)waitpid(等待⼦进程中断或结束)(14)格式化输⼈输出函数fprintf(格式化输出数据⾄⽂件)fscanf(格式化字符串输⼊)printf(格式化输出数据)scanf(格式化字符串输⼊)snprintf(格式化字符串复制)sprintf(格式化字符串复制)sscanf(格式化字符串输⼊)vfprintf(格式化输出数据⾄⽂件)vfcanf(格式化字符串输⼊)vprintf(格式化输出数据)vscanf(格式化字符串输⼊)vsnprintf(格式化字符串复制)vsprintf(格式化字符串复制)vsscanf(格式化字符串输⼊)(15)⽂件及⽬录函数access(判断是否具有存取⽂件的权限) alphasort(依字母顺序排序⽬录结构)chdir(改变当前的⼯作⽬录)chmod(改变⽂件的权限)chown(改变⽂件的所有者)chroot(改变根⽬录)fchdir(改变当前的⼯作⽬录)fchmod(改变⽂件的权限)fchown(改变⽂件的所有者)fstat(由⽂件描述词取得⽂件状态)ftruncate(改变⽂件⼤⼩)ftw(遍历⽬录树)get_current_dir_name(取得当前的⼯作⽬录) getcwd(取得当前的⼯作⽬录)getwd(取得当前的⼯作⽬录)lchown(改变⽂件的所有者)link(建⽴⽂件连接)lstat(由⽂件描述词取得⽂件状态)nftw(遍历⽬录树)opendir(打开⽬录)readdir(读取⽬录)readlink(取得符号连接所指的⽂件)realpath(将相对⽬录路径转换成绝对路径) remove(删除⽂件)rename(更改⽂件名称或位置)rewinddir(重设读取⽬录的位置为开头位置) scandir(读取特定的⽬录数据)seekdir(设置下回读取⽬录的位置)stat(取得⽂件状态)symlink(建⽴⽂件符号连接)telldir(取得⽬录流的读取位置)truncate(改变⽂件⼤⼩)umask(设置建⽴新⽂件时的权限遮罩)unlink(删除⽂件)utime(修改⽂件的存取时间和更改时间)utimes(修改⽂件的存取时间和更改时间)(16)信号函数alarm(设置信号传送闹钟)kill(传送信号给指定的进程)pause(让进程暂停直到信号出现)psignal(列出信号描述和指定字符串)raise(传送信号给⽬前的进程)sigaction(查询或设置信号处理⽅式)sigaddset(增加⼀个信号⾄信号集)sigdelset(从信号集⾥删除⼀个信号) sigemptyset(初始化信号集)sigfillset(将所有信号加⼊⾄信号集) sigismember(测试某个信号是否已加⼊⾄信号集⾥) signal(设置信号处理⽅式)sigpause(暂停直到信号到来)sigpending(查询被搁置的信号)sigprocmask(查询或设置信号遮罩)sigsuspend(暂停直到信号到来)sleep(让进程暂停执⾏⼀段时间)isdigit(测试字符是否为阿拉伯数字)(17)错误处理函数ferror(检查⽂件流是否有错误发⽣)perror(打印出错误原因信息字符串)streror(返回错误原因的描述字符串)(18)管道相关函数mkfifo(建⽴具名管道)popen(建⽴管道I/O)(19)Soket相关函数accept(接受socket连线)bind(对socket定位)connect(建⽴socket连线)endprotoent(结束⽹络协议数据的读取) endservent(结束⽹络服务数据的读取) gethostbyaddr(由IP地址取得⽹络数据) gethostbyname(由主机名称取得⽹络数据) getprotobyname(由⽹络协议名称取得协议数据) getprotobynumber(由⽹络协议编号取得协议数据) getprotoent(取得⽹络协议数据) getservbyname(依名称取得⽹络服务的数据) getservbyport(依port号码取得⽹络服务的数据) getservent(取得主机⽹络服务的数据) getsockopt(取得socket状态)herror(打印出⽹络错误原因信息字符串) hstrerror(返回⽹络错误原因的描述字符串)htonl(将32位主机字符顺序转换成⽹络字符顺序) htons(将16位主机字符顺序转换成⽹络字符顺序) inet_addr(将⽹络地址转成⽹络⼆进制的数字) inet_aton(将⽹络地址转成⽹络⼆进制的数字) inet_ntoa(将⽹络⼆进制的数字转换成⽹络地址) listen(等待连接)ntohl(将32位⽹络字符顺序转换成主机字符顺序) ntohs(将16位⽹络字符顺序转换成主机字符顺序) recv(经socket接收数据)recvfrom(经socket接收数据)recvmsg(经socket接收数据)send(经socket传送数据)sendmsg(经socket传送数据)sendto(经socket传送数据)setprotoent(打开⽹络协议的数据⽂件) setservent(打开主机⽹络服务的数据⽂件) setsockopt(设置socket状态)shutdown(终⽌socket通信)socket(建⽴⼀个socket通信)(20)进程通信(IPC)函数ftok(将⽂件路径和计划代号转为SystemcVIPCkey) msgctl(控制信息队列的运作)msgget(建⽴信息队列)msgrcv(从信息队列读取信息)msgsnd(将信息送⼊信息队列)semctl(控制信号队列的操作)semget(配置信号队列)semop(信号处理)shmat(attach共享内存)shmctl(控制共享内存的操作)shmdt(detach共享内存)shmget(配置共享内存)(21)记录函数closelog(关闭信息记录)openlog(准备做信息记录)syslog(将信息记录⾄系统⽇志⽂件)getenv(取得环境变量内容)putenv(改变或增加环境变量)setenv(改变或增加环境变量) unsetenv(清除环境变量内容)(23)正则表达式regcomp(编译正则表达式字符串) regerror(取得正则搜索的错误原因) regexec(进⾏正则表达式的搜索) regfree(释放正则表达式使⽤的内存) (24)动态函数dlclose(关闭动态函数库⽂件)dlerror(动态函数错误处理)dlopen(打开动态函数库⽂件)dlsym(从共享对象中搜索动态函数) (25)其他函数getopt(分析命令⾏参数)isatty(判断⽂件描述词是否是为终端机) select(I/O多⼯机制)ttyname(返回⼀终端机名称)。
linux system函数详解
linux system函数详解Linux是一个开源的操作系统内核,以稳定、高效和安全性闻名。
在Linux系统中,系统函数是一组用于实现特定功能的函数集合。
这些函数提供了访问操作系统核心功能的接口,使程序能够与操作系统进行交互。
在Linux系统函数的详解中,以下是一些常用的系统函数:1. open()函数:该函数用于打开文件,并返回一个文件描述符。
文件描述符是操作系统分配给打开的文件的整数值,可以用于后续的文件操作,如读取和写入。
2. read()函数:read()函数用于从已打开的文件中读取数据。
它接受三个参数:文件描述符、数据缓冲区的地址和要读取的字节数。
该函数将读取的数据存储在缓冲区中,并返回实际读取的字节数。
3. write()函数:write()函数用于向已打开的文件写入数据。
它接受三个参数:文件描述符、要写入的数据缓冲区的地址和要写入的字节数。
该函数将缓冲区中的数据写入文件,并返回实际写入的字节数。
4. close()函数:close()函数用于关闭先前打开的文件。
它接受一个参数,即要关闭的文件描述符。
该函数将释放文件描述符并断开与文件的连接。
5. fork()函数:fork()函数用于创建一个子进程。
调用该函数后,父进程将创建一个新的子进程,并且子进程将继承父进程的代码段、数据段和堆栈等信息。
可以使用fork()函数来实现并行处理和任务分发。
6. exec()函数:exec()函数用于在当前进程中执行一个新的程序。
它接受两个参数:要执行的程序路径和命令行参数。
调用exec()函数后,当前进程的代码和数据将被替换为新程序的代码和数据,从而实现程序的替换执行。
这些系统函数是Linux系统编程中常用的一部分。
通过熟练使用这些系统函数,我们可以实现文件操作、进程控制、程序执行等功能。
同时,深入了解这些系统函数的原理和底层机制也有助于优化程序的性能和稳定性。
总之,熟悉和理解Linux系统函数是成为一名优秀的系统开发工程师的必备技能之一。
Linux系统调用--gettimeofdaysettimeofday函数详解
Linux系统调用--gettimeofdaysettimeofday函数详解Linux系统调用--gettimeofday/settimeofday函数详解【gettimeofday/settimeofday系统调用】功能描述:gettimeofday获取当前时间和时区信息。
settimeofday设置当前时间和时区信息。
只有超级用户可以调用settimeofday,如果存在为NULL的参数,表示不改变某一项信息。
用法:#include <sys/time.h>#include <time.h>int gettimeofday(struct tim *tv, struct timezone *tz);int settimeofday(const struct tim *tv , const struct timezone *tz);参数:tv:对于gettimeofday,指向存放返回的时间信息的缓冲区;对于settimeofday,指向需要设置的时间信息缓冲区。
原型如下struct tim {time_t tv_sec;suseconds_t tv_usec;};tz:时区信息,一般不会被使用。
原型如下struct timezone {int tz_minuteswest;int tz_dsttime;};如果tv或tz某一项为NULL,表示对相关的信息不感兴趣。
操作tim结构体的宏有:#define timerisset(tvp)\((tvp)->tv_sec || (tvp)->tv_usec)#define timercmp(tvp, uvp, cmp)\((tvp)->tv_sec cmp (uvp)->tv_sec ||\(tvp)->tv_sec == (uvp)->tv_sec &&\(tvp)->tv_usec cmp (uvp)->tv_usec)#define timerclear(tvp)\((tvp)->tv_sec = (tvp)->tv_usec = 0)返回说明:成功执行时,返回0。
linux C语言常用函数大全
1: 系统调用:读一个文件函数原型:ssize_t read(int fd, void *buf, size_t size) ;头文件:#include参数:略返回值:1> = 0 :达到文件结尾3> > 0 :返回读到的实际字节数备注:略2:系统调用:写入一个文件函数原型:ssize_t write(int fd, void *buf, size_t size) ;头文件:#include参数:略返回值:1> > 0 :返回写入的实际字节数目----------------------------------注意:当返回值不等于size时,则出现I/O错误备注:略3:系统调用:返回本进程的ID函数原型:pid_t getpid() ;头文件:#include参数:无返回值:1> > 0 :返回本进程ID2>4:系统调用:返回本进程的组ID函数原型:gid_t getgid() ;头文件:#include参数:无返回值:1> > 0 :返回组ID5:系统调用:复制一个文件描述符(一个参数)函数原型:int dup(int fd) ;头文件:#include参数:略返回值:1> >= 0 :返回一个文件描述符备注:此函数的结果就是两个文件符指向一个相同的文件6:系统调用:复制一个文件描述符(两个参数)函数原型:int dup(int fd1, int fd2) ;头文件:#include参数:fd1 :已知的fdfd2 :要复制到的fd返回值:1> >=0 :调用成功备注:此函数的分成三种情况:1> 若fd2已打开,且fd2 != fd1,则先将fd2关闭2> 若fd2已打开,且fd2 == fd1,则直接返回3> 若fd2没有打开,则直接复制7:系统调用:获取文件属性的三个函数函数原型:int stat(const char *pathname, stat *buf) ;int fstat(int fd, stat *buf) ;int lstat(int fd, stat *buf) ;头文件:#include#include参数:略返回值:如果返回负数,则调用失败备注:当操作的文件是个链接文件时1> stat和fstat返回的是链接指向文件的属性2> lstat返回的是链接文件本身的属性8:系统调用:判断文件类型的几个宏(Question:参数) 头文件:(Question)普通文件:S_ISREG()目录文件:S_ISDIR()链接文件:S_ISLNK()块设备:S_ISBLK()字符设备:S_ISCHR()管道:S_ISFIFO()SOCKET :S_ISSOCK()9:系统调用:测试文件存取模式函数原型:int access(const char *pathname, int mode) 头文件:#include#include#include参数:mode的取值情况:---------------1> 存在:F_OK (文件是否存在)2> 可读:R_OK3> 可写:W_OK4> 执行:X_OK返回值:如果失败,返回一个负数备注:10:系统命令:置位设置-用户-ID位chmod u+s file11:系统结构:文件存储权限字S_ISUID 设置-用户-IDS_ISGID 用户-组-IDS_ISIVX 粘住位S_IRUSR 用户相关S_IWUSRS_IXUSRS_IRGRP 组相关S_IWGRPS_IXGRPS_IROTH 其他用户相关S_IWOTHS_IXOTH12:系统函数:屏蔽标记函数函数原型:mode_t umask(mode_t masks) ;头文件:#include参数:要屏蔽的存储方式字(mode_t)返回值:返回原来的屏蔽方式字备注:1> 此函数如果出错,则不会返回2> 这是UNIX中出错不会返回的仅有的几个函数之一13:系统调用:改动文件存取模式函数原型:int chmod(const char *pathname, mode_t mode) ;int fchmode(int fd, mode_t mode) ;头文件:#include#include参数:略返回值:如果出错,则返回一个负数备注:fchmod能设置一个已打开文件的存储访问权限14:系统调用:截短文件的函数函数原型:int truncate(const char *pathname, off_t length) ;int ftruncate(int fd, off_t length) ;头文件:#include#include参数:off_t (截短到该长度)返回值:如果失败,则返回一个负数备注:1> length可正可负2> 可能出现“文件空洞”15:标准函数:设置流的缓冲类型函数原型:int setvbuf(FILE *fstream, void *buf, int mode, size_t size 头文件:#include参数:buf :if buf==NULL,则由系统来分配缓存,叫做系统缓存if buf!=NULL,则来使用分配的缓存,叫做用户缓存size:分配的用户缓存大小mode:_IOFBF :I/O全缓存_IOLBF :I/O行缓存_IONBF :I/O不缓存参数:如果失败,则返回一个负数16:标准函数:缓冲流函数原型:int fflush(FILE *fstream) ;头文件:#include参数:if fstream == NULL,则强制刷新全部流if fstream != NULL,则刷新特定流返回值:如果失败,则返回一个负数17:标准函数:打开文件的三个函数函数原型:FILE* fopen(const char *pathname, char *mode) ;FILE* fropen(const char *pathname, char *mode) ;FILE* fdopen(int fd, char *mode) ;头文件:#include参数:略返回值:略备注:1> fopen :路径 FILE*2> fropen :重新打开一个文件3> fdopen :把FILE* 和一个fd联系起来I/O的几种type类型1> r :为读而打开2> r+ :为读和写而打开3> w :使文件长度称为0,或为写而创建文件4> w+ :使文件长度成为0,为读和写而打开5> a :添加,为在文件尾写而打开或为了写而创建文件6> a+ :为在文件尾读和写而打开或创建19:标准函数:关闭一个文件流函数原型:int fclose(FILE* fstream) ;头文件:#include参数:略返回值:如果出错,返回一个负数备注:系统在关闭一个文件时,会自动刷新该文件相关的流1> 输入数据:全部被抛弃2> 输出数据:全部被刷新20:标准函数:读取一个字符(三个)函数原型:int getchar() ;int getc(FILE *fstream) ;int fgetc(FILE *fstream) ;头文件:#include参数:略返回值:1> EOF :文件结束2> >=0 :读取的字符的ASCII码3> getc和fgetc的差别getc是个宏2> 返回值一定要用int类型,不是char类型3> 三个函数遇见文件结束或I/O错误时,都会返回负数,这个时候应该用两个函数来判断是那种情况:feof(FILE *fstream) ; // 是否文件结尾?ferror(FILE *fstream) ; // 是否出现错误?21:标准函数:测试是否到达一个文件流的结束函数原型:int feof(FILE *fstream) ;头文件:#include参数:略返回值:略22:标准函数:测试一个文件流是否出现错误函数原型:int ferror(FILE *fstream) ;头文件:#include参数:略返回值:略23:标准函数:字符回送函数函数原型:int ungetc(int c, FILE *fsteam) ;头文件:#include参数:略返回值:1> 如果回送成功,则返回字符c2> 如果失败,则返回一个负数24:标准函数:字符输出函数函数原型:int putchar(int c) ;int putc(int c, FILE *fstream) ;int fputc(int c, FILE *fstream) ;头文件:#include参数:略返回值:如果失败,则返回一个负数备注:其他相关事项和put类型相同25:标准函数:每次一行I/O的输入函数函数原型:int fgets(const char *buf, size_t size, FILE *fstream) ;头文件:#include参数:略返回值:1> 如果成功,返回实际写入的字节数2> 如果返回值和size不相等,则出现错误26:标准函数:每次一行I/O的输出函数函数原型:int fputs(const char *buf, FILE *fstream) ;头文件:#include参数:略返回值:1> >=0 :返回实际读取的字节数2> fgets函数中,如果缓存大小是size,则最多能存放n-1个字符(包括‘\n’符号)2> fputs函数中,系统推荐在buf[size-2]字符=’\n’,不过并不强制这样做27:标准函数:读二进制文件或数据类型函数原型:int fread(void *buf, size_t objsize, int objnum, FILE *fs头文件:#include参数:buf :缓存首地址objsize :一个字节所占的字节数目objnum :对象的数目返回值:1> >=0 :返回读到的对象数目2>28:标准函数:写二进制文件或数据类型函数原型:int fwrite(const void *buf,size_t size, int num, FILE *f)头文件:#include参数:buf :缓存首地址objsize :一个字节所占的字节数目num :要写入的字节数目返回值:如果返回值和num不相等,那么就出现了错误备注:fread和fwrite函数是有局限性的,因为各种操作系统同一种类型所占的空间大小也是有差别的29:标准函数:定位流函数函数原型:int fseek(FILE *fstream, long offset, int whence) ;头文件:#include参数:offset :偏移量whence :从什么地方开始(SET,END,CURSOR)返回值:如果定位失败,则返回一个负数30:标准函数:重置文件流函数原型:int rewind(FILE *fstream)头文件:#include参数:略返回值:略31:标准函数:建立临时文件(两个)函数原型:char* tmpnam(char *str) ;FILE* tmpfile(void) ;头文件:#include参数:if (str == NULL)路径名会存储在str中if (str != NULL)路径名存储在系统的静态空间里面返回值:tmpnam :返回临时文件的路径名tmpfile :返回临时文件的指针。
系统调用函数
系统调用函数系统调用函数系统调用函数是操作系统提供给应用程序接口,通过这些系统调用函数可以访问系统的资源,如:文件、网络资源、内存等等。
常用的系统调用函数有open、read、write、close、malloc、free、stat 等等。
1、open:用于打开文件,open函数的原型如下:int open(const char* pathname, int flag, mode_t mode); pathname:表示需要打开的文件名flag:表示操作方式,如只读、只写等mode:表示权限open函数返回一个文件描述符,通过这个文件描述符可以读取或写入文件。
2、read:用于从文件中读取数据,read函数的原型如下:ssize_t read(int fd, void* buf , size_t count);fd:文件描述符buf:存放读取到的数据的缓冲区count:表示期望读取多少字节数据read函数返回实际读取的字节数,当返回0时表示已到达文件尾。
3、write:用于向文件写入数据,write函数的原型如下:ssize_t write(int fd, const void* buf, size_t count);fd:文件描述符buf:存放要写入的数据的缓冲区count:表示期望写入多少字节数据write函数返回实际写入的字节数。
4、close:用于关闭文件,close函数的原型如下:int close(int fd);fd:文件描述符close函数返回0表示成功关闭文件。
5、malloc:用于在堆上分配内存,malloc函数的原型如下: void* malloc(size_t size);size:表示分配内存的大小malloc函数返回一个指向分配到的内存的指针,如果malloc函数执行失败,返回一个NULL指针。
6、free:用于释放malloc函数分配的内存,free函数的原型如下:void free(void* ptr);ptr:指向要释放的内存的指针free函数没有返回值。
