我的程序中遇到了一个问题,我需要将字符串从客户端带到服务器,然后服务器将使用该字符串来创建私有FIFO。但是,当我在客户端上提示时键入名称,然后尝试在服务器上继续时,它出错说:不存在文件或目录。
另外,我不明白如何将整数从服务器移动到客户端,因为 write() 方法不起作用(似乎仅适用于字符和字符串)。
客户端:
main (void)
{
int fda; // to write to server
int fdb; // to read response from server
int mem_req[1]; // buffer holds a #
char outchar[7]; // server puts string here
char pfifo_name[10];
memset(mem_req,0,1);
memset(outchar,0,7);
memset(pfifo_name,0,10);
printf("nClient: Please enter a private FIFO name (less than 10 chars): ");
scanf("%s", &pfifo_name);
printf("nClient: Please enter a memory request number: ");
scanf("%d", &mem_req);
if((fda=open("FIFO1", O_WRONLY))<0)
printf("cant open fifo to write");
if((fdb=open(pfifo_name, O_RDONLY))<0)
printf("cant open fifo to read");
write(fda, mem_req, 1);
write(fda, pfifo_name, 10);
printf("nClient: Pfifo and memory request sent to server ");
read(fdb, outchar, 7);
printf("nClient: received from server %s", outchar);
close(fda);
close(fdb);
printf ("nall done!n");
服务器端:
main (void)
{
int fda; // to read from client
int fdb; // to write to client
int finish; // lets me know that client is done
int i; // because C needs this defined as int
int fr_size; // frame size for memory management
int temp_mem;
int n_frame = 0;
int o_frame = 0;
int n_byte = 0;
int o_byte = 0;
int fr_num = 0;
int byte_num;
char mem_req[1]; // buffer holds a character
char outchar[7]; // server puts string here
char pfifo_name[10]; //client provides server a private fifo name
memset(mem_req,0,1);
memset(outchar,0,7);
memset(pfifo_name,0,10);
printf("nServer: Please enter a desired frame(page) size: ");
scanf("%d", &fr_size);
read(fda, pfifo_name, 10);
/* Create the fifos and open them */
if ((mkfifo("FIFO1",0666)<0 && errno != EEXIST))
{
perror("cant create FIFO1");
exit(-1);
}
if ((mkfifo(pfifo_name,0666)<0 && errno != EEXIST))
{
perror("cant create private fifo");
exit(-1);
}
if((fda=open("FIFO1", O_RDONLY))<0)
printf("cant open fifo to read");
if((fdb=open(pfifo_name, O_WRONLY))<0)
printf("cant open fifo to write");
printf("nServer: just got memeory request: ,%d", mem_req[0]);
temp_mem = mem_req[0];
n_frame = temp_mem/fr_size; // number of frames required for job
n_byte = temp_mem - (n_frame * fr_size); // ending byte location
write(fdb, &o_frame, sizeof(o_frame)); // output frame start location
printf("nServer: Frame start location sent");
write(fdb, &o_byte, sizeof(o_byte));
printf("nServer: Byte start location sent");
write(fdb, &n_frame, sizeof(n_frame));
printf("nServer: Frame end location sent");
write (fdb, &n_byte, sizeof(n_byte));
printf("nServer: Byte end location sent");
finish=read(fda, pfifo_name, 10); //read the character
当编译器到达服务器上的 mkfifo(pfifo_name,0666)<0 时,它会出错:
"无法创建私有FIFO:不存在此类文件或目录"
我还收到来自服务器上所有 4 个 write 语句的错误(尝试通过管道传递整数,但它不起作用)
在服务器中:
read(fda, pfifo_name, 10);
此操作失败fda
因为它不包含有效的文件描述符,因为它从未初始化过。
结果,没有任何东西被读入pfifo_name
,所以它只保存0个字节(因为之前对memset
的调用),即一个空字符串。然后,将此传递给 open
,这会尝试打开一个名称为空的文件,该文件无效。