linux c语言 shell,Linux Shell命令的C语言实现

在此记录一些关于Linux Shell命令的C语言实现的函数和实例 :

/*****************************************************

* Author: Robin

* Mail: liuyalong.email@gmail.com

* Description:

* Linux shell 命令的c语言实现

******************************************************

* 获取环境变量函数————getenv()

* NAME

* getenv - get an environment variabl

*

* SYNOPSIS

* #include

*

* char *getenv(const char *name);

******************************************************

*获取当前工作路径函数————getcwd, getwd, get_current_dir_name

*NAME

* getcwd, getwd, get_current_dir_name - Get current working directory

*SYNOPSIS

* #include

* char *getcwd(char *buf, size_t size);

* char *getwd(char *buf);

* char *get_current_dir_name(void);

******************************************************/

#include

#include

#include

#include

#ifndef MAXPATHLEN

#define MAXPATHLEN 1024

#endif

char *getcwd (char *buf, size_t len)

{

char ourbuf[MAXPATHLEN];

char *result;

result = (char*)getwd (ourbuf);

if (result) {

if (strlen (ourbuf) >= len) {

errno = ERANGE;

return 0;

}

if (!buf) {

buf = (char*)malloc(len);

if (!buf) {

errno = ENOMEM;

return 0;

}

}

strcpy (buf, ourbuf);

}

return buf;

}

int main(int argc, char** argv, char** envp){

char *home;

char *dir;

char buf[1024];

puts((char*)getenv("PATH"));

home = (char*)getenv("HOME");

puts(home);

dir = (char*)getcwd(buf, sizeof(buf));

puts(dir);

puts((char*)get_current_dir_name());

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 中使用 C 语言实现 shell 命令 <> 的重定向,可以使用 dup2() 函数来实现。dup2() 函数可以将一个文件描述符的内容复制到另一个文件描述符中,从而实现文件重定向。 下面是一个简单的示例程序,可以实现 “<” 和 “>” 的文件重定向功能: ```c #include <stdio.h> #include <unistd.h> #include <fcntl.h> int main(int argc, char *argv[]) { int in_fd, out_fd; char *in_file, *out_file, *cmd; if (argc != 4) { fprintf(stderr, "Usage: %s <input_file> <output_file> <command>\n", argv[0]); return 1; } in_file = argv[1]; out_file = argv[2]; cmd = argv[3]; // 打开输入文件 in_fd = open(in_file, O_RDONLY); if (in_fd == -1) { perror("open input file"); return 2; } // 打开输出文件 out_fd = open(out_file, O_CREAT|O_WRONLY|O_TRUNC, 0644); if (out_fd == -1) { perror("open output file"); return 2; } // 将输入文件重定向到标准输入 if (dup2(in_fd, STDIN_FILENO) == -1) { perror("dup2 input file"); return 3; } // 将输出文件重定向到标准输出 if (dup2(out_fd, STDOUT_FILENO) == -1) { perror("dup2 output file"); return 3; } // 执行命令 if (system(cmd) == -1) { perror("system command"); return 4; } // 关闭文件 close(in_fd); close(out_fd); return 0; } ``` 在上面的程序中,我们首先打开输入文件和输出文件,并将它们分别重定向到标准输入和标准输出。然后执行传入的命令命令的输出将被重定向到输出文件中。最后关闭文件描述符。 使用该程序可以实现以下命令的效果: ```bash $ ./redirect input.txt output.txt wc -l ``` 该命令会将输入文件 input.txt 的内容通过 “<” 重定向到 wc 命令的标准输入中,将 wc 的输出通过 “>” 重定向到 output.txt 文件中。最后输出文件 output.txt 中行数的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值