Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除c中不带stdio.h的文本中的特定行_C_Linux_File Io - Fatal编程技术网

删除c中不带stdio.h的文本中的特定行

删除c中不带stdio.h的文本中的特定行,c,linux,file-io,C,Linux,File Io,我有一个C语言的大学作业,在我必须开发的程序中,有一个函数必须从文本文件中删除特定的行。在我发布这篇文章之前,我搜索了一下,找到了一些答案,但我们的老师告诉我们只能通过系统调用访问文件(所以我不能使用fopen等函数,只能使用open read等),而不能使用stdlib.h的函数和类型,不使用临时文件,也不使用数组临时保存文件内容,然后将其放回主文件 我想要做的就是让用户输入一个主题和一个日期,我将把它放在两个数组中。然后我会搜索一个文本文件,看看是否有这个主题的条目和确切的日期,如果存在,我

我有一个C语言的大学作业,在我必须开发的程序中,有一个函数必须从文本文件中删除特定的行。在我发布这篇文章之前,我搜索了一下,找到了一些答案,但我们的老师告诉我们只能通过系统调用访问文件(所以我不能使用fopen等函数,只能使用open read等),而不能使用stdlib.h的函数和类型,不使用临时文件,也不使用数组临时保存文件内容,然后将其放回主文件

我想要做的就是让用户输入一个主题和一个日期,我将把它放在两个数组中。然后我会搜索一个文本文件,看看是否有这个主题的条目和确切的日期,如果存在,我想删除这一行。如果这一行是文本文件中的最后一行,那么我可以使用truncate函数使文件变小,但是如果我必须删除的那一行是文本文件的第一行或介于两者之间,我找不到实现它的方法


非常感谢您的帮助。

这是您需要的系统调用

然后设计一个算法来使用它们

有两种可能性

将整个文件读入内存。做生意。把它写下来


或者读取一行代码并将其写回新位置的同一个文件中

您应该尝试并显示您的代码,以获得有关此操作的帮助。使用以下事实:文本行是以
\n
(Unix)或
\r\n
(Windows/DOS)结尾的字符串。将文件读入行数组。根据需要删除一行或多行。在写入模式下再次打开文件并写出un delete行。现在,当我从文件中读取时,我使用read,要移动文件描述符,我使用lseek,要写入文件,我使用write。我还使用open、close和dup。听起来你好像写了一些代码。为什么不展示一下你迄今为止所做的尝试和你的策略呢?您还没有指出如何识别要删除的行,但我认为您不需要将整个文件读入内存来执行此操作。您可以打开输入文件,打开(创建)输出文件,并边读边写行。只需省略你应该省略的内容。@zarzonis-这是一个同义反复你为什么要链接到linux.die.net?@DavidHeffernan不知道为什么,但我这么做是因为谷歌在Unix手册页上排名第一。另外,这个问题似乎是关于Linux的。@hyde问题被标记了C@DavidHeffernan如果您有Posix/Linux系统调用文档的替代站点,我洗耳恭听,我相信有很好的替代站点。但所讨论的操作系统是Linux,因此适当系统调用的手册页是查看的正确文档。@DavidHeffernan kernel.org似乎将此类内容重定向到,但对于某些手册页来说,这确实是一个更好的链接位置。谢谢你的指点。