gpt4 book ai didi

c - APUE : Createing a file with a hole in it: Figure 3. 2 第 65 页

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:18 25 4
gpt4 key购买 nike

在“Unix 环境高级编程”的示例中,以下示例程序创建一个文件,然后使用 lseek 将文件指针移动到更远的地址,从而在文件中放置一个“洞”。作者说中间的空格用“0”填充。我想看看那些“0”是否会打印出来。所以我稍微修改了程序。但是我注意到只有有效字符被写入文件。

我的问题是 Unix/Linux 文件系统管理器如何知道不打印中间的字节?

#include "apue.h"
#include <fcntl.h>
#include <unistd.h>

char buf1[] = "abcdefghij";
char buf2[] = "ABCDEFGHIJ";
char buf3[10];

int
main(void)
{
int fd;

if ((fd = creat("file.hole", FILE_MODE)) < 0) {
err_sys("creat error");
}

if (write(fd, buf1, 10) != 10) { /* offset is now = 10 */
err_sys("buf1 write error");
}

if (lseek(fd, 16380, SEEK_SET) == -1) { /* offset now = 16380 */
err_sys("lseek error");
}

if (write(fd, buf2, 10) != 10) { /* offset now = 16390 */
err_sys("buf2 write error");
}
close(fd);

if ((fd = open("file.hole", O_RDWR)) == -1) {
err_sys("failed to re-open file");
}

ssize_t n;
ssize_t m;
while ((n = read(fd, buf3, 10)) > 0) {
if ((m = write(STDOUT_FILENO, buf3, 10)) != 10) {
err_sys("stdout write error");
}
}

if (n == -1) {
err_sys("buf3 read error");
}
exit(0);
}

最佳答案

字符 \000 具有空宽度显示表示。它是打印的,但它的打印是看不见的。并非每个代码点都是一个字符。同样,\n 被打印为换行符,而不是字符。

关于c - APUE : Createing a file with a hole in it: Figure 3. 2 第 65 页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8568136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com