Linux系统编程
文章平均质量分 62
GitSoSoA
这个作者很懒,什么都没留下…
展开
-
mmap使用注意事项
9.映射区访问权限为“私有”MAP_PRIVATE,对内存所做的所有修改,只在内存有效,不会反应到物理磁盘上。10.映射区访问权限为“私有”MAP_PRIVATE,只需要open文件时,有读权限,用于创建映射区即可。创建映射区出错概率非常高,一定要检查返回值,确保映射区建立成功再进行后续操作。1.用于创建映射区的文件大小为0,实际指定非o大小创建映射区,出“总线错误”。2.用于创建映射区的文件大小为0,实际制定o大小创建映射区,出“无效参数”。创建映射区的过程中,隐含着一次对映射文件的读操作。原创 2023-07-07 10:37:15 · 130 阅读 · 0 评论 -
存储映射I/O——mmap
这样,就可在不适用read和write函数的情况下,使用地址(指针)完成I/O操作。是一个系统调用,用于在进程的虚拟地址空间中创建映射区域,从而将文件或其他设备映射到内存中。此外,映射区域的访问权限和映射属性可以根据需要进行调整,具体取决于你的应用程序的需求和操作系统的支持。在示例中,我们没有展示具体的读取操作,但你可以使用指针来访问映射区域的数据。使用这种方法,首先应通知内核,将一个指定文件映射到存储区域中。函数返回的映射区域指针通常是页对齐的,所以你可能需要进行适当的内存对齐处理。函数获取文件的大小。原创 2023-07-06 17:18:07 · 114 阅读 · 0 评论 -
sprintf()标准库函数
函数时,你需要提供一个目标字符串的缓冲区,并指定格式化的数据和格式控制字符串。之前,如果你希望清空目标字符串的内容,你需要手动将其设置为空字符串或使用其他字符串处理函数来清空缓冲区。时,它会将格式化的数据写入到目标字符串的起始位置,并逐渐填充字符串缓冲区,直到达到字符串的终止符。都需要确保提供的字符串缓冲区具有足够的空间来容纳格式化的数据,以避免缓冲区溢出导致未定义的行为。允许你指定要写入的最大字符数,从而避免缓冲区溢出,并将数据追加到字符串的末尾。时,它都会从字符串的起始位置开始写入,并覆盖之前的内容。原创 2023-07-06 14:51:37 · 885 阅读 · 0 评论 -
命名管道FIFO
当创建命名管道(FIFO)时,你可以使用两种不同的方法:使用终端命令mkfifo或使用编程语言提供的mkfifo()函数。原创 2023-07-06 14:31:13 · 199 阅读 · 0 评论 -
dup2()实现重定向
函数返回一个整数值,表示复制后的文件描述符。如果复制成功,则返回新的文件描述符;如果出现错误,则返回 -1,并设置相应的错误码。函数创建或打开一个名为 "output.txt" 的文件,并获得一个文件描述符。函数通常与文件操作和进程间通信等场景配合使用,以实现文件描述符的重定向或复制。函数是一个系统调用,用于复制文件描述符,并将其关联到指定的文件描述符。这样,所有后续的标准输出将写入到 "output.txt" 文件中。已经打开,则先关闭它,然后再进行复制操作。函数将标准输出的文件描述符。原创 2023-07-05 10:52:48 · 504 阅读 · 0 评论 -
进程间通信IPC——管道(2)
(2) 写端没有全部被关闭,read 阻塞等待(不久的将来可能有数据递达,此时会让出。(2) 管道未满,write 将数据写入,并返回实际写入的字节数。(1) 管道写端被全部关闭,read 返回 0 ((1) 管道已满,write 阻塞。管道读端全部被关闭, 进程异常终止。返回实际读到的字节数。原创 2023-07-05 10:51:12 · 44 阅读 · 0 评论 -
C语言 open()、read()和write()
在Unix-like操作系统中,文件描述符(file descriptor)是一个用于标识打开文件或I/O设备的整数值。它是对底层文件系统的抽象,用于在应用程序和操作系统之间传递文件信息。文件描述符是一个非负整数,通常是一个小整数。在C语言中,文件描述符被表示为int类型。每个进程在其打开的文件或设备上都有一组文件描述符,它们是连续的、非重复的整数值。当一个文件或设备被打开时,操作系统会为该文件分配一个文件描述符,并将其返回给应用程序。原创 2023-07-05 09:35:43 · 2636 阅读 · 0 评论 -
进程间通信IPC——管道(1)
在计算机编程中,IPC(Inter-Process Communication,进程间通信)是指不同进程之间进行数据交换和通信的机制。而管道(Pipe)是一种常用的IPC机制之一。管道是一种特殊的文件,它提供了一个单向的数据流通道,允许一个进程将数据写入管道,另一个进程则可以从管道中读取数据。这样,两个进程之间就可以通过管道进行数据的传输和共享。在Unix和类Unix系统中,管道可以通过调用pipe()函数来创建。管道有两个端口,分别称为读端(read end)和写端(write end)。原创 2023-07-04 18:37:55 · 102 阅读 · 0 评论 -
Linux 进程操作练习
Quiz:在Linux中用c语言实现:父进程fork3个子进程,3个子进程一个调用ps命令,一个调用自定义程序1(正常),一个调用自定义程序2(会出现段错误)。父进程使用waitpid对子进程进行回收。命令,一个子进程调用自定义程序1(正常执行),另一个子进程调用自定义程序2(会导致段错误)。以下是一个在Linux中使用C语言实现父进程fork三个子进程的示例代码。其中,一个子进程调用。函数等待子进程并进行回收。原创 2023-07-04 16:29:48 · 106 阅读 · 0 评论 -
Linux exec 函数族
函数族是一组用于执行新程序的函数。它们可以用于替换当前进程的映像,从而在同一个进程中执行不同的程序。这些函数族中的每个函数在成功执行时不会返回,而是直接将控制权转移到新程序。类似,但它接受一个参数数组来传递命令行参数。参数数组中的第一个元素通常是可执行文件的路径,接下来是命令行参数,以。这个函数用于执行一个指定的可执行文件。它接受一个文件路径作为参数,后面跟着可选的命令行参数,最后以。类似,但它还接受一个环境变量数组作为参数。该函数会用指定的可执行文件替换当前进程的映像,并开始执行新程序。原创 2023-07-04 10:19:08 · 334 阅读 · 0 评论 -
waitpid()系统调用
是一个系统调用函数,用于等待指定的子进程结束或收到特定的信号。它在许多操作系统(如UNIX和Linux)中可用。函数的返回值是子进程的进程ID,或者在出错时返回-1。:一个指向整数的指针,用于存储子进程的退出状态信息。:指定要等待的子进程的进程ID。:用于指定附加选项的整数值。下面是一个简单的示例代码,演示了如何使用。的值,可以判断子进程的退出状态。,表示不关心退出状态。原创 2023-07-04 09:31:33 · 214 阅读 · 0 评论 -
wait()系统调用
是一个系统调用,用于使父进程等待子进程的终止,并获取子进程的退出状态。系统调用时,可以使用一些宏函数来检查子进程的终止状态并从中提取相关信息。,父进程可以控制和监控子进程的执行,了解子进程的终止状态,并根据需要采取进一步的操作。标志来设置非阻塞模式,这样父进程在没有终止的子进程时不会被阻塞,而是立即返回。时没有终止的子进程,父进程将被阻塞,暂停执行,直到有子进程终止。可以处理多个子进程,但返回的子进程状态是不确定的。返回的状态值,可以获取子进程的退出状态。使父进程暂停执行,直到一个子进程终止。原创 2023-07-03 17:54:31 · 473 阅读 · 0 评论