当前位置:网站首页 > Lua脚本开发 > 正文

linux怎么学写脚本(linux如何写一个脚本)



Linux | 红帽认证 | IT技术 | 运维工程师

👇1000人技术交流 备注【公众号】更快通过

evec

包含的头文件:

#include <unistd.h>:这个头文件包含了POSIX操作系统API的函数原型,如文件操作、进程控制、目录操作等。在这里,它主要是为了使用exec系列的函数。

外部变量:

extern char environ;:这行代码声明了一个外部变量environ,它是一个指向字符指针数组的指针。这个数组包含了当前进程的环境变量,每个元素都是一个指向以null结尾的字符串的指针。这个数组以NULL结尾。

函数原型:

代码中列出了多个exec系列的函数原型,但有一些拼写错误和格式问题。正确的函数名和参数应该如下:注意:

int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execle(const char *path, const char *arg, ..., char *const envp[]);int execv(const char *path, char *const argv[]);int execvp(const char *file, char *const argv[]);int execvpe(const char *file, char *const argv[], char *const envp[]);int execve(const char *filename, char *const argv[], char *const envp[]);

exel应为execl。

exele应为execle,且参数列表中的逗号使用有误,应去掉多余的逗号。

execv和execvp的函数原型在图片中基本正确,但execvp的参数列表中的逗号位置不影响其意义,只是格式上的小瑕疵。

execvpe和execve的函数原型在图片中同样存在格式上的问题,主要是多余的逗号,但核心意思正确。

NULL指针:

代码中提到了NULL,但在给出的文本中,NULL被误写为NOLL。在C语言中,NULL用于表示空指针。

函数功能:

这些exec系列的函数都用于在当前进程中执行一个新的程序。它们会替换当前进程的地址空间(代码、数据、堆栈等)为新程序的地址空间。

不同的exec函数提供了不同的方式来指定要执行的程序、传递命令行参数以及设置环境变量。

int execl(const char *path, const char *arg, ...);execl函数使用给定的路径名path来执行一个程序。第二个参数arg是传递给新程序的第一个命令行参数(通常是程序的名称)。后续参数是可变数量的命令行参数,列表必须以NULL结尾。
int execlp(const char *file, const char *arg, ...);execlp函数类似于execl,但它使用PATH环境变量来查找要执行的程序。file参数是程序名,而不是路径名。其余参数与execl相同。
int execle(const char *path, const char *arg, ..., char *const envp[]);execle函数与execl类似,但它允许用户指定一个新的环境变量数组envp。envp是一个以NULL结尾的字符指针数组,每个元素都是一个指向环境变量的指针。其余参数与execl相同。
int execv(const char *path, char *const argv[]);execv函数使用给定的路径名path来执行一个程序。argv是一个指向以NULL结尾的字符指针数组的指针,该数组包含要传递给新程序的命令行参数。argv[0]通常是程序的名称。
int execvp(const char *file, char *const argv[]);execvp函数类似于execv,但它使用PATH环境变量来查找要执行的程序。file参数是程序名,而不是路径名。argv参数与execv相同。
int execvpe(const char *file, char *const argv[], char *const envp[]);execvpe函数结合了execvp和execle的特点。它使用PATH环境变量来查找要执行的程序,并允许用户指定一个新的环境变量数组envp。file和argv参数与execvp相同,envp参数与execle相同。
int execve(const char *filename, char *const argv[], char *const envp[]);execve函数是最通用和最强大的exec函数。它允许用户直接指定要执行的文件的名称filename、命令行参数数组argv和环境变量数组envp。filename可以是绝对路径或相对路径。

fork

fork是Linux系统中的一个非常重要的系统调用,它用于创建一个新的进程。以下是关于fork命令的详细分析:

一、fork的基本功能

fork函数通过系统调用创建一个与原来进程几乎完全相同的进程,新创建的进程被称为子进程,而原进程被称为父进程。子进程会继承父进程的资源,包括代码、数据、堆栈、文件描述符、内存映射、信号处理等,但每个进程都会拥有自己独立的地址空间和堆栈。

二、fork的返回值

在父进程中,fork函数返回新创建的子进程的进程ID(PID)

在子进程中,fork函数返回0。

如果创建进程失败,fork函数返回-1,并设置相应的errno值以指示错误类型。

三、fork的执行流程

当调用fork函数时,操作系统会为新的子进程分配资源,包括存储数据和代码的空间。

操作系统会把父进程的所有值都复制到新的子进程中,但某些值(如进程ID、父进程ID、返回地址等)在子进程中会被设置为新的值。

fork函数会返回两次:一次在父进程中返回子进程的PID,一次在子进程中返回0。因此,在调用fork函数后,需要判断返回值以确定当前是在父进程还是子进程中。

四、fork后的进程状态

父进程和子进程是并发执行的,它们的执行顺序是不确定的,这取决于操作系统的进程调度策略。

父进程和子进程之间的内存空间是独立的,它们不能直接共享变量和数据。如果需要在父子进程之间共享数据,可以使用共享内存、管道、消息队列等进程间通信(IPC)机制。

子进程会继承父进程的文件锁、信号处理器等状态,但也可以独立地修改这些状态。

总结

简而言之,fork 函数用于创建一个新进程,该进程是调用进程的副本(子进程)。子进程会继承父进程的资源,但拥有独立的地址空间和堆栈。而 exec 系列函数则用于在当前进程中执行新程序,替换其地址空间。这些函数为开发者提供了进程控制和程序执行的灵活性。通过 fork 和 exec,开发者可以实现多进程编程,提高程序的并发性和响应速度。同时,需要注意这些函数的返回值和执行流程,以及进程间的独立性和通信机制。


课程咨询添加:HCIE666CCIE

↑或者扫描上方二维码↑


你有什么想看的技术点和内容

可以在下方留言告诉小盟哦!

到此这篇linux怎么学写脚本(linux如何写一个脚本)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • autoit不能打开脚本文件(auto怎么不能运行脚本)2025-01-05 19:27:05
  • Web应用开发框架-koa(二)——koa原生路由 & koa-route模块 & koa-static模块请求静态资源之图片、字体、样式表、脚本 & koa路由重定向2025-01-05 19:27:05
  • 微信QQ消息轰炸vbs脚本2025-01-05 19:27:05
  • 91免费视频Redis+Lua解决高并发场景在线秒杀问题2025-01-05 19:27:05
  • 91免费视频Redis+Lua解决高并发场景在线秒杀问题2025-01-05 19:27:05
  • 91免费视频Redis+Lua解决高并发场景在线秒杀问题2025-01-05 19:27:05
  • Nginx实战:LUA脚本_环境配置安装_lua+nginx2025-01-05 19:27:05
  • Lua脚本编程基础2025-01-05 19:27:05
  • lua游戏开发教程_lua脚本是什么2025-01-05 19:27:05
  • 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!2025-01-05 19:27:05
  • 全屏图片