c - Sprintf 将大量数字变为“4”
问题描述
我正在尝试传递管道并需要将其标识符转换为字符串。我的问题是,目前 sprintf 正在将标识符转换为 '4' 作为字符串,传递给的进程显然不能使用(注意:它在发布过程中被转换为 4,所以问题不在于 pass 本身)
代码:
发行流程:(PipeC.c)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
int main(){
int fd[2], B, C, D, numberRead, i, pipeReturn, *code;
char *arg[4];
char charsRead [10000], fdNumberAsString[256];
pipeReturn = pipe(fd);
if(pipeReturn < 0){ printf("error creating pipe\n"); return;}
sprintf(fdNumberAsString, "%d", fd[0]);
arg[0] = "PipeW1";
arg[1] = fdNumberAsString;
//printf("%d\n", fdNumberAsString);
sprintf(fdNumberAsString, "%d", fd[1]);
//printf("%d\n", fdNumberAsString);
arg[2] = fdNumberAsString;
arg[3] = NULL;
printf("PipeC - fd[0] = string: %s int: %d\n", arg[1], arg[1]);
printf("PipeC - fd[1] = string: %s int: %d\n", arg[2], arg[2]);
//printf("fd[0] = %d, fd[1] = %d\n", fd[0], fd[1]);
B = fork();
if(B == 0){
execv("PipeW1", arg);
printf("execv failed\n");
exit(1);
}
close(fd[1]);
numberRead = read(fd[0], charsRead, 5);
for(i = 0; i < 5; i++)printf("%c ", charsRead[numberRead]);
wait(code);
exit(0);
}
创建的流程(PipeW1.c):
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int x, char** args){
printf("here\n");
int fd[2], pipeReturn, *ptr;
char num[256];
fd[0] = strtol(*(args+1), &ptr, 10);
printf("%d\n", fd[0]);
printf("PipeW1 - fd[0] = int: %d\n", fd[0], fd[0]);
fd[1] = atoi(*(args+2));
printf("PipeW1 - fd[0] = string: %s int: %d\n", fd[0], fd[0]);
printf("PipeW1 - fd[1] = string: %s int: %d\n", fd[1], fd[1]);
close(fd[0]);
write(fd[1], "12345", 5);
exit(0);
}
结果输出:
[myname@myserver folder]$ PipeC
PipeC - fd[0] = string: 4 int: 1061374320
PipeC - fd[1] = string: 4 int: 1061374320
4
4
[myname@myserver folder]$```
解决方案
推荐阅读
- html - 从 django 模型表单中删除字段会破坏 HTML 中的格式
- r - 如何在 ggplot2 中创建具有多个计数变量的线图?
- r - 如何使用带有数据框的 dplyr 在 R 中创建百分位数?
- amazon-web-services - 如何从jenkins管道将命令行参数传递给aws beanstalk中的jar?
- nuget - nuget.exe 忽略 packageSourceCredentials 的继承
- c# - 如何更改此代码以查找具有特定标签而不是特定对象的对象的转换?
- android - 使用 app:srcCompat android MaterialButton 而不是 app:icon 时图标未显示
- reactjs - 反应上传功能不显示/上传文件内容(antd/AntDesign)
- asp.net-core - 在 Jenkins(BlueOcean) 管道中发布 cobertura 代码覆盖率结果
- css - 仅当父级宽度不足时才允许水平重叠 div