首页 > 解决方案 > 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]$```

标签: cpipeprintfatoi

解决方案


推荐阅读