一个简单的模拟shell的程序

#include<stdio.h>
#include<sys/stat.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
#include<stdlib.h>

#define MAXLINE 1024

int main()
{
    char buf[MAXLINE];
    pid_t pid;
    int status;
    printf("%%");
    while( fgets(buf, MAXLINE, stdin) != NULL )
    {
        if(buf[strlen(buf)-1] == '\n')
            buf[strlen(buf)-1] = 0;
        
        if( (pid = fork()) < 0)
        {
            printf("fork error\n");
            return;
        }
        else if(pid == 0)
        {
            execlp(buf, buf, (char *)0);
            printf("couldn't execute: %s\n", buf);
            return;
        }
        //pid = waitpid(pid, &status, 0);
        if( (pid = waitpid(pid, &status, 0)) < 0)
        {
            printf("waitpid error\n");
            exit(0);
        }
        else
        {
            printf("finish status: %d\n", pid);
        }
        printf("%%");
    }
    return 0;
}

子进程调用execlp函数执行从输入得到的命令(不能含有空格的命令),fork和execlp的组合是某些操作系统所称的产生一个新进程.

子进程调用execlp执行新文件,而父进程希望子进程终止,用waitpid实现,参数pid为要等待的进程.其返回值为pid进程的终止状态(status变量)

运行结果:

ustcqi@ubuntu:~/workplace/linux/APUE/Demo1$ gcc -o fork fork.c
ustcqi@ubuntu:~/workplace/linux/APUE/Demo1$ ./fork
%date
2012年 11月 21日 星期三 16:14:19 CST
finish status: 7058
%ls
fork  fork.c  fork.c~  getPID  getPID.c  getPID.c~
finish status: 7059
%pwd
/home/ustcqi/workplace/linux/APUE/Demo1
finish status: 7060
%dir
fork  fork.c  fork.c~  getPID  getPID.c  getPID.c~
finish status: 7061
%ustcqi@ubuntu:~/workplace/linux/APUE/Demo1$ gedit fork.c
ustcqi@ubuntu:~/workplace/linux/APUE/Demo1$


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 考勤模拟shell程序设计是一个模拟员工考勤的程序,可以记录员工的上班时间、下班时间和迟到早退情况。这个程序可以通过shell脚本编写实现,主要包括以下几个步骤: 1. 定义员工信息:包括员工姓名、工号、部门等信息。 2. 定义考勤记录:包括上班时间、下班时间、迟到早退情况等信息。 3. 编写脚本实现考勤记录的添加、修改、查询和删除等功能。 4. 设计考勤统计功能,可以统计每个员工的出勤情况,包括迟到早退次数、出勤天数等。 5. 设计考勤报表功能,可以生成每个员工的考勤报表,包括出勤情况、迟到早退情况、加班情况等。 通过以上步骤,可以实现一个简单的考勤模拟程序,方便管理员工的考勤情况,提高企业的管理效率。 ### 回答2: 考勤模拟shell程序设计,主要是需要实现一个可以模拟考勤系统的程序,包括考勤打卡、签到、签退、考勤统计等功能。 首先,需要设计一个用户管理系统,可以通过该系统管理所有的用户信息,包括用户名、密码、工号、邮箱、部门等信息。这个系统需要实现用户的登录和注册功能,以及用户信息的更新和删除。 接着,需要实现考勤打卡的功能。考勤打卡可以包括签到和签退两个功能,每个用户每天需要进行签到和签退操作,每次操作需要记录时间和地点。在签到或签退的时候,需要判断用户是否已经进行了上一次相应的操作,以及上一次操作是否在规定的时间内,如果不符合要求,则不能进行签到或签退操作。 最后,需要实现考勤统计的功能。考勤统计可以包括个人考勤统计和部门考勤统计两个功能。个人考勤统计可以根据用户名或工号查询某个用户的考勤记录,可以统计该用户的迟到、早退、缺勤等情况。部门考勤统计可以根据部门信息查询某个部门内所有用户的考勤记录,可以统计部门内所有用户的迟到、早退、缺勤等情况,并计算出部门的考勤率和异常情况。 整个考勤模拟shell程序的设计需要遵循一定的软件工程原则,包括模块化设计、信息隐藏、异常处理等。同时,需要考虑安全性和可靠性,保证用户信息的安全和考勤记录的准确性。 ### 回答3: 考勤是每个单位和学校都必须要进行的一项管理任务,通过对员工或学生的出勤情况进行统计和分析,能够更好地进行管理和评估。而针对考勤的管理需求,可以设计一个考勤模拟shell程序,以便更好地实现考勤的管理。 首先,考勤模拟shell程序可以设置一个考勤表格,其包括员工或学生的姓名、工号或学号、考勤日期等字段。在该表格,可以通过查找特定日期,来了解每个员工或学生当天的出勤状况。同时,还可以记录员工的请假情况,例如病假、事假或年假等。 其次,在程序设计,需要实现员工或学生自己进行考勤的功能。可以设置一个考勤打卡的模块,员工或学生可以通过该模块进行签到或签退操作。这个模块可以设置一个倒计时,例如每天上班前30分钟开始倒计时,到上班时间时自动关闭。并且,该模块还可以进行GPS定位,以防出现员工或学生代打卡的情况。 除此之外,还可以添加一个消息推送功能,用来提醒员工或学生考勤的时间和地点,以及提醒员工或学生请假的手续和要求。 最后,考勤模拟shell程序还应该包括检查考勤数据的功能。通过该功能,可以检查考勤数据的准确性和完整性,如缺失的数据、异常的数据,以便及时处理。 总之,考勤模拟shell程序可以更好地实现单位和学校对员工或学生的考勤管理,提高管理效率和管理水平。同时,该程序还可以进行扩展,例如加入考勤统计、考勤报表等功能,以便更好地展示考勤数据和情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值