抱歉我的英语不好。我是Linux系统编程的新手,也是C编程的新手。
目前我试图取消链接文件,要做到这一点,我必须在某处存储文件路径。我为每个文件使用1024个元素的字符数组。如果我减小数组的大小,文件描述符变得混乱。听起来很愚蠢,但确实如此。
下面是一些代码:
奇怪的行为与数组在C
char path[1024], path2[1024];
const char *file_name = "myfile_1", *file_name2 = "myfile_2",*working_directory="/home/Alexander/lab01/";
strcpy(path, working_directory);
strcat(path, file_name);
strcpy(path2, working_directory);
strcat(path2, file_name);
然后我打开某些文件,读\写等。如果路径& PATH2长1024个字节,一切顺利的话..
但是当我减少路径& PATH2大小为512或256,有些奇怪的事情发生的内存和其他文件描述符...
我可以不明白发生了什么,请帮忙。
代码,在那里我读文件:
fdesc_input = open("/dev/urandom",O_RDONLY);
if (fdesc_input < 0) {
perror("Error opening /dev/urandom: ");
}
fdesc_output = open(path, O_RDWR|O_CREAT|O_TRUNC, 0777);
if (fdesc_output < 0) {
perror("Error opening my file: ");
}
buffer = (unsigned char*) malloc(buffer_size); // make 1kb buffer
desired_filesize = 1024*10; // 10 kilobytes
int curr_size = 0;
while (curr_size < desired_filesize) {
//AFTER NEXT LINE STRANGE HAPPENS
ssize_t result = read(fdesc_input, &buffer, buffer_size);
if (result < 0) {
perror ("Error reading /dev/urandom: ");
exit(1);
}
curr_size += result;
write(fdesc_output, &buffer, buffer_size);
}
你显示的东西看起来不错;我怀疑其中的一些“读/写等...”代码(特别是读)可能涉及到。你能向我们展示读物吗? –
我修改了我的问题 – Groosha
'read(fdesc_input,&buffer,buffer_size);'**是一个bug **。与'write'类似,这里不需要'&'。你也可以选择删除'malloc',并使用一个固定大小的缓冲区,比如'char buffer [buffer_size]'(确保'buffer_size'是一个编译时常量)。 –