day28 文件IO及进程线程基础

day25+day26+day27+day28 进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行程序的实例,包括程序计数器、寄存器和程序变量的当前值。简单来说。 阅读详情

讨论光标共享情况

1.dup和dup2定义变量赋值都共享光标

2.使用两个描述符调用两次open函数打开同一个文件,不共享光标

#include <myhead.h>

int main(int argc, const char *argv[])
{
    //1、描述符赋值给新的变量
    char buff[1024] = "abcdefg";
    int newfd;
    int fd1 = open("./1.txt",O_RDWR);
    if(fd1==-1)
    {
        perror("open");
        return -1;
    }
    write(fd1,buff,sizeof(buff));
    newfd = fd1;//新的变量当作描述符被赋值
    lseek(newfd,3,SEEK_SET);//从文件开头移动3个字节
    read(fd1,buff,sizeof(buff));
    printf("%s\n",buff);

    memset(buff,0,sizeof(buff));//清空buff
    //2、两个描述符指向同一个文件
    char str[100] = "";
    int fd3,fd4;
    fd3 = open("./2.txt",O_RDWR);
    if(fd3==-1)
    {
        perror("open");
        return -1;
    }
    fd4 = open("./2.txt",O_RDWR);
    if(fd4==-1)
    {
        perror("open");
        return -1;
    }
    lseek(fd3,3,SEEK_SET);//fd3从文件开头移动3个字节
    read(fd4,str,sizeof(str));//读取fd4的光标
    printf("%s",str);//输出

    return 0;
}

stat

 #include <sys/types.h>
       #include <sys/stat.h>
       #include <unistd.h>

       int stat(const char *pathname, struct stat *statbuf);
    功能:获取文件的详细信息
    参数1:文件路径和文件名
    参数2:获取到的文件信息存储地址。
    struct stat {
               dev_t     st_dev;         /* 设备号 */
               ino_t     st_ino;         /* Inode号 */
               mode_t    st_mode;        /*文件类型和权限 */
               nlink_t   st_nlink;       /* 硬链接数 */
               uid_t     st_uid;         /* 所有者ID */
               gid_t     st_gid;         /* 所有者组ID */
               dev_t     st_rdev;        /* 特殊文件的设备号 */
               off_t     st_size;        /* 最大容量按照字节存储 */
               blksize_t st_blksize;     /* 每一块大小,按照字节 */
               blkcnt_t  st_blocks;      /* 块的数量 */
        返回值:成功返回0,失败返回-1,并置位错误码。
#include <myhead.h>

int main(int argc, const char *argv[])
{
    struct stat sb;
    int res = stat("./09.c",&sb);//文件的信息存入sb结构体变量
    if(res==-1)
    {
        perror("stat");
        return -1;
    }
    switch (sb.st_mode & S_IFMT) {
           case S_IFBLK:  printf("block device\n");            break;
           case S_IFCHR:  printf("character device\n");        break;
           case S_IFDIR:  printf("directory\n");               break;
           case S_IFIFO:  printf("FIFO/pipe\n");               break;
           case S_IFLNK:  printf("symlink\n");                 break;
           case S_IFREG:  printf("regular file\n");            break;
           case S_IFSOCK: printf("socket\n");                  break;
           default:       printf("unknown?\n");                break;
           }    
    return 0;
}

opendir和closedir

 #include <sys/types.h>
       #include <dirent.h>

       DIR *opendir(const char *name);
       功能:打开文件目录,返回指向目录的指针。
       参数:目录路径和名字
       返回值:成功返回打开的目录指针,失败返回NULL,并置位错误码。
       int closedir(DIR *dirp);
        功能:关闭文件目录指针指向的文件。
        参数:opendir返回的指针。
        返回值:成功返回0,失败返回-1,并置位错误码。

readdir

  #include <dirent.h>
    struct dirent *readdir(DIR *dirp);
    功能:读取目录里面的所有文件或者文件夹信息
    参数:目录指针
    返回值:成功返回目录指针指向的文件信息结构体,失败返回NULL,并置位错误码。
     struct dirent {
               ino_t          d_ino;       /* Inode number */
               off_t          d_off;       /* Not an offset; see below */
               unsigned short d_reclen;    /* Length of this record */
               unsigned char  d_type;      /* Type of file; not supported
                                              by all filesystem types */
               char           d_name[256]; /* Null-terminated filename */
           };
#include <myhead.h>

int main(int argc, const char *argv[])
{
    DIR *dir = opendir("/home/ubuntu/24101/IO/IO-1/");//打开一个文件夹
    if(dir==NULL)
    {
        perror("opendir");
        return -1;
    }
    while(1)
    {
        struct dirent *hangzhou = readdir(dir);//读取文件夹的内容
        if(hangzhou==NULL)
        {
            perror("readdir");
            return -1;
        }
        printf("文件名:%s\n",hangzhou->d_name);
        switch(hangzhou->d_type)//输出文件的类型
        {
            case DT_BLK:
            printf("块设备文件\n");
            break;
            case DT_CHR:
            printf("字符设备文件\n");
            break;
            case DT_DIR:
            printf("目录文件\n");
            break;
            case DT_FIFO:
            printf("管道文件\n");
            break;
            case DT_REG:
            printf("普通文件\n");
            break;
        }
    }
    closedir(dir);//关闭文件夹    
    return 0;
}

进程(process)

程序的一次执行过程就是进程

1、进程概念:

时间片轮询 上下文切换。

1、进程1在3ms时间内运行结束,那么cpu会将进程1出队,继续询问进程2.

2、进程1需要8ms才能结束,那么cpu会在第5ms时将进程1,放入就绪队列尾部

3、进程1正好5ms运行结束cpu将进程1出队。

4、如果有外部优先级更高的事件打断进程1,进程1也会进入就绪队列等待。例如IO

2、进程内存管理

1、进程在创建时系统会从1G的物理内存中,通过mmu映射出4G的虚拟内存,其中0--3G的内存是所有进程的空间,进程间空间是独立的,但是3--4G的空间是内核空间,由所有进程共享。

2、注意在32位的操作系统中,1G物理内存映射出来4G虚拟内存,在64位的操作系统中,1G物理内存映射出来256T虚拟内存。

3、进程之间并不能直接进程数据交换,但是可以通过内核空间实现数据交换也就是进程间通信。

3、进程和程序区别

1、进程是动态的,随着程序的执行而创建,随着程序的结束而消亡。

2、程序是存储在内存的二进制文件,进程消亡程序并不会消失。

3、进程是动态,程序是静态。

4、进程种类

Linux系统中进程种类可以为三种:

1、交互进程,如vi编辑器,实现用户和主机之间的交流。

2、批处理进程,如gcc编译器的一步到位的编译,批处理进程将所有进程放入就绪队列,一次性全部运行结束。

3、守护进程,不受用户控制,不依赖于终端,随着系统的开启而开启,随着系统的关闭而消亡。

5、进程号

pid(process ID):当前进程的进程号。

ppid(parent process ID):父进程号。

每一个子进程都不会凭空产生,都由父进程创建而生(除了守护进程等伴随操作系统的特殊进程),

每一个子进程和其父进程都有自己的ID号,也就是进程号。

进入到该文件下:cd /proc/

可以查看操作系统中所有的进程号。

6、Linux下5个特殊进程

1、0号进程,又叫idel进程没有父进程,系统启动时创建的,维护系统运行,当系统内没有任何进程需要执行时运行0号进程,系统处于待机状态。

2、1号进程,又叫 init进程父进程就是0号进程,也被称为守护进程,当有子进程处于僵尸状态时,1号进程会为子进程收尸。

3、2号进程,又称为kthreadd进程,是调度进程,完成任务器各项任务的调度工作。

4、僵尸进程:父进程还在运行,但是子进程已经消亡,而父进程并没有回收子进程的资源,这时子进程就被称为僵尸进程。

5、孤儿进程:父进程已经消亡,但是子进程还在运行,此时子进程就被称为孤儿进程。

7、进程的shell指令(ps top kill pidof)

1、查看进程状态:ps -ajx

 PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
     0      1      1      1 ?            -1 Ss       0   0:03 /sbin/init splash
     0      2      0      0 ?            -1 S        0   0:00 [kthreadd]
     2      3      0      0 ?            -1 I<       0   0:00 [rcu_gp]
     2      4      0      0 ?            -1 I<       0   0:00 [rcu_par_gp]
     2      5      0      0 ?            -1 I        0   0:00 [kworker/0:0-cgr]
     2      6      0      0 ?            -1 I<       0   0:00 [kworker/0:0H-kb]
     2      8      0      0 ?            -1 I<       0   0:00 [mm_percpu_wq]
     2      9      0      0 ?            -1 S        0   0:00 [ksoftirqd/0]
     2     10      0      0 ?            -1 I        0   0:02 [rcu_sched]
     2     11      0      0 ?            -1 S        0   0:00 [migration/0]
     2     12      0      0 ?            -1 S        0   0:00 [idle_inject/0]
     2     14      0      0 ?            -1 S        0   0:00 [cpuhp/0]
     2     15      0      0 ?            -1 S        0   0:00 [kdevtmpfs]
     2     16      0      0 ?            -1 I<       0   0:00 [netns]
     2     17      0      0 ?            -1 S        0   0:00 [rcu_tasks_kthre]
PPID:父进程进程号
PID:当前进程的进程号
PGID:当前进程组的进程号
TTY:如果是?表示不依赖于任何终端而运行。
STAT:进程的状态(S:可中断的休眠态,+:前台运行状态)
TIME:进程执行的时间
COMMAND:进程的名称。

2、查看进程的CPU占用率 ps -aux

ubuntu@ubuntu:proc$ ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 159804  7232 ?        Ss   10:23   0:03 /sbin/init splash
root          2  0.0  0.0      0     0 ?        S    10:23   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        I<   10:23   0:00 [rcu_gp]
root          4  0.0  0.0      0     0 ?        I<   10:23   0:00 [rcu_par_gp]
root          5  0.0  0.0      0     0 ?        I    10:23   0:00 [kworker/0:0-cgr]
root          6  0.0  0.0      0     0 ?        I<   10:23   0:00 [kworker/0:0H-kb]
root          8  0.0  0.0      0     0 ?        I<   10:23   0:00 [mm_percpu_wq]
root          9  0.0  0.0      0     0 ?        S    10:23   0:00 [ksoftirqd/0]
root         10  0.0  0.0      0     0 ?        I    10:23   0:02 [rcu_sched]
root         11  0.0  0.0      0     0 ?        S    10:23   0:00 [migration/0]
root         12  0.0  0.0      0     0 ?        S    10:23   0:00 [idle_inject/0]
root         14  0.0  0.0      0     0 ?        S    10:23   0:00 [cpuhp/0]
root         15  0.0  0.0      0     0 ?        S    10:23   0:00 [kdevtmpfs]
root         16  0.0  0.0      0     0 ?        I<   10:23   0:00 [netns]
USER :当前用户
%CPU:CPU占用率
%MEM:内存占用率
START:创建时间

3、进程之间的树状关系 pstree

ubuntu@ubuntu:proc$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager─┬─2*[dhclient]
        │                └─2*[{NetworkManager}]
        ├─VGAuthService
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─acpid
        ├─avahi-daemon───avahi-daemon
        ├─bluetoothd

4、查看进程间的关系 ps -ef

ubuntu@ubuntu:proc$ ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 10:23 ?        00:00:03 /sbin/init splash
root          2      0  0 10:23 ?        00:00:00 [kthreadd]
root          3      2  0 10:23 ?        00:00:00 [rcu_gp]
root          4      2  0 10:23 ?        00:00:00 [rcu_par_gp]
root          5      2  0 10:23 ?        00:00:00 [kworker/0:0-cgr]
root          6      2  0 10:23 ?        00:00:00 [kworker/0:0H-kb]
root          8      2  0 10:23 ?        00:00:00 [mm_percpu_wq]
root          9      2  0 10:23 ?        00:00:00 [ksoftirqd/0]
root         10      2  0 10:23 ?        00:00:02 [rcu_sched]
root         11      2  0 10:23 ?        00:00:00 [migration/0]

5、动态查看进程的状态 top

top - 14:13:35 up  3:50,  1 user,  load average: 0.00, 0.01, 0.00
任务: 315 total,   1 running, 248 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.1 us,  2.1 sy,  0.0 ni, 95.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1987060 total,   130112 free,  1469492 used,   387456 buff/cache
KiB Swap:   969960 total,   874984 free,    94976 used.   331056 avail Mem 

进程 USER      PR  NI    VIRT    RES    SHR � %CPU %MEM     TIME+ COMMAND                                                                                
  1649 ubuntu    20   0  600048 102164  28996 S  3.0  5.1   0:47.74 Xorg                                                                                   
  1846 ubuntu    20   0 3041844 156168  41260 S  2.0  7.9   0:59.59 gnome-shell                                                                            
  2255 ubuntu    20   0  922236  75776  33960 S  1.7  3.8   0:38.26 x-terminal-emul                                                                        
    10 root      20   0       0      0      0 I  0.3  0.0   0:02.19 rcu_sched                                                                              
   647 avahi     20   0   47408   3244   2836 S  0.3  0.2   0:06.59 avahi-daemon                                                                           
  3455 root      20   0       0      0      0 I  0.3  0.0   0:08.05 kworker/0:2-eve                                                                        
     1 root      20   0  159804   7232   5244 S  0.0  0.4   0:03.49 systemd                                                                                
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                               
     3 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 rcu_gp                                                                                 
     4 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 rcu_par_gp                                                                             
     5 root      20   0       0      0      0 I  0.0  0.0   0:00.02 kworker/0:0-cgr                                                                        
     6 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 kworker/0:0H-kb                                                                        
     8 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 mm_percpu_wq                                                                           
     9 root      20   0       0      0      0 S  0.0  0.0   0:00.27 ksoftirqd/0                                                                            
    11 root      rt   0       0      0      0 S  0.0  0.0   0:00.09 migration/0                                                                            
    12 root     -51   0       0      0      0 S  0.0  0.0   0:00.00 idle_inject/0

8、向进程发送信号指令 kill

发送信号:kill -信号号 进程ID

8、进程状态和切换

1、进程创建后进入就绪队列

2、通过CPU的时间片轮询,处于运行态

3、如果被外部事件如IO,中断,会处于阻塞状态。

4、解除阻塞状态后,会重新进入到就绪队列。

5、直至运行结束处于消亡态。

9.进程的创建

fork函数

 #include <sys/types.h>
       #include <unistd.h>

       pid_t fork(void);
        功能:创建子进程,子父进程空间独立,在父进程中返回值时子进程的ID,在子进
        程中返回值是0,创建子进程失败返回-1.
        参数:无
        返回值:在父进程中返回值时子进程的ID,在子进程中返回值是0,创建子
        进程失败返回-1。

创建子进程

#include <myhead.h>

int main(int argc, const char *argv[])
{
    pid_t  pid = fork();//创建子进程
    if(pid==0)//进入到子进程执行流
    {
        //子进程执行流
        printf("我是子进程\n");
    }
    else if(pid>0)//进入到父进程执行流
    {
        //进入到父进程执行流
        sleep(1);
        printf("我是父进程\n");
        printf("父进程中子进程的ID:%d\n",pid);
    }
    else
    {
        perror("fork");
        return -1;
    }
    printf("*************\n");//子父进程都会执行这行代码
    while(1);
    return 0;
}

写时拷贝技术

1、写时拷贝技术,当创建子进程后,子父进程空间在发生数据写操作时就独立。

2、子进程中对局部变量的操作不会影响到父进程,父进程中对局部变量的操作不会影响到子进程。

3、进程之间数据不共享。

1、讨论子父进程是否共享全局变量

fork之后子父进程独立运行,子进程拷贝了父进程的资源,所以子进程修改变量,不会影响到父进程内的变量。

#include <myhead.h>
int n = 100;
int main(int argc, const char *argv[])
{
    pid_t  pid = fork();//创建子进程
    if(pid==0)//进入到子进程执行流
    {
        //子进程执行流
        n = n+1;
        printf("我是子进程 n= %d\n",n);
    }
    else if(pid>0)//进入到父进程执行流
    {
        //进入到父进程执行流
        sleep(1);
        printf("我是父进程n = %d\n",n);
        printf("父进程中子进程的ID:%d\n",pid);
    }
    else
    {
        perror("fork");
        return -1;
    }
    printf("*************\n");
    while(1);
    return 0;
}

局部变量不会共享

#include <myhead.h>
int main(int argc, const char *argv[])
{
    int n = 100;
    pid_t  pid = fork();//创建子进程
    if(pid==0)//进入到子进程执行流
    {
        //子进程执行流
        n = n+1;
        printf("我是子进程 n= %d\n",n);
    }
    else if(pid>0)//进入到父进程执行流
    {
        //进入到父进程执行流
        sleep(1);
        printf("我是父进程n = %d\n",n);
        printf("父进程中子进程的ID:%d\n",pid);
    }
    else
    {
        perror("fork");
        return -1;
    }
    printf("*************\n");
    while(1);
    return 0;
}

作业

#include <luochen.h>
int main(int argc, const char *argv[])
{
	int fd1= open("./1.txt",O_RDONLY);
	int fd2= open("./2.txt",O_CREAT|O_TRUNC|O_WRONLY,0664);
	int fd3= open("./3.txt",O_RDONLY);
	int fd4= open("./4.txt",O_CREAT|O_TRUNC|O_WRONLY,0664);
	pid_t pid = fork();
	if(pid==0)
	{
		if(-1==fd1)
		{
			perror("open");
			return -1;
		}
		char buff[1024];
		while(1)
		{
		int res = read(fd1,buff,sizeof(buff));
		if(res == 0)
		{
		break;
		}
		write(fd2,buff,res);
		}
	}
	if(pid>0)
	{
		if(-1==fd3)
		{
			perror("open");
			return -1;
		}
		char buff[1024];
		while(1)
		{
			int res = read(fd3,buff,sizeof(buff));
			if(res == 0)
			{
				break;
			}
			write(fd4,buff,res);
		}
	}




	return 0;
}
#include <luochen.h>
int main(int argc, const char *argv[])
{   
	int fd =open("./1.txt",O_RDONLY);
	if(-1==fd)
	{
	perror("open");
	return -1;
	}
	pid_t pid = fork();
	int len = lseek(fd,0,SEEK_END);
	int half = len/2;

	if(pid>0)
	{
	//父进程
	lseek(fd,0,SEEK_SET);
	int fd1 = open("./5.txt",O_CREAT|O_TRUNC|O_WRONLY);
	char *buff = malloc(sizeof(char)*half);
	int res = read(fd,buff,half);
	write(fd1,buff,res);
	close(fd1);
	}
	if(pid == 0)
	{
	//子进程
	lseek (fd,half,SEEK_SET);
	int fd2 = open("./6.txt",O_CREAT|O_TRUNC|O_WRONLY);
	char *buff = malloc(sizeof(char)*(len-half));
	int res = read(fd2,buff,len-half);
	close(fd2);
	}
	close(fd);

	return 0;
}

day27-28 线程 进程 什么是线程(thread)? 线程是执行上下文,它是CPU执行指令流所需的所有信息。 假设你正在读一本书,而你现在想休息一下,但是你希望能够从你停下来的确切位置回来并继续阅读。实现这一目标的一种方法是记下页码,行号和字号。因此,阅读书籍的执行环境就是这三个数字。 如果你有一个室友,并且她使用相同的技术,她可以在你不使用时拿走这本书,并从她停下的地方继续阅读。然后你可以把它拿回来,并从你所在的... 阅读详情

相关推荐

300m半径无人机单兵侦测设备技术详解

300m半径无人机单兵侦测设备凭借其卓越的侦测性能、高效的识别能力、便捷的告警方式以及广泛的应用场景,成为现代军事、安保及应急救援领域的重要装备。300m半径无人机单兵侦测设备,融合了最新的无人机技术、高精度传感技术与实时数据处理技术,为单兵作战、巡逻及侦察任务提供了前所未有的视野与效率。该设备通过无人机搭载的高性能侦测模块,能够在复杂环境中实现300米范围内的精准侦测,大幅提升单兵的战场感知能力和决策效率。设备为被动式探测设备,确保安静安全运行,不暴露目标 设备耗电功率小,可长时间在野外使用。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1120

linux ps 命令参数详解

各参数含义: -a 显示所有终端机下执行的进程,除了阶段作业领导者之外。    a 显示现行终端机下的所有进程,包括其他用户的进程。   -A 显示所有进程。   -c 显示CLS和PRI栏位。    c 列出进程时,显示每个进程真正的指令名称,而不包含路径,参数或常驻服务的标示。   -C<指令名称>  指定执行指令的名称,并列出该指令的进程的状况。   -d  显示所有...

Away_summer的博客 792

matlab内读取文件目录时斜杠和反斜杠的使用

@matlab内读取文件目录时斜杠和反斜杠的使用TOC matlab内读取文件目录时,斜杠和反斜杠的使用 最近被斜杠和反斜杠弄晕了,于是总结了一下,在此和大家分享一下。 代码 clear; clc; close all; I1= imread('..\zs1.jpg'); %和代码文件夹同目录的图片 (纯反斜杠) I2= imread('../zs2/zs2.j...

weixin_44456694的博客 6575

Linux基础概念--进程、子进程、进程组和会话

Linux基础概念--进程、子进程和进程组、会话

jinking01的专栏 3250

QT/C++实现健壮HTTP POST客户端:从基础到异常处理与性能优化

HTTP协议作为客户端与服务器通信的基石,其POST方法在数据提交、API交互等场景中扮演着核心角色。其工作原理基于请求-响应模型,通过封装TCP连接与协议细节,为应用层提供了简洁的数据传输接口。在C++桌面与嵌入式开发中,直接使用底层Socket实现HTTP不仅复杂且易出错,而利用框架进行高级封装能显著提升开发效率与代码健壮性。QT框架的`QNetworkAccessManager`等组件正是为此设计,它通过信号槽机制提供异步网络编程模型,有效管理连接与协议解析。一个健壮的HTTP客户端需要妥善处理网络波

weixin_29176179的博客 384

寒武纪面试——数字IC,数字逻辑岗

面试过程:面试是电话面试,通话时间大致在40分钟左右!面试体验挺不错的。面试的岗位是数字逻辑工程师。本人双非,拿过一个国一(南京FPGA大赛),一个数学建模省二。

FPGA/MATLAB学习教程/源码/项目合作开发 1377

Linux 命令之 ps -- 显示进程状态/查看进程信息

介绍 ps 命令是“process status”的缩写,ps 命令用于显示当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。 ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。 ps [选项] 常用选项 选项 说明 -a 显示所有终端机下执行的程序,除了阶段作业领导者之外。 a 显示现行终端机下的所有程序,包括其他用

liaowenxiong的博客 4469

linux系统之进程管理

前言 我们拥有操作系统就是为了运行用户程序,程序的运行需要调动进程,因此进程管理就是所有操作系统的心脏。 实际上,进程就是正在执行的程序代码的时事结果。 进程的理解 进程: 进程是静态的文件,是运行中的程序的一个副本,且存在生命周期。 进程状态: 状态 定义 R(TASK_RUNNING) 可执行状态(RUNNING,READY) S(TASK_INTERRUPTIBLE)...

Thorne_lu的博客 3932

Far planner 代码系列(33) 关于real_world_contour和contour_graph

我们知道far planner前部分的流程是这样子的: 对于特定的地图,如下: 我们要从surround_obs_cloud里抽取生成realworld_contour_,如下图所示: 在这时候,每个node的z坐标都是以机器人的高度定的。如图所示: 先去吃饭啦~待会回来在写 ...

博客 763

使用 Python 实现基于 AGA8 GERG - 2008 方程计算掺氢天然气压缩因子的示例代码

AGA8 GERG - 2008 方程是用于计算天然气混合物热力学性质的一种方法,下面是一个使用 Python 实现基于 AGA8 GERG - 2008 方程计算掺氢天然气压缩因子的示例代码。需要注意的是,AGA8 GERG - 2008 方程非常复杂,完整实现需要大量的系数和详细的计算步骤。这里我们简化了部分过程,使用CoolProp库来完成计算,因为CoolProp已经实现了 GERG - 2008 方程。

AI的内部世界的博客 887

大厂面试必问命令!不要再说不了解了!详解+实例!

Linux 面试必备命令 awk

Muti-Agent 3514

基于Dijkstra算法的共享单车调度优化系统设计与实现

根据最新统计数据,全球共享单车市场规模已超过300亿美元,中国作为最大的共享单车市场,日订单量超过5000万次。Dijkstra算法由荷兰计算机科学家Edsger W. Dijkstra于1956年提出,用于解决带权有向图中的单源最短路径问题。本文详细介绍了基于Dijkstra算法的共享单车调度优化系统的设计与实现。本文将详细介绍基于Dijkstra算法的共享单车调度优化系统的设计与实现,采用Java 17、Spring Boot 3.x等最新技术栈。

2201_76125393的博客 619

day28:文件IO和进程线程

关闭文件close、文件IO的读写read和write、光标移动lseek、文件状态获取stat、打开目录opendir、关闭目录closedir、读取目录文件内容readdir、静态库与动态库、进程的概念

wxmchong的博客 70

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IO进程线程->文件IO->day2

IO进程线程

qq_45711204的博客 171

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IO进程线程day5

4.使用三个线程完成:线程1输出字符'A',线程2输出字符'B',线程3输出字符'C',要求输出结果为:ABCABCABCABCABC...3.使用三个线程完成两个文件的拷贝,线程1完成拷贝前一半,线程2完成拷贝后一半,主线程回收两个分支线程的资源。

2203_75782206的博客 816

Day24 3.28 IO进程线程

IO函数 父子进程

kcncoooo的博客 119

Day28 4.04 IO进程线程

管道 信号

kcncoooo的博客 97

嵌入式入门Day28

今天主要学习有关进程的概念以及操作

小破博客 862

Day33 并发编程(三) 线程池进程池,协程

1.进程池和线程池   开进程和开线程都需要消耗资源,只不过线程相比进程耗费的资源较小,但是计算机的硬件是有限制的,我们不能无限制的去开启进程或者线程.进程池和线程池能帮助我们在计算机承受的范围内最大限度的利用计算机 什么是池   在保证计算机硬件安全的情况下最大限度的利用计算机   池其实是降低了程序的运行效率,但是保证了计算机硬件的安全 怎么使用池   我们首先定义一个池...

weixin_30951231的博客 180

io进程线程day2

io进程线程day2

crispy715的博客 107

I\O进程线程(Day28)

【代码】I\O进程线程(Day28)

weixin_65095004的博客 479

8.28IO进程线程(day7)

有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1.父子进程1(父进程发送,子进程接收)父子进程2(父进程发送,子进程接收)

m0_64959897的博客 250

IO基础讲解及文件缓冲区(11.28补充偏移量和管理函数)

IO 定义 IO指数据流的输入输出,从计算机应用层编程层面来说,在内存中存在数据交换的操作一般认为是IO操作,比如和终端交互 ,和磁盘交互,和网络交互等 程序分类 IO密集型程序:在程序执行中有大量IO操作,而cpu运算较少。消耗cpu较少,耗时长。 计算密集型程序:程序运行中计算较多,IO操作相对较少。cpu消耗多,执行速度快,几乎没有阻塞。 文件 文件是保存在持久化...

weixin_45819795的博客 324

JAVASE_day06进程和线程(1)

并行和并发:进程和线程:多线程的优势:JAVA中创建进程的方式:package com.anonymous.javase.day06; import java.io.IOException; import java.util.List; /*java操作进程: 在java代码中如何运行一个进程(). 方式1:Runtime类中的exec方法; 方式2:ProcessBuilder类中的...

Coder_Hello_World的博客 312

2022/7/28---IO进程线程day2

创作本文的目的:记录自己的学习历程

Anywanna的博客 229
上一篇: day27 文件IO
下一篇: day29 进程基础
luochen330x
博客等级 码龄2年 294粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值