我在互联网上发现了一些类似的问题,但系统调用没有。
我正在我的系统编程课上练习。它要求您仅使用系统调用以二进制形式(P6
,而不是P3
)组合ppm图像文件。输入来自命令行。第一个输入是较大的图像文件,第二个输入是较小的图像文件,在输入之后,文件被组合并写入第三个文件,您可以将其指定为第三个输入的名称。较小的文件将写入较大文件的右上角。
由于我们正在使用系统调用,我假设我们主要使用open/read/write/lseek
。我知道我的ppm文件会在开头存储幻数P6
,然后存储文件的宽度和高度。我知道我可以通过从较大的ppm文件的第1行的左侧写入来使用lseek
,然后在我的指针达到两个文件之间的大小差异时停止,并从中写出该行的剩余像素较小的文件。然后继续,逐行...
但是,我不知道如何实现这一点。我也不确定如何读取文件的宽度和高度。我有点迷茫。 有人可以帮助我走上正确的轨道吗?如果我确实有任何有意义的话,我会发布我的代码,但我刚刚创建了文件的文件描述符并打开它们到目前为止。
编辑:
我通过用较小的文件覆盖较大文件的右上角来组合它们。我不能保证图像的任何内容,所以我必须以某种方式从两个文件中拉出宽度和高度并进行比较,以确保第一个文件的宽度和高度都比第二个文件大。
我认为他们希望我们逐个像素地遍历文件,使用read
读取每个像素的每个rgb值组。然后使用write
逐个像素地循环写入。
EDIT2:
这是一个unix系统调用列表。它们在c库中可用,但这是我可以使用的全部内容:http://www.di.uevora.pt/~lmr/syscalls.html