method 1:
#include <stdio.h>
#include <stdlib.h>
int main(int argc,const char **argv)
{
// system("ls -al /Users/rengar/Desktop/C/shell/1.text");
FILE *fp;
char buffer[1000];
fp=fopen("ls /Users/rengar/Desktop/C/shell","r+");
fgets(buffer,sizeof(buffer),fp);
printf("%s",buffer);
pclose(fp);
}
method 2:管道,但是忽视了信号的处理
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int system(const char *cmdstring) /* version without signal handling */
{
pid_t pid;
int status;
if (cmdstring == NULL)
return(1); /* always a command processor with UNIX */
if ((pid = fork()) < 0) {
status = -1; /* probably out of processes */
} else if (pid == 0) { /* child */
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
_exit(127); /* execl error */
} else { /* parent */
while (waitpid(pid, &status, 0) < 0) {
if (errno != EINTR) {
status = -1; /* error other than EINTR from waitpid() */
break;
}
}
}
return(status);
}
void test_system()
{
int status;
char *cmdstr = "date";
if ((status = system(cmdstr)) < 0) {
perror("system error");
return;
}
}
void test_system1()
{
int status;
char *cmdstr = "ps -ajx";
if ((status = system(cmdstr)) < 0) {
perror("system error");
return;
}
}
int main()
{
test_system();
sleep(3);
test_system1();
}
博客内容涉及C语言编程,主要讨论了两种方法执行系统命令:一是使用`fopen`和`fgets`直接读取文件,二是通过`fork`和`execl`实现进程间的通信。示例中展示了如何执行`ls`和`date`等命令,并提醒在使用管道时应注意信号处理。
2585

被折叠的 条评论
为什么被折叠?



