gpt4 book ai didi

c - 如何将 STDIO.H 库函数与严格的系统调用交换?

转载 作者:行者123 更新时间:2023-11-30 19:00:59 26 4
gpt4 key购买 nike

一个简单的程序,它接受终端指定的输入文件,并更改要反转的文本。怎么可以<stdio.h>函数只能转换为linux系统调用吗? (我假设仅使用像 <unistd.h> 这样的库)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* concat(const char *str1, const char *str2)
{
char *answer = malloc(strlen(str1) + strlen(str2) + 1);
strcpy(answer, str1);
strcat(answer, str2);
return answer;
}

int main(int argc, char** argv) {

FILE * fp;
char * line = NULL;
size_t len = 0;

fp = fopen(argv[1], "r");
if (fp == NULL){
perror("\nError ");
exit(1);
}

char *rev1 = "rev ";
char *rev2 = {argv[1]};
char *rev3 = concat(rev1,rev2);

system(rev3);

fclose(fp);

return 0;
}

感谢您的帮助。公司出于某种原因只希望我使用系统调用,这次实习不太顺利!

最佳答案

don't understand how to properly implement [read and write]

假设您的意思是调用它们(而不是实现它们),则 readwrite 的问题是它们的读取或写入可能少于请求的数量,因此您必须调用他们在一个循环中。

size_t to_write = strlen(str);
while (to_write) {
ssize_t written = write(fd, str, to_write);
if (written < 0) {
perror(NULL);
exit(1);
}

str += written;
to_write -= written;
}

如果您知道需要读取多少内容或尝试读取整个文件,则读取工作方式相同。 (要读取整个文件,请读取 block ,直到 read 返回 08*1024 的因子是不错的 block 大小。)

否则,事情会变得更加复杂。在阅读之前你怎么知道要读多少?例如,如果您想读取一行,则在遇到终止换行之前,您不知道该行有多长。您可以一次读取一个字符,但这非常低效。你可以像 stdio 那样做,并使用一个缓冲区来保存多余的内容。此时您不妨使用 stdio。

关于c - 如何将 STDIO.H 库函数与严格的系统调用交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58682025/

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