我正在尝试重新设计我以前的项目的应用程序接口,它是用C语言编写的,这样它就可以用在用C++语言编写的应用程序中。
我在C语言中使用lseek()来追逐表格、页面等。我的问题是,在C++中仍然可以像我使用lseek()的方式那样使用它吗,就像下面的示例代码:
/* Read page data from an offset. It assumes that pagenum is zero-indexed*/
lseek(bq.unixfd, PAGE_SIZE + (PAGE_SIZE * bq.pagenum), SEEK_SET);
非常感谢
我对C和系统调用以及指针都很生疏,所以这是一个很好的复习练习,可以让我回到正轨。我所需要做的就是,给定这样的文件:
YYY.txt: "somerandomcharacters"
把它改为这样:
YYY.txt: "somerandomabcdefghijklmnopqrstuvwxyzcharacters"
所以所做的就是将一些字符添加到文件的中间。显然,这很简单,但是在C语言中,在添加附加字符之前,您必须事先跟踪和管理文件的大小。
以下是我天真的尝试:
//(Assume a file called YYY.txt exists and an int YYY
我有一个程序的版本,它曾经编译成一个*.o文件,但现在它不能编译,并给出了一个编译器错误。我曾尝试在Linux上用gcc编译器编译我的代码,但编译失败。
我看到编译器错误:
dspter.c:209:18: error: ‘FILE’ has no member named ‘__fileL’
lseek ((int)Ofd->__fileL, 1-sizeof(PDAY_REC99), SEEK_END);
dspter.c:220:13: error: ‘FILE’ has no member named ‘__fileL’
lseek (Ofd->__fileL
我读到了这个答案:
我的问题更具体:
在使用access()、open()、creat()、write()、read()等系统调用的程序中...我必须声明每个系统调用函数吗?这就是C的工作方式吗?因为我得到了以下信息:
hw1.c: In function ‘main’:
hw1.c:50:9: warning: implicit declaration of function ‘access’ [-Wimplicit-function-declaration]
hw1.c:131:9: warning: implicit declaration of function ‘lseek’ [-W
GNU unistd.h有这样一点魔力:
/* Move FD's file position to OFFSET bytes from the
beginning of the file (if WHENCE is SEEK_SET),
the current position (if WHENCE is SEEK_CUR),
or the end of the file (if WHENCE is SEEK_END).
Return the new file position. */
#ifndef __USE_FILE_OFFSET64
extern _
我试图向后读取一个文件(比如文件末尾的10行)。每次新的行计数器(newline_counter)读取'\n‘时,我都会增加它。一旦newline_counter到达user_num (参数),比如10行,lseek()就会停在当前位置(current_pos)。我返回这个位置,这样我就可以在另一个函数中使用这个位置,这个函数使用lseek()到这个位置,然后从这个位置开始读取,然后写到文件的末尾。我已经成功地编译了这个程序,但是一旦我开始运行它,这个程序就会继续运行,并且没有输出。
int func_line_mode(int infile, int user_num) {
修正(见最终编辑)
我正试图通过查找和读取来获取文件的最后一个字符。我打开的文件是这样的(末尾没有'\n‘):
the quick brown fox jumps over the lazy dog
我希望输出是'd‘。由于某些原因,执行doing (file,-1,SEEK_END)似乎不起作用。但是,在它工作后添加一个冗余的adding (文件、位置、SEEK_SET)。我的代码:
int file;
char c;
int position;
/*************** Attempt 1 (does not work) ***************/
fil
我正在为一个应用程序做一个扩展。我的扩展使用,我想使用它将所有文件流量重定向到SolFS。要做到这一点,我需要一点帮助,因为SolFS并没有对应于所有需要的功能(准确地说是3个)
这是我将要“转换”的代码:
以下是SolFS拥有的东西的列表:
//stuff I need which SolFS has
x remove
x fopen
x fclose
x fwrite
x fread
x access
x fgetpos
x fsetpos
这是我可以很容易地自己创建的:
//stuff I can easily make
fgetc//I
考虑以下代码:
lseek(fd, 100, 0); /* Seek to the 100th byte in the file fd. */
write(fd, buf, n); /* Write from that position. */
lseek(fd, 0, 0); /* Is this necessary? Will it trigger a actual disk movement? */
我希望lseek回到文件的开头,以防另一行代码继续从该位置编写代码,认为它是从文件的开头开始的。首先,这是一个好的实践吗?第二……
我想知道lseek是否触发了实际的磁盘移动。或者,磁盘移动
我使用lseek只是为了查找文件的大小,而lseek返回的字节比文件的实际大小要少。我认为代码是正确的,我无法解释为什么会发生这种情况。
当我第一次运行这个程序时,它运行得很好。然后,我向文件中添加了一些数据,使其改变了大小。从那时起,当我再次使用新文件运行程序时,结果始终是旧文件的大小。
任何帮助都很感激!
int main(int argc,char* argv[]){
int out_file_size=0;
int fd_prognameout;
fd_prognameout=open(argv[1],O_RDWR | O_CREAT,00700);
我正在尝试用NDK编译,我的环境:
Win10(64位)+NDK(r14b,64位)+lib引信(3.1.0)
错误发生在fuse_common.h中,它检查off_t的大小
$ ndk-build
[armeabi-v7a] Compile thumb : fuse <= buffer.c
In file included from jni/../../libfuse/lib/buffer.c:15:
In file included from jni/../../libfuse/lib/fuse_i.h:9:
In file included from jni/../../libf
我需要确定POSIX下的二进制常规文件的文件大小。我知道如何将其与lseek()和fstat()一起使用:
#include <sys/stat.h> // for open() and fstat()
#include <fcntl.h> // for O_RDONLY
#include <unistd.h> // for lseek()
int fd = open("something.bin", O_RDONLY);
if (fd == -1)
{
perror("Unable to open file to
我必须写C代码来读取大文件。代码如下:
int read_from_file_open(char *filename,long size)
{
long read1=0;
int result=1;
int fd;
int check=0;
long *buffer=(long*) malloc(size * sizeof(int));
fd = open(filename, O_RDONLY|O_LARGEFILE);
if (fd == -1)
{
printf("\nFile Open Unsucces