c 进程和系统调用

这一篇博客讲解进程和系统调用相关的知识

有这样一个场景,我需要输入一串文字,然后把我输入的文字加上一个本地的时间戳 保存在一个文件中,可以初步理解为一个备忘录也行

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4
 5 /**
 6  *  获取一个当前时间
 7  */
 8 char *now() {
 9     time_t t;
10     time(&t);
11     return asctime(localtime(&t));
12 }
13
14 int main(int argc, const char * argv[]) {
15
16     char comment[80];
17     char cmd[120];
18
19     fgets(comment, 80, stdin);
20     // sprintf 把内容写进一个变量中
21     sprintf(cmd, "echo ‘%s %s‘ >> reports.log",comment,now());
22     // 调用系统的方法来执行这段命令
23     system(cmd);
24     return 0;
25 }

程序运行的结果是生成了一个文件

但有时候systemt() 函数也会是不安全的

sprintf(cmd, "echo ‘‘&& ls / && echo‘ %s‘ >> reports.log",now());

修改上边的代码,然后会得到这样的结果

列出了根目录下的内容,因此可以使用命令删除文件或启动病毒

时间: 2024-11-05 02:05:14

c 进程和系统调用的相关文章

进程隐藏系统调用

一.实验内容 实验3:Linux进程管理及其扩展 1.阅读并分析Linux内核源代码,了解进程控制块.进程队列等数据结构: 2. 实现一个系统调用,使得可以根据指定的参数隐藏进程,使用户无法使用ps或top观察到进程状态.具体要求如下: (1)实现系统调用int hide(pid_t pid, int on),在进程pid有效的前提下,如果on置1,进程被隐藏,用户无法通过ps或top观察到进程状态:如果on置0且此前为隐藏状态,则恢复正常状态. (2)考虑权限问题,只有根用户才能隐藏进程. (

linux strace-跟踪进程的系统调用或是信号产生情况,lstrace-跟踪己丑年调用库函数情况,进程跟踪调试命令

本工具可以用来做大多数排除,比如mount一个NFS,很慢,找不出原因,我们可以使用strace命令来跟中mount这个经常所有的调用过程. strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. strace 显示这些调用的参数并返回符号形式的值.strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核. 下面记录几个常用 option . 1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程 2 -o xxx.txt 输出到某个文件.

9.11 strace:跟踪进程的系统调用 、ltrace:跟踪进程调用库函数

strace 是Linux环境下的一款程序调试工具,用于检查一个应用程序所使用的系统调用以及它所接收的系统信息.strace会追踪程序运行时的整个生命周期,输出每一个系统调用的名字.参数.返回值和执行所消耗的时间等,是高级运维和开发人员排查问题的杀手铜. strace命令的参数选项及说明 -c 统计每一个系统调用所执行的时间.次数和出错的次数等 -d 输出strace关于标准错误的调试信息 -f 跟踪目标进程,以及目标进程创建的所有子进程 -ff 如果提供-o filename,则将所有进程的跟

一、进程与信号之进程相关系统调用

进程调用函数wait(),waitpid() #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status) //等待所有子进程,返回任一终止子进程的状态,阻塞方式 pid_t waitpid(pid_t pid,int *status,int options) //指定子进程pid等待终止返回,option设置是否阻塞 status参数 为空时,代表任意状态结束的子进程,若不为空,则代表指定状态结束的子进程

用户态、核心态详解及进程切换和系统调用原理

1)示例 void testfork() { if(0 = = fork()) { printf("create new process success!\n"); } printf("testfork ok\n"); } 这段代码很简单,从功能的角度来看,就是实际执行了一个fork(),生成一个新的进程,从逻辑的角度看,就是判断了如果fork()返回的是则打印相关语句,然后函数最后再打印一句表示执行完整个testfork()函数.代码的行逻辑和功能上看就是如此简单

一、进程与信号之中断系统调用

进程“慢”系统调用,如果发生了信号,内核会重启系统调用 慢系统调用: 可能会永远阻塞的系统调用 从终端设备,管道,或者网络设备上的文件读取 向上述文件写入 某些设备上的文件打开 pause和wait系统调用 一些设备ioctl操作 一些进程间通信函数 系统中断调用信号处理函数重新执行 #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <signal.h> void set_

进程相关命令的使用

ps, top, htop,  vmstat, dstat,pstree,pidof, pgrep 在htop默认没有添加字段的情况下. ps top htop 常驻内存 rss,  rsz,  rssize 线性内存 vsz,  vsize VIRT VIRT 进程占用CPU %cpu %CPU CPU% 进程状态 state,  S S S 物理内存使用 %mem,RES MEM%,  RES 共享内享 SHR SHR 进程已使用CPU时长 time,  cputime TIME+ TIME

进程查看及命令使用-htop/dstat/top/ps命令

进程是linux用来表示正在运行的程序的一种抽象概念,程序内存的使用,处理器时间和I/O资源就是通过这个对象进行管理和监视的. 一个程序要先运行在用户空间,当他需要去使用硬件资源的时候,就不得不去调动内核才能取得使用权,这时候调动内核,进入内核空间,当内核处理完毕需求之后,将指令返回给用户,一个调用完成. 进程会以时间片段在CPU运行的,CPU以一根时间线被划分成无数个片段:当一个进程运行到某个阶段,需要暂时终止的时候,需要保存一个进程运行的现场,叫保存现场:执行到某片段的时候,需要中断,当再需

进程管理

一.进程 1.概念 内核的功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能等 Process: 运行中的程序的一个副本,是被载入内存的一个指令集合 进程ID(Process ID,PID)号码被用来标记各个进程 UID.GID.和SELinux语境决定对文件系统的存取和访问权限, 通常从执行进程的用户来继承 存在生命周期 task struct:Linux内核存储进程信息的数据结构格式 task list:多个任务的的taskstruct组成的链表 进程创建: init:第一个进