gpt4 book ai didi

充满垃圾的C文件

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

我需要用相同的数字填充我的文件,例如 00000.... 我想使用异步 aio_write 函数。但这里是我得到的

^@ w▒(▒▒▒▒▒l▒@^@Y▒^@^@^@^@▒▒▒▒u▒l▒@*`▒^@ w▒h▒▒▒ ......

这是我的代码

int main(int argc, char *argv[] ){
int sk;
int d;
struct aiocb aior;
if(argc == 3){
sk = atoi(argv[2]);
char buffer[MB * MB * sk];
memset(&aior, 0, sizeof( struct aiocb ));
d = da_open(argv[1]);
da_aio_write( d, &aior, buffer, sizeof(buffer) );
da_test_wait( &aior );
da_close( d );
}
return 0;
}

这是我的异步写函数(我觉得这个函数不好)

int da_aio_write(const int d, struct aiocb *aiorp, void *buf, const int count){
int rv = 0;
memset( (void *)aiorp, 0, sizeof( struct aiocb ) );
aiorp->aio_fildes = d;
aiorp->aio_buf = buf;
aiorp->aio_nbytes = count;
aiorp->aio_offset = 0;

rv = aio_write( aiorp );

if( rv == -1) {
perror("Error da_aio_write\n");
exit(1);
return rv;
}
return rv;
}

这里也是我等待 asyncronius 函数结束

int da_test_wait( struct aiocb *aiorp ){
const struct aiocb *aioptr[1];
int rv;
aioptr[0] = aiorp;
rv = aio_suspend( aioptr, 1, NULL );
if( rv != 0 ){
perror( "aio_suspend failed" );
abort();
}
rv = aio_return( aiorp );
printf( "AIO complete, %d bytes write.\n", rv );
return 1;
}

还有我的完整程序

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/time.h>
#include <string.h>
#include <aio.h>
#include <errno.h>

#define MB 1024

int da_open(const char *name);
int da_aio_write(const int d, struct aiocb *aiorp, void *buf, const int count);
int da_test_wait( struct aiocb *aiorp );
int da_close(int fd);

int da_open(const char *name){
int dskr;
int dskr2;
dskr = open( name, O_RDWR );
if( dskr == -1 ){
printf("File created\n");
dskr2 = open( name, O_WRONLY | O_CREAT, 0644);
}else{
printf("End job!\n");
exit(1);
}
printf( "dskr1 = %d\n", dskr2 );
return dskr2;
}

int da_aio_write(const int d, struct aiocb *aiorp, void *buf, const int count){
int rv = 0;
memset( (void *)aiorp, 0, sizeof( struct aiocb ) );
aiorp->aio_fildes = d;
aiorp->aio_buf = buf;
aiorp->aio_nbytes = count;
aiorp->aio_offset = 0;

rv = aio_write( aiorp );

if( rv == -1) {
perror("Error da_aio_write\n");
exit(1);
return rv;
}
return rv;
}

int da_test_wait( struct aiocb *aiorp ){
const struct aiocb *aioptr[1];
int rv;
aioptr[0] = aiorp;
rv = aio_suspend( aioptr, 1, NULL );
if( rv != 0 ){
perror( "aio_suspend failed" );
abort();
}
rv = aio_return( aiorp );
printf( "AIO complete, %d bytes write.\n", rv );
return 1;
}

int da_close(int fd){
int rv;
rv = close( fd );
if( rv != 0 ) perror ( "close() failed" );
else puts( "closed" );
return rv;
}

int main(int argc, char *argv[] ){
int sk;
int d;
struct aiocb aior;
if(argc == 3){
sk = atoi(argv[2]);
char buffer[MB * MB * sk];
memset(&aior, 0, sizeof( struct aiocb ));
d = da_open(argv[1]);
da_aio_write( d, &aior, buffer, sizeof(buffer) );
da_test_wait( &aior );
da_close( d );
}
return 0;
}

最佳答案

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/time.h>
#include <string.h>
#include <aio.h>

int da_open(const char *name);
int da_aio_read(const int d, struct aiocb *aiorp, void *buf, const int count);

int da_open(const char *name){
int dskr;
int dskr2;
dskr = open( name, O_RDWR );
if( dskr == -1 ){
dskr2 = open( name, O_WRONLY | O_CREAT, 0644);
}else{
exit(1);
}
return dskr2;
}

这是怎么回事?如果文件已经存在,这是确保您不写入文件的混淆方法吗?这显然是不正确的,因为该文件可能在第二次打开之前就已出现。您可以改用 O_EXCL。

由于没有更早地处理退出,代码被额外混淆了。

int da_aio_read(const int d, struct aiocb *aiorp, void *buf, const int count){
int rv = 0;
memset( (void *)aiorp, 0, sizeof( struct aiocb ) );
//memset(buf, 0, sizeof( buf) );
aiorp->aio_fildes = d;
aiorp->aio_buf = buf;
aiorp->aio_nbytes = count;
aiorp->aio_offset = 0;
rv = aio_write( aiorp );
return rv;
}

首先,什么是 fsck。你为什么要调用一个函数something_

rv有什么用?

如果您阅读有关 aio 的任何文档,您会发现您必须明确等待事件完成。

int main(int argc, char *argv[] ){
int sk;
int d;
struct aiocb aior;
char buffer[100];
memset(buffer, 0, sizeof buffer);
if(argc == 3){
sk = atoi(argv[2]);
d = da_open(argv[1]);
da_aio_read( d, &aior, buffer, sizeof(buffer) );
}
return 0;
}

关于充满垃圾的C文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30036910/

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